我有路线,我就这样走了第一步
这是方向:
ApplicationUser_Id
如何实现?
North (x,y) = (x,y+1)
East (x,y) = (x+1,y)
South (x,y) = (x, y-1)
West (x,y) = (x-1, y)
我的代码:
f13 :: [Dir] -> (Int,Int)
f13 [North, North] == (0,2)
f13 [North, East, South, West] == (0,0)
f13 (replicate 10 East) == (10,0)
答案 0 :(得分:5)
我相信我了解您有一个名为Dir
的数据类型,其中 constructors 分别为North
,South
,{ {1}}和East
:
West
您想要创建一个函数,该函数使用开始位置和步骤列表来计算网格上的新位置,其中许多值类型为 type { {1}},这就是我们获得列表data Dir = North | South | East | West
的地方。
如果这是正确的,则考虑做两个单独的功能。第一个功能将一次执行一个步骤。我们可以简单地匹配每个模式(北,南,东,西)并分别处理每种情况:
Dir
现在我们有了基本映射,它定义了[Dir]
与网格的关系,我们可以将其重复应用于方向列表。我将把这部分交给你。您可以四处查看如何使用折叠(尤其是step :: (Int, Int) -- ^ The starting point
-> Dir -- ^ The direction to step
-> (Int, Int) -- ^ Where we end up
step (x,y) North = (x,y+1)
step (x,y) South = (x,y-1)
step (x,y) East = (x+1,y)
step (x,y) West = (x-1,y)
)来解决此问题,也可以制作自己的原始递归函数。