计划中的汽车和司机让我发疯

kri*_*ger 15 scheme

嗨我面临的问题carcdr功能

例如:

首先我定义了一个名为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

尝试一步一步:

  • cdr产生没有第一个元素的列表
  • 汽车产生列表的第一个元素

                                  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)


das*_*ang 5

一次进行一次转换。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)