簡體   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