嗨我面临的问题car和cdr功能
例如:
首先我定义了一个名为x的列表
(define x (a (bc) d ( (ef) g ) ))
Run Code Online (Sandbox Code Playgroud)
所以x现在等于 (a (bc) d ( (ef) g ) )
现在例如我需要仅使用和
(!! noshortcuts作为caddr cddr !!)从这个列表中获取g,正确的答案是:carcdr
(car(cdr(car(cdr(cdr(cdr x))))))
Run Code Online (Sandbox Code Playgroud)
但是怎么样?:-(我按照规则工作(car给出列表的头部并cdr给出尾部)
而不是得到上面的答案我一直得到错误的答案.任何人都可以帮助我理解这一点......给我一步或者一步一步解决它
提前致谢.我真的厌倦了Scheme.
Cur*_*urd 40
尝试一步一步:
汽车产生列表的第一个元素
x is (a (bc) d ( (ef) g ))
(cdr x) is ( (bc) d ( (ef) g ))
(cdr (cdr x)) is ( d ( (ef) g ))
(cdr (cdr (cdr x))) is ( ( (ef) g ))
(car (cdr (cdr (cdr x)))) is ( (ef) g )
(cdr (car (cdr (cdr (cdr x))))) is ( g )
(car (cdr (car (cdr (cdr (cdr x)))))) is g
Run Code Online (Sandbox Code Playgroud)一次进行一次转换。cdr给您一个没有第一个元素的列表,car给您一个第一个元素。
(cdr (a (bc) d ( (ef) g ) )) -> ( (bc) d ( (ef) g ) )
(cdr ( (bc) d ( (ef) g ) )) -> ( d ( (ef) g ) )
(cdr ( d ( (ef) g ) )) -> ( ( (ef) g ) )
(car ( ( (ef) g ) )) -> ( (ef) g ) <- pulls the first element out, which happens to be a list itself
(cdr ( (ef) g )) -> (g)
(car (g)) -> 'g
Run Code Online (Sandbox Code Playgroud)