这些 LISP 表达式如何计算所提供的答案



现在,只要看一下问题和变量LX,我至少可以看到这些答案是如何实现的。

但这一次,我想知道这些答案是如何产生的,一步一步地了解内部运作。 我的教授绝对是可怕的,无法解释他的生活。

L = (D B B A A A A C)
X = ((2B) (4A) (1C))
Q1) (cons (list (+ (caar X) 1) (cadar X)) (cdr X))
Answer: ((3B) (4A) (1C))
Q2) (cons (list 1 (car L)) X)
Answer: ((1D) (2B) (4A) (1C))

你确定你没有错过X定义中的空格吗?看起来,它应该这样定义:

X = ((2 B) (4 A) (1 C))

计算是这样的:

;;; Setup.
(defvar L '(D B B A A A A C))
(defvar X '((2 B) (4 A) (1 C)))
;;; Q1:
(cons (list (+ (caar X) 1) (cadar X)) (cdr X))
;;;            ^^^^^^^^
;;; (caar X) = 2
(cons (list (+ 2 1) (cadar X)) (cdr X))
;;;         ^^^^^^^
;;; (+ 2 1) = 3
(cons (list 3 (cadar X)) (cdr X))
;;;           ^^^^^^^^^
;;; (cadar X) = B
(cons (list 3 'B) (cdr X))
;;;   ^^^^^^^^^^^
;;; (list 3 'B) = (3 B)
(cons '(3 B) (cdr X))
;;;          ^^^^^^^
;;; (cdr X) = ((4 A) (1 C))
    (cons '(3 B) '((4 A) (1 C)))
;;; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;;; (cons '(3 B) '((4 A) (1 C))) = ((3 B) (4 A) (1 C))
'((3 B) (4 A) (1 C))
;;; Q2:
(cons (list 1 (car L)) X)
;;;           ^^^^^^^
;;; (car L) = D
(cons (list 1 'D) X)
;;;   ^^^^^^^^^^^
;;; (list 1 'D) = (1 D)
    (cons '(1 D) X)
;;; ^^^^^^^^^^^^^^^
;;; (cons '(1 D) X) = ((1 D) (2 B) (4 A) (1 C))
'((1 D) (2 B) (4 A) (1 C))

相关内容

最新更新