0

所以我正在尝试使用一些代码并在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))

这显然是错误的,但我不知道如何进一步进行......

4

1 回答 1

0

我写了一篇关于如何let转化为lambda幕后的帖子,您可能会觉得有帮助。

根据我帖子中描述的扩展,您的代码将扩展为:

((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))
于 2016-04-01T18:32:54.703 回答