小编Sre*_*r R的帖子

方案:是否可以将 S 表达式列表转换为原子列表?

我试图将一个 S 表达式列表转换为一个简单的原子列表,类似于The Little Schemer一书中问题。

我的代码是(在 Dr.Racket 中输入):

> (define lat '((coffee) cup ((tea) cup) (and (hick)) cup))
> (define f
    (lambda (lat)
      (cond
        ((null? lat) (quote ()))
        ((atom? (car lat)) (cons (car lat) (f (cdr lat))))
        (else (cons (f (car lat)) (f (cdr lat)))))))
> (f lat)
'((coffee) cup ((tea) cup) (and (hick)) cup)
Run Code Online (Sandbox Code Playgroud)

上面的代码返回与输入列表相同的列表。我尽力了,但得到了不同的答案,例如:

(coffee)
(cup . cup)
( () (()) (()) )
Run Code Online (Sandbox Code Playgroud)

用于程序中的各种修改。

我想知道,我们能不能得到答案:

'(coffee cup tea cup and hick cup)
Run Code Online (Sandbox Code Playgroud)

给予

'((coffee) …
Run Code Online (Sandbox Code Playgroud)

lisp recursion scheme flatten the-little-schemer

1
推荐指数
1
解决办法
147
查看次数

Common Lisp 排序函数从原始列表中删除一个元素

我正在使用SBCL,当我使用sort如下功能时,

CL-USER> (defparameter y '(5 7 2 9 4 6))
Y
CL-USER> y
(5 7 2 9 4 6)
CL-USER> (sort y #'>)
(9 7 6 5 4 2)
CL-USER> y
(7 6 5 4 2)
Run Code Online (Sandbox Code Playgroud)

最大的元素(在本例中为 9)从原始列表中删除。

想知道发生了什么?

lisp sbcl common-lisp

1
推荐指数
2
解决办法
92
查看次数