【问题标题】:Generating list of neighbors of a state生成一个州的邻居列表
【发布时间】:2013-10-29 08:29:32
【问题描述】:

我在 Haskell 中生成一个州的邻居。

状态是行的列表。这些动作可以在一行上独立执行。对每一行调用一个函数,该函数返回该行的一组邻居。

这是一个示例(为简单起见,我将行设为字符):

state = ['a', 'b', 'c']
rowNeighbours a = ['x', 'y']
rowNeighbours c = ['p', 'q']
rowNeighbours _ = []

neighbours 应该在每一行上调用rowNeighbours 并生成一个状态列表[['x', 'b', 'c'], ['y', 'b', 'c'], ['a', 'b', 'p'], ['a', 'b', 'q']]

我无法生成此列表。以下是我想出的解决方案。

neighbours state =
[ [x, y, z] | x <- rowNeighbours (state !! 0), y <- [state !! 1], z <- [state !! 2] ] ++
[ [x, y, z] | x <- [state !! 0], y <- rowNeighbours (state !! 1), z <- [state !! 2] ] ++
[ [x, y, z] | x <- [state !! 0], y <- [state !! 1], z <- rowNeighbours (state !! 2) ]

它可以工作,但我的实际问题有“6”行,所以这变得非常不雅,看起来像是一种非功能性的做事方式。我将不胜感激有关如何执行此操作的任何指示,谢谢。

【问题讨论】:

    标签: haskell


    【解决方案1】:

    我认为这会满足您的要求:

    neighbors (s:tate) = map (: tate) (rowNeighbors s) ++ map (s :) (neighbors tate)
    neighbors [] = []
    

    【讨论】:

      猜你喜欢
      • 2016-12-04
      • 1970-01-01
      • 2020-08-12
      • 2016-10-22
      • 2016-10-31
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多