(define Y
(lambda (F)
(let ((W (lambda (x)
(F (lambda arg (apply (x x) arg))))))
(W W))))
(define F1
(lambda (func-arg)
(lambda (n)
(if (zero? n)
"_/ \\"
(string-append "_/ \\" (func-arg (- n 1)))))))
(define F2
(lambda (func-arg)
(lambda (n)
(if (zero? n)
" \\_/"
(string-append " \\_/" (func-arg (- n 1)))))))
(define F
(lambda (func-arg)
(lambda (n)
(display ((Y F1) #x20))
(newline)
(display ((Y F2) #x20))
(newline)
(if (zero? n)
""
(func-arg (- n 1))))))
((Y F) #x40)Scheme函数式编程小试
最新推荐文章于 2022-10-23 15:33:21 发布
本文通过定义两个简单的递归函数F1和F2,展示了如何使用Y组合子实现自调用的过程。F1和F2分别生成斜杠和反斜杠的字符串,并通过递归方式重复此过程。通过Y组合子的应用,避免了直接使用递归定义,展示了函数式编程中解决递归的一种方法。
2865

被折叠的 条评论
为什么被折叠?



