gpt4 book ai didi

lambda - 仅具有 lambda 表达式的阶乘函数

转载 作者:行者123 更新时间:2023-12-04 17:40:29 25 4
gpt4 key购买 nike

仅使用 lambda 表达式,您可以自己创建的最透明、最优雅的阶乘函数是什么?

我的一个学生在伯克利上了一门 Scheme 类(class),并获得了这个额外的学分问题,即仅使用 lambda 表达式(没有定义、让或其他幂过程)创建阶乘函数。我花了一段时间来解决,而且很复杂和丑陋。

几年后,我现在正在教 Scheme,我意识到我要把它设置为对自己的挑战,并认为其他人也可能会欣赏它。

最佳答案

这是一个( curry )版本:

((lambda (x) (x x))
(lambda (fact-gen)
(lambda (n)
(if (zero? n)
1
(* n ((fact-gen fact-gen) (sub1 n)))))))

尾递归版本:
(let ((fact-gen
(lambda (fact-gen n acc)
(if (zero? n)
acc
(fact-gen fact-gen (sub1 n) (* n acc))))))
(lambda (n) (fact-gen fact-gen n 1)))

关于教会数字:
(let* ((one (lambda (s z) (s z)))
(add1 (lambda (n) (lambda (s z) (s (n s z)))))
(* (lambda (a b) (lambda (s z) (a (lambda (z2) (b s z2)) z))))
(cons (lambda (a b) (lambda (f) (f a b)))))
(lambda (n)
((n (lambda (p)
(p (lambda (count acc)
(cons (add1 count) (* count acc)))))
(cons one one))
(lambda (a b) b))))

关于lambda - 仅具有 lambda 表达式的阶乘函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5206266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com