77077 发表于 2014-3-7 00:04:50

谁能解释下这几个函数?

晕了晕了,不是说顶多4重运算么?

怎么会出现这个?


;;; FIRST   - first element of the list
(defun first (x) (car x))
;;; REST    - the rest of the list
(defun rest (x)(cdr x))
;;; Other readable accessors, the element or nil, better than nth
(defun second (lst) (cadr lst))
(defun third (lst)(caddr lst))
(defun fourth (lst) (cadddr lst))
(defun fifth (lst)(car (cddddr lst)))
;|#- SMALL|;
(defun sixth (lst)(cadr (cddddr lst)))
(defun seventh (lst)(caddr (cddddr lst)))
(defun eighth (lst) (cadddr (cddddr lst)))
(defun ninth (lst)(car (cddddr (cddddr lst))))
(defun tenth (lst)(car (cdr (cddddr (cddddr lst)))))
;|END #- SMALL|;

ZZXXQQ 发表于 2014-3-7 07:49:58

这不过是按英语语法写的函数。从其函数名可以看出函数的含义,还要怎么解释。

ll_j 发表于 2014-3-7 07:51:32

书上在ca..dr这部分所说的4重是指单一函数的c和r之间的重数,也就是说,单一函数的c和r之间最多只能有4个字符,每个字符代表一重,如(cadr x)=(car (cdr x)),最多4重这句话其实是同类的30个函数的“统一”说明,这些函数都是在AutoLISP的系统函数库中定义了的,可以直接使用。
上面定义的函数fifth,如果按单一函数的格式应该写为caddddr,超过4重,就只能重新定义。
就Lisp语言本身,嵌套的层数是由堆栈决定的,目前嵌套的层数可以接近2万层,而且已经定义成函数并被加载后,这个函数其实只占一层。

emk 发表于 2014-3-7 09:39:03

(defun tenth (lst)(car (cdr (cddddr (cddddr lst)))))-->(defun tenth (lst)(nth 10 lst) ) ??

lsjj 发表于 2014-3-7 09:46:51

有nth可用,真的不用搞的那麼複雜,
樓上的也算多此一舉吧!
页: [1]
查看完整版本: 谁能解释下这几个函数?