我想检查 LISP 中的列表是否包含列表或不递归。如何修复此代码?
(defun has-list-p(l)
(if null l)
nil
(and (listp(car l)) (has-list-p(l))))
谢谢大家!我编码的解决方案是:
(defun has-list-p(l)
(if (null l)
nil
(or (listp(car l)) (has-list-p(cdr l)))))
我想检查 LISP 中的列表是否包含列表或不递归。如何修复此代码?
(defun has-list-p(l)
(if null l)
nil
(and (listp(car l)) (has-list-p(l))))
谢谢大家!我编码的解决方案是:
(defun has-list-p(l)
(if (null l)
nil
(or (listp(car l)) (has-list-p(cdr l)))))
尽管我已经编写了代码,但我不会给你代码。不过,我会告诉你你做错了什么:
(if null l)
。你缺少一个父母。and
是你想要的比较器吗?has_list_p
递归调用,这是正确的,但您想在列表的其余部分调用它——除了第一个元素。你怎么能得到它?祝你好运,编码愉快!
(defun has-list-p(l)
;nothing more to check - return nil - no inner lists
(if (null l)
nil
;the first element of the list is a list?
(if (listp (car l))
;if yes - return true
t
;otherwise - try for the cdr of the list
(has-list-p (cdr l)))))
在我定义了这个过程之后,在 common lisp 中,它打印了:
[2]> (has-list-p '(1 2))
NIL
[3]> (has-list-p '(1 2 '(3 4)))
T
在 Emacs Lisp 中也是如此。