2013-05-27 89 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

不應該是沿着'(過濾器(第一個$ $?尾巴)(尾部$ $?尾巴))'的行,否則遞歸永遠不會結束? –