【发布时间】:2021-05-18 22:25:54
【问题描述】:
我正在学习一些关于 lambda 演算(非常简洁)的知识,并在方案中定义了以下如何完成一对:
; PAIR
; λabf.fab
(define PAIR (lambda (a) (lambda (b) (lambda (f) ((f a) b)))))
(define mypair ((PAIR 1) 2))
; FIRST
; λab.a
(define FIRST (lambda (a) (lambda (b) a)))
; SECOND
; λab.b
(define SECOND (lambda (a) (lambda (b) b)))
(display "First is: ") (display (mypair FIRST))
(display " | Second is: ") (display (mypair SECOND))
First is: 1 | Second is: 2
如何进一步抽象这一点来创建一个列表的数据结构,例如,制作类似[1 2 3 4 5] 而不仅仅是[2 3] 的东西?
我自己能做的最好的事情就是对这些进行硬编码,例如,五个:
(define five (
(PAIR 1) (
(PAIR 2) (
(PAIR 3) (
(PAIR 4) 5)))))
(display (five FIRST)) (display ((five SECOND) FIRST)) (display (((five SECOND) SECOND) FIRST)) (display ((((five SECOND) SECOND) SECOND) FIRST)) (display ((((five SECOND) SECOND) SECOND) SECOND))
12345
对此有更“通用”的解决方案吗?
【问题讨论】:
标签: lambda scheme lisp lambda-calculus sicp