Ich habe mit der F # -Liste herumgespielt
module File1
//Versuchen Sie es mit einer Liste
//Deklarieren Sie eine Liste
let strs= ["dogs";"cats";"bird"]
//Versuchen Sie, das Format mit printfn zu deklarieren
printfn "%A" strs //["dogs"; "cats"; "bird"]Wird angezeigt
printfn "%O" strs //[dogs; cats; bird]Wird angezeigt
//Greifen Sie mithilfe des Mustervergleichs auf die Liste zu
//Musterübereinstimmung 1
let rec accessList strs =
match strs with
|x::xs->printfn "%O " x;printfn "%O " (accessList xs);x+" a"
|[]->printfn "Das Ende";"b"
//Musterübereinstimmung 2
let rec accessList2 strs =
match strs with
|x::xs->printf "%O " x; accessList2 xs
|[]->printfn "Das Ende";
in
//Da es einen Rückgabewert gibt, müssen Sie das Ergebnis mit let binden
let a=accessList strs
//dogs
//cats
//bird
//Das Ende
//b
//bird a
//cats a
//Wird angezeigt
printfn "Zeigen Sie das durch let gebundene Ergebnis an"
printfn "%s" a
//Zeigen Sie das durch let gebundene Ergebnis an
//dogs a
//Wird angezeigt
accessList2 strs
//Hunde Katzen Vogel Das Ende wird angezeigt
Es sieht so aus, als ob das Ausgabeergebnis des Programms angezeigt wird, und es sieht aus wie in der folgenden Abbildung. Wenn Sie mit [] -> vom übereinstimmenden Teil ausgehen, ist es möglicherweise einfacher, das Ausführungsbild der rekursiven Verarbeitung zu erfassen.
Es ist ein Bild, das sowohl die Eigenschaften von Java List als auch von Deque (Stack) aufweist. Die Liste der funktionalen Sprachen schien eine flüssigere Listenoperation zu haben als die Liste von Java, aber wenn sie auch die Eigenschaft von Deque (Stack) hat, kann dies natürlich sein.
Recommended Posts