2017-05-10 276 views
1

我正在做一些過去的論文,需要知道我在這裏是否正確。評估表達式

給予下列用語的一步一步的評價:

foo(0,[2,3,1]) 
foo(0,[4,0,1]) 

其中foo的定義是這樣的:

foo(_,[]) -> []; 
foo(Y,[X|_]) when X==Y -> [X]; 
foo(Y,[X|Xs]) -> [X | foo(Y,Xs) ]. 

我的答案:

1.

Foo(0, [2, 3, 1]) 
[2 | foo(0, 3, 1) ] 
[2, 3| foo(0, 1) ] 
[2, 3, 1 | foo (0)] 
[2, 3, 1] 

2 。

Foo(0, [4, 0, 1]) 
[4 | foo(0, 0,1]) 
[4, 0] 

我在這裏糾正?

回答

2

至少函數參數是錯誤的,我會說:

1. 

foo(0,[2,3,1]) 
[2|foo(0,[3,1])]  % 3rd clause 
[2|[3|foo(0,[1])]]  % 3rd clause 
[2|[3|[1|foo(0,[])]]] % 3rd clause 
[2|[3|[1|[]]]]   % 1st clause 
[2,3,1] 

2. 

foo(0,[4,0,1]) 
[4|foo(0,[0,1])]  % 3rd clause 
[4|[0]]     % 2nd clause 
[4, 0] 
+0

什麼,你會說這個功能呢?我已經知道去掉'Y'的所有實例。在這種情況下,所有零元素。 –

+1

foo(Elem,List)返回列表的一個副本,Elem後的所有元素都被刪除。 – Pascal