>>1 let fib = let rec fib a b c d x = if x = 0 then a else let a,b = if x mod 2 = 1 then a*c+b*d,b*c+(a+b)*d else a,b in fib a b (c*c+d*d) (d*c+(c+d)*d) (x/2) in fib 1 1 0 1;;
>>10 1 1 0 1 を 0 1 0 1に修正しろ >>11 let scan f a c =let rec itr a c r= match a with | [] -> r | a::b -> let r = if f a c then a::r else r in itr b c r in itr a c [];; let intersection = scan List.mem;; let difference = scan (fun a b -> ((List.mem a b)=false));; let symmetric_difference a c= List.rev_append (difference a c) (difference c a);; >>13 というか、こんなスレ立てるふざけた奴は死ねって感じだな。
昇順にソートされたリストに対する union (論理和) を定義してみよ。 ヒント: match構文は二重の入れ子にして使ってもよい。 自分で書いてみたんですが、サッパリ上手くいきません。ご教授願います。 let rec union a b = match a with [] -> b | h::t -> match b with [] -> [] | g::r -> if h==g then union t b else h::union t b;;