Haskell - 如何创建一个将重复一行代码n次

时间:2015-11-20 15:26:22

标签: loops haskell recursion repeat

首先,我想解释一下,这个问题的主要原因是我很难理解如何避免对“问题”的要求。在函数式编程中循环。

我知道这是函数式编程新手的一个非常常见的问题,我花了几个小时搜索与此类似的帖子。但是我还没有找到解决我特定问题的方法。

我遇到以下问题:

我正在使用一个带有预先制作的Haskell命令的简单2d图形窗口来控制光标,该光标将在光标移动的任何地方跟踪屏幕上的一条线。

我正在尝试创建一个函数,该函数将使光标跟踪具有n个边的正多边形。

这涉及重复以下代码行n次:

Fd 1 :> Rt (360/(fromIntegral n))

此代码说:"向前移动(向前相对于光标的当前方向)1个单位"然后:"顺时针旋转光标360 / n度"。

显然我现在需要创建一个函数,它可以重复上面的代码行n次,以创建正多边形。

我已经尝试了几种方法来递归地解决问题但是我目前可以管理的最好方法如下:

rep :: (Eq a, Integral a) => a -> Command -> Command
rep 1 action = action
rep n action = rep (n-1) action 

实际上,这段代码编译得很好,最终会一直递归到n = 1,它会执行一次动作(动作将是第一行代码)

我本能地想要同时获取该代码的最后一行,执行动作使用n-1和action作为参数调用自身。但我不知道这是否可能,或者它是否是实现我想要实现的目标的最佳方式。

任何人都可以就此问题向我提出任何见解将不胜感激,谢谢。

0 个答案:

没有答案