Ich habe eine FunktionF # Continuation-basierte Schwanz-Rekursion
let rec f n = function | 0 -> 1
| k when k>0 -> n * (f n (k-1))
| _ -> failwith "illegal argument"
Welche k
mal ein int n
und multipliziert ihn mit sich nimmt. Beispiel:
f 3 3
val it : int = 27
Nun, ich habe es als Schwanz-rekursive Funktion neu geschrieben, um zu versuchen und zu einem besseren Verständnis von allem zu bekommen:
let fT n y =
let rec loop acc = function
| 0 -> 1
| k when k>0 -> n * (loop acc (k-1))
| _ -> failwith "illegal argument"
loop 0 y
ich Interesse hätte, die diese verwendet Fortsetzung dabei -basierte Schwanz-Rekursion, aber ich bin ein wenig hängen, was es aber tun sollten:
let rec fC n c =
match n with
| 0 -> c 1
| k when k>0 -> n * (fC n (fun x -> ...) //Not sure what to do here
Irgendwelche Hinweise?
Danke für die Eingabe, aber ich habe gerade festgestellt, dass das Original 'f' zwei Argumente braucht. Also sollte es nicht 'fC n k c = ...' sein? – Khaine775
@ Khaine775 - Siehe Update. – Lee
Es gibt einen Fall für die Zusammensetzung '(c << (*) n)' anstelle der Funktion Anwendung: Sie können die Reihenfolge der Ausführung bei Bedarf leichter umkehren. – kaefer