方案:从 Let 转换为 Lambda
Scheme: Convert from Let to Lambda
所以我尝试用一些代码进行实验,并在 let 和 lambda 的两种方案表达式方法之间进行更改。
我的代码如下:
(let splice ((l '()) (m (car s)) (r (cdr s)))
(append
(map (lambda (x) (cons m x)) (perm (append l r)))
(if (null? r) '()
(splice (cons m l) (car r) (cdr r)))))
我正在尝试将最外层的 let 定义更改为 lambda 格式,但由于代码。到目前为止我试图做的是:
(lambda (splice (l m r))
(append
(map (lambda (x) (cons m x)) (perm (append l r)))
(if (null? r) '()
(cut (cons m l) (car r) (cdr r)))))
(('()) (car upList) (cdr upList))
这显然是错误的,但我不知道如何进一步...
我写了 a post about how let
is transformed into lambda
behind the scenes,您可能会觉得有用。
根据我的 post 中描述的扩展,您的代码将扩展为:
((rec (splice l m r)
(append (map (lambda (x) (cons m x)) (perm (append l r)))
(if (null? r)
'()
(splice (cons m l) (car r) (cdr r)))))
'() (car s) (cdr s))
然后扩展为:
((letrec ((splice (lambda (l m r)
(append (map (lambda (x) (cons m x)) (perm (append l r)))
(if (null? r)
'()
(splice (cons m l) (car r) (cdr r)))))))
splice)
'() (car s) (cdr s))
所以我尝试用一些代码进行实验,并在 let 和 lambda 的两种方案表达式方法之间进行更改。
我的代码如下:
(let splice ((l '()) (m (car s)) (r (cdr s)))
(append
(map (lambda (x) (cons m x)) (perm (append l r)))
(if (null? r) '()
(splice (cons m l) (car r) (cdr r)))))
我正在尝试将最外层的 let 定义更改为 lambda 格式,但由于代码。到目前为止我试图做的是:
(lambda (splice (l m r))
(append
(map (lambda (x) (cons m x)) (perm (append l r)))
(if (null? r) '()
(cut (cons m l) (car r) (cdr r)))))
(('()) (car upList) (cdr upList))
这显然是错误的,但我不知道如何进一步...
我写了 a post about how let
is transformed into lambda
behind the scenes,您可能会觉得有用。
根据我的 post 中描述的扩展,您的代码将扩展为:
((rec (splice l m r)
(append (map (lambda (x) (cons m x)) (perm (append l r)))
(if (null? r)
'()
(splice (cons m l) (car r) (cdr r)))))
'() (car s) (cdr s))
然后扩展为:
((letrec ((splice (lambda (l m r)
(append (map (lambda (x) (cons m x)) (perm (append l r)))
(if (null? r)
'()
(splice (cons m l) (car r) (cdr r)))))))
splice)
'() (car s) (cdr s))