繁体   English   中英

Haskell:Let语句在函数声明中使用先前声明的变量

[英]Haskell: Let statement using previous declared variable in function declaration

说我有功能

foo n = foo' 1 where
    foo' n = foo' 1
    foo' x = x : foo' (x + 1)

例如,假设n = 5是否可以使foo'n的含义为foo'5? 因此它将循环。

我猜您要的是这样的:

foo n = foo' 1 
  where
    foo' x | x == n = foo' 1
    foo' x = x : foo' (x + 1)

| x == n | x == n part是模式匹配保护条件。

似乎有一种使用Data.List中的函数来完成此操作的简单方法

:m + Data.List
让mkList计数=(连续。复制计数)[1..to]
清单5 9
[1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5 ,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5]
mkList 1 10
[1,1,1,1,1,1,1,1,1,1,1]

除了复制之外,您还可以使用takecycle

让mkList进行计数=进行计数$ cycle [1..to]

乘车和骑自行车会更便宜,因为您不必回头去整理清单。

或者你也可以使用迭代

((take 10 $ iterate (+1) 0) == [0..9]) == True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM