我需要一个递归的LISP函数,它枚举任何数字列表> 3的元素数量.我不允许使用let,loops或whiles,只能使用基本的CAR,CDR,SETQ,COND,CONS,APPEND,PROGN ,列表......
这是我对该功能的尝试:
(defun foo (lst)
(COND ((null lst) lst)
(T (IF (> (CAR lst) 3)
(1+ (foo (CDR lst)))
(foo (CDR lst)) ) ) ) )
Run Code Online (Sandbox Code Playgroud)
函数调用:
(foo '(0 1 2 3 4 5 6))
Run Code Online (Sandbox Code Playgroud) LISP又把我弄糊涂......为什么我不能得到列表中最后一个元素的值?我有一个类似于此的列表设置:
(setq bar '(((1 2) 3 4 5)((6 7) 8 9 10)))
Run Code Online (Sandbox Code Playgroud)
现在我获得了4的回报:
(caddar bar)
Run Code Online (Sandbox Code Playgroud)
(5)返回:
(cdddar bar)
Run Code Online (Sandbox Code Playgroud)
但我不能得到5:
(cadddar bar)
Run Code Online (Sandbox Code Playgroud)
这是为什么 - 我怎样才能获得5的价值?
错误:
; Warning: This function is undefined:
; CADDDAR
Error in KERNEL:%COERCE-TO-FUNCTION: the function CADDDAR is undefined.
[Condition of type UNDEFINED-FUNCTION]
Run Code Online (Sandbox Code Playgroud)