Ocaml

このエントリーをはてなブックマークに追加
1克也:2005/10/09(日) 18:10:07
O(n) の手間でフィボナッチ数が計算できるような関数 fib を作ってみよ。
ヒント: 3引数の補助的な関数を定義することを考えよ。
という課題をOcamlで作るのですが、for文を使わないという制限がついています。
どのようなプログラムを書けばよいのでしょうか?
2伝説の新人:2005/10/09(日) 18:12:55
GET/POST
3デフォルトの名無しさん:2005/10/09(日) 20:36:39
再帰
4デフォルトの名無しさん:2005/10/09(日) 21:02:39
模範的な糞スレ
5デフォルトの名無しさん:2005/10/09(日) 21:08:00
function fib(x) {
return x<=1 ? 1 : fib(x-1)+fib(x-2)
}
6デフォルトの名無しさん:2005/10/09(日) 23:10:46
>>1
VIPでやれ
7デフォルトの名無しさん:2005/10/10(月) 00:42:12
>>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;;
8デフォルトの名無しさん:2005/10/10(月) 03:27:07
岡村にしか読めない
9デフォルトの名無しさん:2005/10/10(月) 07:12:18
>関数 fib を作ってみよ。
>関数を定義

>どのようなプログラムを書けばよいのでしょうか?
10克也:2005/10/10(月) 12:30:29
>>7 それでやると、fib9=55、fib10=89となってしまい、正しくありません。
fib 10は55です。ひとつずれているのですが、
どう修正すればいいんでしょうか?
11克也:2005/10/10(月) 13:05:56
加えてこれもお願いします。言語はOcamlです。
1.リストの intersection
リスト(個々のリストは互いに相異なる要素からなるものとする。次問以下も同様)を2本もらって,どちらのリストにも現れる要素を集めたリストを返すような関数 intersection を書く.

たとえば intersection ['a'; 'c'; 'f'; 'j'; 'q'] ['j'; 'c'] の実行結果が ['j'; 'c'] または ['c'; 'j'] となればよい.

2.リストの difference

リストを二つもらって、最初のリストは現れるが二つ目のリストには現れない要素のリストを返すような関数 difference を書く。

3.リストの symmetric difference
リストを二つもらって、どちらか片方のリストは現れるが両方には現れない要素のリストを返すような関数 symmetric_difference を書く。

12克也:2005/10/10(月) 14:46:05
ホントに助けてください。
13伝説の新人:2005/10/10(月) 15:12:09
いきなり専用スレを立てておいて、●投げの姿勢が悪印象。
14デフォルトの名無しさん:2005/10/10(月) 15:29:50
>>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
というか、こんなスレ立てるふざけた奴は死ねって感じだな。
15克也:2005/10/10(月) 16:16:28
伝説の新人死ね
16デフォルトの名無しさん:2005/10/10(月) 16:20:23
OCaml プログラミング入門
http://www.biocaml.org/~bannai/ocaml-intro/
17デフォルトの名無しさん:2005/10/10(月) 17:06:51
>>1
重複スレです。
ご自分で削除依頼お願いします。



○誘導

関数型言語ML(SML, OCaml, etc.), Part 3
http://pc8.2ch.net/test/read.cgi/tech/1103606223/
18デフォルトの名無しさん:2005/10/10(月) 18:16:51
>>17 俺に指図するな。
19克也:2005/10/10(月) 18:32:58
>>18
勝手に騙るなよ。死ね
20デフォルトの名無しさん:2005/10/10(月) 18:56:08
あんまり変な人物誘導されても困るんだが。
21伝説の新人:2005/10/10(月) 19:49:38
>>1
重複スレです。
ご自分で削除依頼お願いします。



○誘導

関数型言語ML(SML, OCaml, etc.), Part 3
http://pc8.2ch.net/test/read.cgi/tech/1103606223/
22伝説の新人:2005/10/10(月) 20:05:19
>>21
おれの名前出す意味ないだろう?
そのままスルーするところだったよ。
23デフォルトの名無しさん:2005/10/10(月) 20:12:07
24克也:2005/10/15(土) 16:49:25
昇順にソートされたリストに対する 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;;
25克也:2005/10/15(土) 18:14:23
m(._.)m お願いいたします
26伝説の新人:2005/10/15(土) 20:30:50
克也死ね
27克也:2005/10/15(土) 22:23:11
m(._.)m お願いいたします
28デフォルトの名無しさん:2005/10/15(土) 23:29:17
とりあえず
見ず知らずの誰かに作成頼む前に同じ学科のヤツとかに聞いたりとかしてみたか?

俺多分お前と同じ学科なんだが、その場で聞いてくれれば話したこと無いヤツにでも喜んで相談に乗るよ
だからといってこんな匿名掲示板で答えだけ教える気なんて、とても起きないけどな

つまり何が言いたいのかというと
 「見ず知らずの誰かが時間割いてまでお前の課題手伝ってくれるはずないだろーが」








unionのヒント:5,6行目は其れだとbのリストが減っていってない
if 〜、else if 〜、else 〜の3つの場合に分けて考えてみた方が楽
29克也:2005/10/16(日) 00:27:52
>>28
はい、反省します。。
君の言う通りだよ。。。
友達に聞いても、俺のまわりの友達って授業出てなかったり、プログラミング苦手なのばっかで聞く人がいないよ。。。

ヒントどうも、、、CSの誰かさん。
30CS:2005/10/16(日) 18:47:01
ここはプログラミングCの質問スレになりました。
31デフォルトの名無しさん
早稲田か・・・シネヨ