CLIPS中的过滤功能

时间:2013-05-27 19:26:13

标签: clips

我试图定义这个函数,它接受多个整数并保留那些与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)
)

1 个答案:

答案 0 :(得分: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>