【发布时间】:2021-11-13 17:14:10
【问题描述】:
我正在寻找一种方法来了解如何使用一种类型的列表的内容来输出另一种类型的列表以供在游戏中使用。
data Dir = N | E | S | W deriving (Show,Eq)
data Steps = Forward | Right | Back | Left deriving Show
quickGame :: Dir -> [Dir] -> [Steps]
quickGame d [] = []
因此,如果quickGame N [S,W,E,N,N] 是输入,我将收到 [Back,Right,Back,Left,Forward] 作为回报。
任何帮助将不胜感激。我已经尝试过 if then else 遍历列表以输出第二个,但必须有更清洁的方法吗?
【问题讨论】:
-
为什么不是
[Back, Right, Left, Forward, Forward]? -
在数据构造函数上使用模式匹配对我来说似乎是最干净的方法,但我不明白您的示例输入/输出是如何工作的。你确定它是正确的吗?
-
您能用文字解释一下您是如何从示例中的输入列表中获取输出列表的吗?你有两个
N去不同的输出,所以它显然不仅仅依赖于一对一的映射。你提出的算法是什么? -
您可能希望在您面对的方向和您移动的方向之间做出更明确的区分。例如,如果您朝北并向南迈出一步,则结果是您朝南。朝南向西走一步会导致您朝西(如果您仍然朝东,则相对于向东)。
标签: haskell list-comprehension