方案:从 Let 转换为 Lambda

Scheme: Convert from Let to Lambda

所以我尝试用一​​些代码进行实验,并在 letlambda 的两种方案表达式方法之间进行更改。

我的代码如下:

(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))