我不知道如何为此绘制内存布局,而我是LISP的新手。请帮助我。
(car (cdr ( cdr '(12 (*3 4) (+ 3 4) (/4 2) 23))))
假设您在谈论常见的LISP,而不是其他类型的LISP,则可以使用sdraw
(从此页面加载后:https://www.cs.cmu.edu.edu/〜dst/lisp/sdraw/sdraw.genericv(显示您表单的内存布局(在LISP中,没有语句,而是表单(。请注意,您必须在适当时插入空格(例如,在操作员及其第一个参数之间,例如(* 3 4)
,而不是(*3 4)
(,而不是两个完全不同的表单(。
so,例如(仅印刷到树的一定级别,请参见etc.
部分(:
CL-USER> (sdraw '(car (cdr ( cdr '(12 (* 3 4) (+ 3 4) (/ 4 2) 23)))))
[*|*]--->[*|*]--->NIL
| |
v v
CAR [*|*]--->[*|*]--->NIL
| |
v v
CDR [*|*]--->[*|*]--->NIL
| |
v v
CDR [*|*]--->[*|*]--->NIL
| |
v v
QUOTE [*|*]--->[*|*]--->etc.
| |
v v
12 [*|*]--->[*|*]--->[*|*]--->NIL
| | |
v v v
* 3 4
每个盒子代表一个缺点单元,有两个字段指向CAR和CDR的CDR。