2017-05-10 277 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