Forum
Tipps
News
Menu-Icon

SML Listen , Hilfe!

Hallo bin neu hier und hätte aber gleich mal ne ne dringende Frage die mir hoffentlich jemand beantworten kann  

Also das Problem is, dass ich nicht genau weiss wie ich mit Listen in SML umgehen soll/kann damit ich mit einzelnen Werten rumspielen kann:

Sagen wir mal ich möchte z.B. aus einer Liste verschiedene Werte addieren. Sagen wir ich mach ne Funktion "sum" aus einer belieben Liste wie [1,2,3,4,5,6]
und ich möchte dass die Ausgabe aus addierten Werten besteht, so dass z.B immer die darauf folgenden Zahlen addiert werden also [1,3,6,10,15,21] herauskommt. Kann mir da jemand helfen?

Wenn ich sum(x::y::ys) mache ist mir nur klar dass ich daraus ne Liste machen kann die x:: x+y:: besteht, jedoch weiss ich nicht wie ich weiter machen soll. Es müsste irgendwie der tail der restlichen Liste zum neuaufruf der ganzen Funktion führen, sodass das ganze von vorne losgeht - nur dass schaff ich nicht  oder bin ich ganz auf dem Holzweg? (jaja Rekursion ist auch n Gebiet mit dem ich grad anfange  )
Auf jeden Fall vielen Dank schon mal für alle Antworten!



Diesen Beitrag einem Moderator melden


Antworten zu SML Listen , Hilfe!:

Wenn ich das richtig verstanden habe, soll immer die Summe der vorigen plus das aktuelle element den neuen Eintrag ergeben... das könnte man in einer ganz freien funktionalen Sprache so ausdrücken:

sum( list )
= sum( 0, list )

sumx( n, list )
= [ head(list) + n , sumx( head(list) + n, tail(list) ) ]

Die Neue Liste wird rekursiv zusammengebaut aus jeweils dem ersten Element der Eingabe-Liste, der Summe bis dahin, und dem dann rekursiv verarbeiteten Rest der Eingabe-Liste.

Von der Syntax von SML hab ich leider garkeinen Plan  ::)

Vielen Dank du hast mich genau auf den richtige Weg geschickt!
hab das ganze mehr oder weniger gut jetzt so gemacht:

- fun sum (x::xs) = if xs=nil then [] else (hd(xs)) + x :: sum((hd(xs)) + x :: (tl(xs)));

leider hab ich noch immer ein kleines Problem:

Ich hätte gerne dass die erste Zahl auch ausgegeben wird. Also [1,2,3,4,5] soll [1,3,6,10,15] werden

Bei meiner Methode fehlt die erste Zahl allerdings. Wenn ich jedoch die AusgabeListe (Listen werden durch x::xs gebaut) statt

(hd(xs)) + x :: sum((hd(xs)) + x :: (tl(xs)));

so baue

x :: (hd(xs)) + x :: sum((hd(xs)) + x :: (tl(xs)));

dann schreibt er zwar die erste Zahl hin, jedoch natürlich die folgenden ausgerechneten immer doppelt.
Also ensteht
val it = [1,3,3,6,6,10,10,15] : int list

Und mein Probelm ist, dass ich nicht weiss wie ich das ganze hinbekommen soll dass er nur das erste mal das x hinschreibt, da er ja wegen der Rekursion das ganze immer wieder macht. Mir fällt auch keine Bedingung ein das ganze zu prüfen und dann anders vorzugehen, da ja die Werte überschrieben werden durch den Neuaufruf der Funktion...

Vielleicht hat noch jemand so einen guten Tipp, dann hab ich bestimmt bald die Lösung ;D

Danke auf jeden Fall schon mal!!


« java script (ganz einfach eigentlich)Drucken über USB-Schnittstelle »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Scriptsprache
Eine Scriptsprache ist eine Softwareeigene Programmiersprache, mit der der Anwender Skripte oder Makros für häufig vorkommende Arbeitsabläufe schreibt. Ein...