2017-05-10 16 views
1

Ich mache einige Past-Papiere und muss wissen, ob ich hier richtig bin.Ausdrücken von Ausdrücken

Give Schritt-für-Schritt-Auswertungen der folgenden Begriffe:

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

wo foo wie folgt definiert ist:

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

Meine Antworten:

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] 

Bin ich hier richtig?

Antwort

2

zumindest die Funktionsparameter falsch sind, würde ich sagen:

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

Was würden Sie sagen, diese Funktion tut? Ich habe es als Entfernen aller Instanzen von 'Y'. In diesem Fall alle Nullelemente. –

+1

foo (Elem, List) gibt eine Kopie von List zurück, in der alle Elemente nach Elem gelöscht werden. – Pascal