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>
我只想要一个函数来每行打印一个项目。 我正在尝试:
(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>