2013-05-27 43 views
0

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

回答

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> 
+0

我并不真的需要这种特定的功能,但我需要的作品大致相同方式的功能。我只发布了这个更简单的版本,以减少混乱。 –

+0

@PaulManta然后用'(filter(first $ $?tail)$?tail)替换'(filter $?tail)'调用'解决它? – Evans

+0

不应该是沿着'(过滤器(第一个$ $?尾巴)(尾部$ $?尾巴))'的行,否则递归永远不会结束? –