05.04.01. Listenlänge bestimmen – Fehlersuche

Warum führen die folgenden beiden Prädikate (unterer Code-Schnipsel) bei den Anfragen

?- len1([a,b,c],L)
?- len2([a,b,c],L)

zu einem Abbruch? Schaue dir den Trace an.

% ohne Akkumulator:
len1([],0).
len1([_|T],N):-
     N is X+1,
     len1(T,X).

% mit Akkumulator:
len2(List,Int):-
    accLen(List,0,Int).

accLen([],Acc,Acc).
accLen([_|T],Acc,L):-
    accLen(T,NewAcc,L),
    NewAcc is Acc+1.

Wie lässt sich der trace Modus bei SWI Prolog starten?

Welcher Abschnitt bei len1/2 bereitet Probleme?

Welches Problem liegt bei len1/2 vor?

Welcher Abschnitt bei len2/2 bereitet Probleme?

Welches Problem liegt bei len2/2 vor?

Wie lassen sich die Probleme beider Prädikate beheben?

Wodurch werden bei len1/2 die Argumente für die arithmetische Operation instantiiert?

Wodurch werden bei len2/2 die Argumente für die arithmetische Operation instantiiert?

Welcher Unterschied entsteht dadurch zwischen beiden Prädikaten?

Noch keine Kommentare eingereicht. Bitte hilf uns diese Aufgabe zu verbessern.

Schreibe einen Kommentar