我有Haslell方向,以及如何使其为整数?

时间:2019-01-20 19:18:45

标签: haskell

我有路线,我就这样走了第一步

这是方向:

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)

1 个答案:

答案 0 :(得分:5)

我相信我了解您有一个名为Dir数据类型,其中 constructors 分别为NorthSouth,{ {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) )来解决此问题,也可以制作自己的原始递归函数。