任何人都可以帮我跟踪这个LISP表达式执行吗?

时间:2014-04-23 01:04:19

标签: lisp common-lisp

L1 = ((A B) C D)
L2 = ((E) F)

我应该评估的表达方式是: (CONS (CAR L1) (LIST (CDR L2)))

我已将其描述如下:

(CONS (CAR L1) (LIST (CDR L2)))
(CONS ((A B)) (LIST ((F))))
(CONS ((A B)) (((F))))
((((A B)) (((F)))))

或者(我不确定这是否更具可读性,但我已经按太空了太多时间才能退出):

(
 (
  (
   (A B)
  )
  (
   (
    (F)
   )
  )
 )
)

这是对的吗?看起来似乎有太多的括号,但也许我只是偏执狂?

我找到的所有例子都没有这样的嵌套列表,所以我真的不确定我是否做得对。

由于

2 个答案:

答案 0 :(得分:3)

CL-USER 13 > (step (CONS (CAR L1) (LIST (CDR L2))))
(CONS (CAR L1) (LIST (CDR L2))) -> :s
   (CAR L1) -> :s
      L1 -> :s
      ((A B) C D) 
   (A B) 
   (LIST (CDR L2)) -> :s
      (CDR L2) -> :s
         L2 -> :s
         ((E) F) 
      (F) 
   ((F)) 
((A B) (F)) 

答案 1 :(得分:2)

这是不正确的。让我们再试一次。

(car '((a b) c d))是基准(a b)

(cdr '((e) f))(与(cdr '((e) . (f)))相同)是基准(f),这意味着(list (cdr '((e) f)))是基准((f))

因此,(cons (car l1) (list (cdr l2)))(cons '(a b) '((f)))相同,((a b) . ((f)))是基准((a b) (f)),与{{1}}相同。