相关疑难解决方法(0)

为什么递归"让"让空间有效?

我在研究功能反应式编程时发现了这一说法,来自Hai Liu和Paul Hudak的"箭头堵塞空间泄漏"(第5页):

Suppose we wish to de?ne a function that repeats its argument inde?nitely:

    repeat x = x : repeat x

or, in lambdas:

    repeat = ?x ? x : repeat x

This requires O(n) space. But we can achieve O(1) space by writing instead:

    repeat = ?x ? let xs = x : xs
                  in xs
Run Code Online (Sandbox Code Playgroud)

这里的差异似乎很小,但它极大地促进了空间效率.为什么以及如何发生?我做的最好的猜测是手工评估它们:

    r = \x -> x: r x
    r 3

    -> 3: r 3 
    -> 3: 3: 3: …
Run Code Online (Sandbox Code Playgroud)

haskell frp

48
推荐指数
3
解决办法
2092
查看次数

制作列表以在Haskell中计算Pascal的三角形

我正在尝试创建一个接受整数的函数,并将mPascal三角形的行返回到该m行.

我已经构造了一个choose函数,它接受两个整数n和k,并返回值n选择k.例如,choose 3 2返回3.

到目前为止,我有

pascal 0 = [1]
pascal m = [x | x <- pascal (m-1)] ++ [choose m k | k <- [0,1..m]
Run Code Online (Sandbox Code Playgroud)

这是返回一个大的列表,但实际上,我想要一个列表列表,其中每个列表对应于Pascal三角形中的一行.例如pascal 3应该返回[[1],[1,1],[1,2,1],[1,3,3,1]].它目前正在回归[1,1,1,1,2,1,1,3,3,1].

recursion haskell list

4
推荐指数
1
解决办法
1798
查看次数

标签 统计

haskell ×2

frp ×1

list ×1

recursion ×1