2017-11-02 3 views
1

Ich habe die folgende Funktion, die einen Bereich mit jedem Wert in der Liste berechnen sollte.Bereich berechnen - Erlang

Das Problem, das ich habe, ist, dass die Funktion nur das erste Ergebnis für das erste Element in der Liste druckt und was ich für jedes Element in der Liste drucken muss.

Sie können denken, dass jedes Element in der Liste ein Fall ist, und ich möchte alle Fälle drucken.

area([H|_])->(math:sqrt(3.0) * (H*H)) - (3.14 * (H*H))/2; 
area([_|T])-> area(T).  

Antwort

4

Sie haben die Rekursion falsch. Was getan werden sollte, ist, dass Sie den Bereich des Kopfes drucken und dann auf den Schwanz rekursieren. Sie müssen auch einen Basisfall hinzufügen, der die leere Liste behandelt.

area([]) -> ok; 
area([H|T]) -> 
    io:format("~p~n", [(math:sqrt(3.0) * (H*H)) - (3.14 * (H*H))/2]), 
    area(T). 

Wenn Sie stattdessen eine Liste der Bereiche als Ergebnis möchten, können Sie tun:

area([]) -> []; 
area([H|T]) -> 
    [(math:sqrt(3.0) * (H*H)) - (3.14 * (H*H))/2 | area(T)]. 
+0

Dank für die Beobachtung –

Verwandte Themen