【发布时间】:2016-10-11 07:35:10
【问题描述】:
我正在尝试在 Lisp 中创建对函数。 pair 函数获取两个输入,然后相互配对并生成一个列表。这是我的代码:
(defun npair (s1 s2)
(let ((result '()))
(cond ((null s1) s2)
((null s2) s1)
(t (loop
(when (null s1) (return result))
(while (not (null s2))
(setq result (cons (list (car s1) (car s2)) result))
(setq s2 (cdr s2)))
(setq s1 (cdr s1)))))))
这个函数应该返回像(npair '(a b c) '(1 2)) -> ((a 1) (a 2) (b 1) (b 2) (c 1) (c 2))
但我的结果只有((a 1) (a 2))。
请帮忙!
【问题讨论】:
-
当未知时,您的代码无法运行。
-
您的
nullcase 条件意味着这不是一个正确的笛卡尔积。如果任一列表为空,则结果必须为空:因为非空列表的每个元素与空列表的每个元素的组合都是空的。当然,我们可以随心所欲地定义一个函数;如果它无偿地输出 ad hoc 特殊情况,那么它就不太可能具有有用的价值。
标签: loops while-loop lisp