0

我试图定义这个函数,它接受多个整数并保留那些不同于 0 的整数。它不起作用,显然,递归调用(filter $?tail)与参数列表不匹配。这可以在 CLIPS 中完成吗?

(deffunction filter (?head $?tail)
    (if (= (length $?tail) 0) then
        (if (!= ?head 0) then (return ?head))
        (return $?tail))
    (if (= ?head 0) then
        (return (filter $?tail)))
    (bind $?result ?head (filter $?tail)) 
    (return $?result)
)
4

1 回答 1

0

函数过滤器用 2 个参数声明,filter(?head $?tail)但您只用一个参数调用它(filter $?tail)

需要递归吗?使用以下功能可以轻松解决此问题delete-member$

(delete-member$ $?list 0)

例子:

CLIPS> (delete-member$ (create$ 6 7 0 8 0 7) 0)
(6 7 8 7)
CLIPS> 
于 2013-05-28T22:09:15.753 回答