我是Haskell的新手,我正在尝试学习基础知识。我需要声明一个名为Pos的类型,这个类型将有两个整数,然后我需要指定North,South,West,East的方向,以便根据方向改变位置。 一旦我这样做了,我需要制作一个叫做移动的函数,这个函数将取得一系列移动和初始位置,并在所有移动之后返回位置。 这是我的代码,但我坚持要点迭代通过移动列表。基本的Haskell函数
type Pos = (Int, Int)
data Direction = North | South | East | West
move :: Direction -> Pos -> Pos
move North (x,y) = (x, y+1)
move West (x,y) = (x-1, y)
move South (x,y) = (x, y-1)
move East (x,y) = (x+1, y)
moves :: [Direction] -> Pos -> Pos
moves [] (x,y) = (x,y)
moves (h:xs) (x,y)
| h == North = move North (x,y)
| h == West = move West (x,y)
| h == South = move South (x,y)
| otherwise = move East (x,y)
我在这里错过了什么?
你不*有*要“迭代”。 *递归地考虑*。你有一个起点'p'和一个序列'm1,...,mn'。要执行这些动作,首先在起点'p'执行移动'm1',从而到达'p''点。现在,您必须执行移动'm2,...,mn',其起点为'p'' ...这与之前的问题相同,但参数不同。 – Bakuriu 2014-09-06 09:13:08