2016-10-15 3 views
0

Die Anweisungen sindWie durchläuft Array in Ocaml, um einen Wert zurückzugeben?

  • initialize Norm auf 0,0
  • Schleife durch Array
  • add Quadrat von die aktuellen Array-Komponente
  • return norm

My Code

der Norm
type vector = float array 
let norm_loop (vector: vector) = 
    let norm = ref 0.0 in 
    for x = 0 to (Array.length vector) - 1 do 
    norm := (!norm +. (vector.(x)*.vector.(x))) 
    done in 
    norm 
Aber

, wenn ich schreibe, dass in utop sagt es

# let norm_loop (vector: vector) = 
     let norm = ref 0.0 in 
     for x = 0 to (Array.length vector) - 1 do 
     norm := (!norm +. (vector.(x)*.vector.(x))) 
     done in 
     norm;; 
Characters 4-13: 
Warning 26: unused variable norm_loop. 
- : float ref = {contents = 0.} 

Ich bin mir nicht sicher, was ich falsch mache für utop zu denken norm_loop eine Variable ist. Alles, was ich tun möchte, ist norm zurückgeben, aber ich kann nicht herausfinden, wie dies zu tun ist.

Jede Hilfe würde sehr geschätzt werden!

Antwort

3

Ihre zweite in ist überflüssig. Es gibt keine let, die damit einhergeht. Stattdessen sollten Sie dies als die letzten paar Zeilen haben:

done; 
!norm 

Beachten Sie, dass Sie einen Verweis zurückkehrten, aber Sie wollen einen Schwimmer zurückzukehren (ich nehme an). Sie müssen also !norm anstelle von norm schreiben.

3

Beachten Sie, dass Sie auch Array.fold_left verwenden könnten das gleiche Ergebnis erzielen:

let norm (vector : vector) = 
    Array.fold_left (fun acc v -> acc +. v *. v) 0.0 vector 
+1

Absolut, eine Falte mit viel mehr idiomatischen OCaml. Ein Grund, OCaml zu studieren, ist die Fähigkeit, unveränderliche Daten (keine Referenzen) und Funktionen höherer Ordnung (wie Faltung) zu sehen. –

Verwandte Themen