2014-10-20 26 views

cevap

8

:

let sum f = f 0 
let arg x acc g = g (acc + x) 
let z a = a 

Ve (

aynı tipte bağımsız değişken bir dizi işlemek için net bir şekilde bir liste geçmektir ab) kullanımı:

# sum z;; 
- : int = 0 
# sum (arg 1) z;; 
- : int = 1 
# sum (arg 1) (arg 2) (arg 3) z;; 
- : int = 6 

Neat, huh? Ama bunu kullanma - bu bir hack.

Açıklama için bkz. this page (SML açısından, ancak fikir aynıdır).

+0

Bunu kullanmazdım çünkü bir int listesinin geçirilmesi daha iyi bir yoldur. Ama daha üst düzey fonksiyonların ve devam eden stilin çok güzel kullanımı. –

9

OCaml kesinlikle yazılı ve diğer (türsüz) dillerinde kullanılan birçok teknik uygulanamayacağı edilir. Benim düşüncemde (50 yıllık programlamadan sonra) bu çok iyi bir şey, sorun değil. Emin, tip hackery biraz da

# let sum l = List.fold_left (+) 0 l;; 
val sum : int list -> int = <fun> 
# sum [1;2;3;4;5;6];; 
- : int = 21