CLIPS(专家系统)中的列表操作

List manipulation in CLIPS (expert system)

我只想要一个函数来每行打印一个项目。 我正在尝试:

(deffunction myprint (?first $?rest)
(if (neq ?rest nil) then
    (printout t ?first crlf)
    (myprint ?rest)))

怎么了?

使用长度函数确定列表是否为空(return 值为 0)。将列表与符号 nil 进行比较总是会失败。

即使 ?rest 为空,也要先打印 ?。否则永远不会打印最后一个元素。

没有必要使用递归。

CLIPS> 
(deffunction myprint ($?rest)
   (foreach ?r $?rest
      (printout t ?r crlf)))
CLIPS> (myprint a b c)
a
b
c
CLIPS> (myprint (create$ a b) (create$ c d))
a
b
c
d
CLIPS>