我试图将一个 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) 我正在使用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)从原始列表中删除。
想知道发生了什么?