【发布时间】:2014-09-06 08:58:23
【问题描述】:
我是 Haskell 的新手,我正在努力学习基础知识。我需要为位置声明一个名为 Pos 的类型,它将有两个整数,然后我需要有方向北、南、西、东,以便我可以根据方向更改位置。 一旦我这样做了,我需要创建一个名为 move 的函数,它将获取一个移动列表和初始位置,并在所有移动之后返回该位置。 这是我的代码,但我被困在必须遍历移动列表的地步。
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'。现在您必须以起点p'执行移动m2,...,mn...这与之前的问题相同,但参数不同。
标签: haskell