Ocaml

アキュームレータ

# let accgen n = let m = ref n in fun x -> m := m!+x; !m;;

オブジェクト指向のサポートには全然目を向けていなかったので、 少しずつやり始めてみる。 class screen = object method outputToStdout s = print_string s end class printer s = object val screen = s method print s = screen#outputToStdout s end l…

exercise 1.6

平方根を求めるアルゴリズム sqrt-root. ビルトイン関数に含まれているのだけど、アルゴリズムの演習って事で、 再実装してみる。 まずは、Schemeで。 (define (sqrt n) (define (abs n) (if (improve guess n) (average guess (/ n guess))) (define (good-…

size (length of a list)

関数プログラミングのテキストって、 末尾再帰はループに最適化可能と書いてる割りには、 例題のコードでは末尾再帰になっていない事が多い様な気がする。 # let null l = (l = );; val null : 'a list -> bool = (* 末尾再起で・・・ *) #let size l = let …

abs の実装。Scheme (define (fib n) (cond ((> n 0) n) ((= n 0) 0) ((< n 0) (- n)))) (define (fib n) (if (< n 0) (- n) n)) Ocaml let abs = fun x -> if x < 0 then -x else x;; Python abs1 = lambda x: x < 0 and -x or x def abs2(n) : if n < 0: r…

reference

# let num = ref 0;; val num : ref int = 0 # !num;; - : ref int = 0 # num := 10;; - : unit() # !num;; - : ref int = 10

print_string "Hello world\n";;