1 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 19:12:39 ] ※ ここはCommon Lisp、SchemeをはじめとするLisp族全般のスレです ※ ■過去スレ Part25: ttp://pc12.2ch.net/test/read.cgi/tech/1231856193/ Part24: ttp://pc11.2ch.net/test/read.cgi/tech/1224939205/ Part23: ttp://pc11.2ch.net/test/read.cgi/tech/1215875388/ Part22: ttp://pc11.2ch.net/test/read.cgi/tech/1211381920/ Part21: ttp://pc11.2ch.net/test/read.cgi/tech/1207300697/ Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/ Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/ Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/ Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/ Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/ Part15: ttp://pc11.2ch.net/test/read.cgi/tech/1151025773/ Part14: ttp://pc11.2ch.net/test/read.cgi/tech/1132275726/ Part13: ttp://pc11.2ch.net/test/read.cgi/tech/1115901841/ Part12: ttp://pc11.2ch.net/test/read.cgi/tech/1100229366/ Part11: ttp://pc11.2ch.net/test/read.cgi/tech/1091456033/ Part10: ttp://pc11.2ch.net/test/read.cgi/tech/1075630259/ Part09: ttp://pc11.2ch.net/test/read.cgi/tech/1069594582/ Part08: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html Part07: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html Part06: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part05: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part04: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html Part03: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html Part02: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html Part01: ttp://piza2.2ch.net/tech/kako/987/987169286.html ■テンプレート置き場 ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)
684 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:45:19 ] 参照渡しって何か ダイナミックスコープっぽいような気がするけど この二つは何か関係あるのかな?
685 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:48:13 ] >>684 関係ない。
686 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:49:34 ] 全く関係ない。 参照渡しは仮引数/実引数バインディングスタイルの一つ ダイナミックスコープは自由変数のルックアップスタイルの一つ
687 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:52:02 ] そんなめんどうな話なのか? 局所変数と大域変数の話なのでは。 湯浅先生の「Scheme入門」だとP32〜。
688 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:58:16 ] koguro さんのトークは資料が見やすくていいなー
689 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:13:16 ] いちいちそんな糞本挙げなくていいよ
690 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:19:18 ] 湯浅先生を糞呼ばわりできるお前って何様?
691 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:23:28 ] 俺は>>689 じゃないけど、その先生が立派な人で、その本が立派なものだったとしても時代にそぐわなくなることってあると思うんだよなー。 湯浅先生の名前があればもう否定しどころがないみたいな言い方じゃなくて、もっと良い点と悪い点を検討する必要はあるんじゃないの? もちろん、糞本って言う方もどのへんが糞なのか示さないと議論にならんけど。
692 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:49:36 ] とりあえず糞って言っとこう的な煽りは2chの華だねw
693 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:51:06 ] たいした人でもないのに いちいち先生つけるなよ
694 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 19:52:53 ] 何の脈絡もなく 湯浅の糞本持ち出す687ってなんなんだろう?
695 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 20:03:58 ] 名著はちゃんと読んだ方がいいと思うぞ。 おっと、ここは2chだったな。玉石混交ですな。
696 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 20:13:11 ] 読む本は選べ 時間の無駄
697 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 21:01:42 ] 嫉妬ってみっともないなとオモタ
698 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 21:05:35 ] 糞本の宣伝に嫉妬とか
699 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 21:06:09 ] 釣れますか
700 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 21:18:47 ] >>690 生暖かく見守っといてやれって。
701 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 21:24:08 ] 湯浅の本なんて有り難がってよんでんのか
702 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 22:23:54 ] ところでここLispスレ
703 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 23:57:54 ] うっかりSICP
704 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 05:04:12 ] >>677 そういうことじゃないだろ。 実際に参加したの感想が聞きたいんだが。 いいアイデアが浮かんだとか、もっと○○の分野を勉強しようと思ったとか、その他いろいろ。
705 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 08:04:38 ] マ板行けよ
706 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 09:12:44 ] Scheme入門はちょっと古すぎる気がしないでもないな 内容もCommonLisp入門とほぼ同じだし。 でも絶版とはいえ某所でpdfでくばってたから結構読んでる人は居るんじゃないかな
707 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:32:27 ] >>701 ありがたがってるかどうか別として、先人への敬意が無い連中って 人として問題ありってことだと思うよ。
708 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:47:26 ] 世界初のCL実装
709 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:48:13 ] 世界初のCL実装でしょ。 MITあたりの人達もびっくりしたという。
710 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:52:02 ] Little Schemerに出てくるYコンビネーターってどういう利点があるの? 難しくてめげそう。だれか教えれ。プリーズ
711 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:56:15 ] 実用上たいして意味は無い (define (fact n) (if (= n 1) 1 (* n (fact (- n 1)))) みたいなのを、factっていう名前を使わずに 無名関数のみで定義できるという意義がある
712 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 12:57:21 ] そうそう。KCLをわずか2人で開発した日本が世界に誇るLisperだぜ。 本の内容は今となっては古い部分もあるが基本的な考え方は変わらないだろ。
713 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:01:27 ] util.sparse が組込みになってないのは、 やっぱ普通のスクリプト言語的用途だと従来のハッシュテーブルの方が効率はいいってことでいいんだよね?
714 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:08:15 ] >>710 無名関数のみで定義できるという意義ってナーヌ?
715 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:13:46 ] λ計算には関数定義なんてない 無名関数だけで再帰の計算が出来ることがわかれば λ計算だけで、色々な計算が出来ることが示せるわけ
716 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:16:46 ] スマヌ。 λ計算だけで、色々な計算が出来ることが示せると何が証明できるの?
717 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:19:42 ] ちょっとは自分で調べれ チャーチ・チューリングとかでググってみそ
718 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:26:54 ] >>717 ググッた。 「チャーチ=チューリングのテーゼとは、「計算できる関数」という直観的な概念を、帰納的関数と呼ばれる数論的関数のクラスと同一視しようという主張である。 このクラスはチューリング・マシンで実行できるプログラムのクラス、ラムダ記法で定義できる関数のクラスとも一致する。 よって簡単にはテーゼは、計算が可能な関数とは、その計算を実行できるような有限のアルゴリズムが存在するような関数、 よっておおよそコンピュータで実行できる関数と同じだと主張する。」 つまり、「SchemeはYコンビネータがあれば計算可能な再帰関数を有限のステップで計算可能ですYO!」ってことでおk?
719 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:31:18 ] 「あれば」じゃなくて「あるので」の方が正しいニホンゴかなw
720 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 13:38:34 ] schemeはYコンビネータを使わなくても計算可能な関数は計算出来る 普通の名前つきの再帰関数やletrecなどが実質Yコンビネータに相当
721 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 14:22:44 ] >普通の名前つきの再帰関数やletrecなどが実質Yコンビネータに相当 おお、そういうことなのか。でもよく考えると「計算できる関数」ってどういう意味かわからん。 とりあえず漏れの使う程度の関数は「計算できる関数」ってことか? じゃ、無限ループするようなバグがある関数は「計算できない関数」ってクラスなのか? どういう違いがあるとそうなるんだろう?
722 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 14:49:14 ] 「Lisp脳」の謎に迫る - Schemeプログラマの発想 karetta.jp/book-node/gauche-hacks/023107 上のページのように問題をリストの加工と捉えて (map 何らかの加工 (iota 100 1)) という風にすると、確かに処理が分かりやすいんだけど、 一旦、処理の過程の無駄なリストにメモリが使われますよね。 iota 10000000000 とかリストがでかくなった時を考えると、困ると思うのですが 僕が神経質なだけでしょうか。
723 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 15:07:17 ] (map f (iota 100 1))の場合で、仮にリストを順に辿って最後に結果を返す関数をgとして (g (map f (iota 100 1))のようにすればgの実装次第では コンパイルの結果、Cでfor (i = 1; i <= 100; ++i) {...}と書いたようなループになって 中間リストは一切作られない…ような最適化をする為の理論とかはあります common lispのseriesライブラリ等は、この手の中間リスト消去をある程度してくれると聞いてます
724 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 15:43:34 ] >>722 無駄を省くプログラミング技術はLisp, Schemeでも重要。 ただし、よいプログラマは本当に無駄なところだけ、改良しようとする。 (iota 1 10000000000)のセル消費が他に比べて負担が 大きいプログラムの多くはトイプログラムじゃないですか?
725 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:10:07 ] Haskellでも使えばいい
726 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:49:50 ] >>722 SICPにある遅延を使ったストリームによればいいんじゃない。 今のコンピューターはたっぷりメモリがあるんだし富豪プログラミングでも いいとは思うけど。
727 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 19:09:25 ] >>721 「ゲーデルの世界」(海鳴社)にそういった計算可能関数の話があった。 今、読んでいるところ。λ、チューリングマシンとの関係の説明も あったと思う。とりあえず原始帰納的関数から理解しようとしている。 Schemeが理解の助けになるかもしれない。
728 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 20:34:49 ] >>723-726 ありがとうございます。 >>724 >本当に無駄なところだけ やたらめったら改良するより、労力のコスパが高いところを見つけて改良すれば十分って話ですよね。 >>726 3.5.1にこの話題が出てますね。 ちょっと難しいけど、これがベストな解決策だろうなぁ。 遅延ストリームを使い始めると、何でこれ遅延ストリーム使わないの!!って思うようになりそうだ。 >富豪プログラミングでもいいとは思うけど。 反復だと時間さえかければ解けるものが リスト渡しだと記憶空間の限界に達したら絶対に解けないというのは 僕には気持ち悪さが残ります。
729 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 20:39:24 ] 足りなくなったら考えればいいのよ
730 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 20:59:14 ] 2000年問題、文字コード、IP枯渇・・・
731 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:38:55 ] >>727 チャーチ=チューリングのテーゼによれば、アルゴリズムのある関数は全て計算可能である。 つまり、アルゴリズムを学ぶことが計算可能関数を学ぶことに相当している。 そしてアルゴリズムを学ぶ際にはSchemeが理解の助けになる。 簡単にまとめると、「Yコンビネータがあるチューリング完全な言語ではアルゴリズムのある関数は全て計算可能である」ということになる。 あたりまえの事だけど、数学的に保証してくれてるので安心してプログラミングして計算ができるわけだ。
732 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 23:58:44 ] Yコンビネータの話とλ計算の話をごっちゃにしてはいけない。 コンビネータの話とλ計算の話はもともと別の話。それが途中で コンビネータの理論はλ計算の理論に翻訳可能だとわかったので、 同時に語られることが多いというだけ。 コンビネータ理論の歴史は古くて1920年代にSchonfinkelと言う人が始めて Curry(カリー化のカリー)が発展させた。
733 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 00:18:57 ] Yコンビネータに関する疑問について言えば、Yコンビネータの存在意義という のは、確か再帰の概念が存在しない言語において再帰と同等の物を導入するため、 だったと思う。
734 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 00:50:34 ] そういえば、ものまね鳥、あれからすぐに図書館に 返したんだけど。借りられたかな。
735 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:25:05 ] ここで>>368 のリンク先にあるラムダ式を簡約するArcのプログラムを読むと感動すること請け合いである。
736 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 07:39:45 ] >>713 詳しいことはドキュメントに書いてあるよ
737 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 11:14:49 ] まだ実験的なものかと思ってたのでドキュメント見てなかった でも、英語の説明しかねーや。 読むのめんどい。 ところで、 sparse って名前だと sparse な何かわからんので、 モジュール名はあんまりよくないと思った。 Scheme 処理系に入ってたら、 S式をパースするものっぽい気もしてしまう…
738 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 11:28:27 ] 保守的GCと心中する気がなければ、ただの一時しのぎだろ
739 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 20:07:45 ] >>737 > Scheme 処理系に入ってたら、 S式をパースするものっぽい気もしてしまう… その発想は鳴かった
740 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:26:48 ] >>731 計算可能な関数には3つの系譜があるようだ。 ○ゲーデル〜クリーニ 一般帰納的関数 ○チャーチ λ−定義可能な関数 ○チューリング チューリングマシンで実行できる関数 ゲーデルの流れだと原始帰納的関数は計算可能関数。 Lispの本の例題に登場するアッカーマン関数は原始帰納的関数ではないのだけど 帰納的関数であり計算可能関数らしい。階乗計算とかフィボナッチ数とかは 原始帰納的関数なんだと思う。詳しい方、間違ってたら補正してください。
741 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:49:28 ] >>740 チューリングマシンと等価なのは部分再帰関数であって、原始再帰関数は 部分再帰関数の部分集合に過ぎない。
742 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:54:14 ] >>740 あんまりわかんないなら,書き込まなくていいと思う.
743 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 00:23:08 ] ボイスコッド正規形ならクリーニアンクロージャ作れるからラムディ
744 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 00:46:46 ] 帰納的定義のackermann functionってこんな感じ? (define (iter f n) (if (= n 0) (f 1) (f (iter f (- n 1))))) (define (ack n) (if (= n 0) (lambda (m) (+ m 1)) (lambda (m) (iter (ack (- n 1)) m)))) (display ((ack 3) 5)) ;; nice curried...
745 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 08:32:21 ] >>741 740ではないが, 原始帰納関数 ⊆ 部分再帰関数 ⊆ 一般帰納関数 ということになるってこと? 部分再帰関数と一般帰納関数の違いって何?
746 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 09:48:29 ] function = partial function∪total function
747 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 09:58:51 ] >>745 一般再帰(帰納的)関数の定義は?Kleeneの言うgeneral recursive function の意味で言っているのなら、部分再帰関数の真部分集合。なぜなら部分再帰関数は 全域関数でもありうるから。 つまり、 原始再帰関数 c 一般再帰関数 c 部分再帰関数 ということ。ちなみに、原始再帰関数も真部分集合だぞ。Ackermann関数がその一例。 つーかおまい情報系出身か?この辺は一般常識だぞ。 門外漢なら計算理論の教科書を読むべき。
748 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 10:11:31 ] >>746 partial function ⊃ total function
749 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 13:01:30 ] オレ、門外漢なんで高橋先生の「計算論」を読んでみた。 関数と部分関数ってのがあるんだね。そこを強調するのに 部分帰納的関数という言い方をするんだそうだ。 一般帰納的関数はゲーデルの本にあった言い方で クリーニの1936年の論文らしい。邦訳があったら読んでみたい。
750 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 15:57:45 ] →ゲーデルのセミナーでの言い方 ゲーデルは共同研究やセミナーで使っただけで、 帰納的関数について長らく公表しなかった。 ゲーデルにとっては公表するほどの成果ではなかったらしい。
751 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 16:26:45 ] ゲーデルは算定可能という概念も提案した。 結局、これら6つの同等性が証明されてチャーチの提唱へ。
752 名前:baka mailto:sage [2009/07/08(水) 17:40:48 ] すいません、LittleSchemerが難しいと感じるのってやばいですか? いま2章のand again, and again...のとこなんですが意味わかめです。
753 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 18:17:37 ] どこがわからないんですか?
754 名前:baka mailto:sage [2009/07/08(水) 18:59:32 ] >>753 すいみません自己解決しました。 >What is the meaning og the line >((null? l) #t) を(#f #t) と勘違いしてました。 先に出てるdefine lat中の文章のことなんですね。もっとしっかりと読まねば。
755 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 19:11:45 ] しっかりしろバカ
756 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 21:27:55 ] 再帰関数(帰納的関数)は数学的に扱いやすい良い性質があるようですが、 なぜ関数プログラミングが世の中の主流になれないのですか?
757 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 21:29:43 ] >>747 情報出身じゃないっす。興味あるだけの人。 そうか一般再帰関数って最小解操作を許す全域関数(total function)の ことだったのか。
758 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 21:33:58 ] >>756 世の中の現象を反映させるにはオブジェクト(対象)指向じゃないとだめだろ 世の中にあるのは対象なのだから。 んでもって、対象間の関係が数学である。 オブジェクト指向開発されたシステムの真に理想的な姿というか関係が ”数学”になる、んだろ。 関数だけ持ってきても対象が無い(というか対象とは?と言う話になる) からどうしようもないとかそういう話じゃない?よく知らんが。
759 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:17:21 ] >>758 アフォ
760 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:41:17 ] >>758 ほんとに知らなすぎでワロタ
761 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:49:49 ] いえいえ。
762 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:00:31 ] “不運”(ハードラック)と“踊”(ダンス)っちまったんだよ に似てる
763 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:43:38 ] schemeってすばらしいですねぜひきわめたい。
764 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:50:35 ] 頑張れ Lisp/Schemeは面白いぞ
765 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 04:37:15 ] リリカルlisp ベルカ式はパターンマッチを主体としている
766 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 15:04:18 ] ΣxΣyf(x,y)な計算をSchemeで処理するはどう書けばいいんでしょうか。 Rubyで書くとこんな感じなんですが… v = 0.0 (0..10).to_a.each do |x| (0..10).to_a.each do |y| v += f(x, y) end end
767 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 15:23:06 ] 色々あると思うけど例えば (dotimes (i 10) (dotimes (j 10) (set! v (f i j))))
768 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 15:25:47 ] SRFI-42で (sum-ec (: x 11) (: y 11) (f x y))
769 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:02:45 ] (fold (lambda (n i) (+ i (f (car n) (cdr n)))) 0 (map (lambda (x) (map (lambda (y) (cons x y) ) (iota 11)) ) (iota 11)) ) unko
770 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:13:02 ] これぐらいならやはりlist comprehensionが一番かな
771 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:20:17 ] List comp(ryはlexical syntaxで読みやすさを獲得するから、 あまりLisp向きじゃないね。 blog.superadditive.com/2007/11/09/list-comprehensions-in-common-lisp/
772 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 19:52:27 ] 素直に再帰で考えてみたけど (define (sum1 n m f) (if (= m 1) (f n m) (+ (f n m) (sum1 n (- m 1) f)))) (define (sum n m f) (if (= n 1) (sum1 n m f) (+ (sum1 n m f) (sum (- n 1) m f))))
773 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 22:39:10 ] 竹内関数って原始帰納的関数なのですか? それともアッカーマン関数のように原始帰納的関数ではない帰納的関数なのでしょうか? (define (tak x y z) (if (> x y) (tak (tak (- x 1) y z) (tak (- y 1) z x) (tak (- z 1) x y)) y))
774 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 09:42:18 ] >>773 再帰関数ではあるが、原始再帰関数ではない。
775 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 16:26:55 ] >>774 ありがとうございました。 区別がわかってきました。
776 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 17:24:17 ] set! による破壊的代入がなければ絶対に書けないプログラムって どういう種類のものですか?
777 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 17:26:59 ] 無限リストとかじゃね
778 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 18:11:07 ] クリンゴン、エンタープライズの位置座標 フェイザー砲の残りエネルギー、ダメージ
779 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 20:56:17 ] lispでStar Trekか www.xn--t8jcq9c.jp/~take/trek/trek-manj.html
780 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 21:51:43 ] >>779 あるんだねぇ。GCLで動いたよ。 あっけなくやられてしまった。
781 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 16:46:50 ] さっき知ったんだが schemeのcondって継続渡しみたいな構文をサポートしているんだな (cond ((or #f '(1 2 3)) => cdr))
782 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 23:04:55 ] 今日ずっと考えてるんですが解けないので もしわかる人いたら教えてください (cata n)で、n個の要素の括弧の付け替えからなる リストを生成する関数を作ろうとしてます 規則がよくわからなくてどうもうまくいきません 例えば (cata '(1 2)) ((1 2)) (cata '(1 2 3)) (((1 2) 3) (1 (2 3))) (cata '(1 2 3 4)) ((1 (2 (3 4))) (1 ((2 3) 4))) ((1 2) (3 4)) ((1 (2 3)) 4) (((1 2) 3) 4)) 要素数はカタラン数になるそうです (define (cataran n) (define (nck n k) (cond ((or (= k 0) (= n k)) 1) (else (+ (nck (- n 1) k) (nck (- n 1) (- k 1)))))) (/ (nck (+ n n) n) (+ n 1)))
783 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 23:18:25 ] >n個の要素の括弧の付け替えからなるリスト もうちょっと厳密に
784 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 23:48:43 ] >>783 わかりにくくてすみません 言い換えると 一度に2つの要素の足し算しかできない+を使って n個の要素を全て足すとしたときの 可能な計算の順序の指定の仕方と同じです 1+2+3は(1+2)+3と1+(2+3)の計算法があります これは(cata '(1 2 3))に対しての ((1 2) 3) (1 (2 3)) に相当します