2012-04-03 13 views

Antwort

9

Es kann über references erfolgen:

let fact n = 
    let result = ref 1 in (* initialize an int ref *) 
    for i = 2 to n do 
    result := i * !result (* reassign an int ref *) 
    done; 
    !result 

Sie Referenzen nicht oft sehen sehr, weil Sie die gleiche Sache mit unveränderlichen Werte innerhalb Rekursion oder höherwertigen Funktionen tun können:

let fact n = 
    let rec loop i acc = 
     if i > n then acc 
     else loop (i+1) (i*acc) in 
    loop 2 1 

Nebenwirkungsfreie Lösungen werden bevorzugt, da sie einfacher zu begründen und einfacher zu gewährleisten sind.

+0

Danke. Kannst du mir die Bedeutung von Ref 0 erklären? – EBM

+3

Siehe den Link, auf den ich mich in meiner Antwort beziehe. Grundsätzlich ist 'ref 0 'ein Datensatz' {veränderbarer Inhalt: int} 'mit' Inhalt' initialisiert durch '0' und' Inhalt' könnte später neu zugewiesen werden. – pad