我的功能叫做:
(defun color ( list1 list2 list3 list4 list5 listoflist))
(defun color (list1 list2 list3 list4 list5 listoflist)
(cond
(null list1) 'unknown )
(list (list1, list2 list3 list4 list5 lisoflist))
(null list2) 'unknown)
(list (list1 list2 list3 list4 list5 listoflist)
(null list3) 'unknown )
(null list4) 'unknown)
(null list5) 'unknown )
(T (cons (car list1) (color (cdr list1) list2))) ; recursively tring to replace with unknow if any of the lis tis empty and print the resulte ouptput
)
)
如果输入是:(color null '(3 4 5) null) '(3 5 8) null))
它应该产生(unknown (3 4 5) unknown (3 4 5) unknown)
答案 0 :(得分:2)
首先,您的COND
语法不正确。 COND
的语法为:
(cond
(condition1 result1...)
(condition2 result2...)
...
)
条件和结果的每个组合都应在列表中。您在T
条件下正确地执行了此操作,但在(null list1)
条件下没有正确地进行了操作。应该是:
(cond
((null list1) unknown)
(t (color (cdr listoflist)))
)
但是您的功能逻辑对于您想做的事情是完全错误的。
首先,该函数不应使用多个参数。它应该只接受一个list
参数。
第二,您需要映射到列表以递归处理每个元素。
第三,您需要引用unknown
才能按原样返回它。
第四,在输入中,空白列表应为nil
或()
,而不是null
。那就是测试列表是否为空的函数的名称。
(defun color-recurse (thing)
(cond ((null thing) 'unknown)
((listp thing) (mapcar #'color-recurse thing))
(t thing)))
(defun color (&rest things)
(color-recurse things))
(color nil '(3 4 5) '(nil) '(3 5 8) '(nil))
输出:
(unknown (3 4 5) (unknown) (3 5 8) (unknown))