[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 20:08 / Filesize : 254 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Lisp Scheme Part26



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)

653 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 20:12:01 ]
初心者向けと書かれるとおれそんなんじゃないし読むことないや
と結局買っても積んだままにしてしまう
お決まりの言語のおさらいを数章割かれてるのを見ると頭に来るからだ
いっそのこと超上級者向けのが興味をそそられる

654 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 20:24:17 ]
>>653
SICP も初心者向だよwW


655 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:51:02 ]
だから1章で飽きて放り投げちゃったんだよ。

656 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 22:05:20 ]
目次みて1章はつまんなそうだと思ったら3章あたりから読み始めればよかったのに。

657 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 00:37:31 ]
良い本は、
例え初心者向けと銘打たれていても、
光る記述で満ち溢れており、
熟練者でも楽しめるものなのだ。
だからグルの書いた本は面白いのだ。

658 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 01:45:12 ]
苫米地先生の事ですね。わかります。

659 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 01:54:17 ]
>>658
ビビッタ。
実は、最近なぜか洗脳について勉強していたりする。関係あるの?

660 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 02:01:58 ]
Lisperじゃん。

661 名前:デフォルトの名無しさん [2009/07/04(土) 02:02:46 ]
とまちゃんだけはガチ



662 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 02:04:31 ]
sage忘れたすまぬ

663 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 03:21:58 ]
竹内本は目次の時点で駄目だな

664 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 03:34:00 ]
無縁の衆生ですな。

665 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 05:49:37 ]
>>655
もったいないお化けが出るぞ

666 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 19:46:29 ]
The Little Schemer買ったお。たくさん勉強するお。

667 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 10:42:05 ]
shibuya.lispどうだった、行った人?

668 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 12:41:05 ]
>>667
面白かったよ。#4あるならLTしようと思ったくらいには(TTはなんいどたかい)。

669 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 12:47:18 ]
すみません、以下のプログラム想定外なことだらけなのですが
以下のs1で、値が変更出来るようなプログラムは書けますか?
schemeは値渡しなので無理なような気もしますが
また、test関数では内部でtをset!しているにもかかわらず
その変更は影響がないように見えますが何故なのでしょうか

(define (s1 t v) (set! t v))
(define (sa t v) (set-car! t v))
(define (sd t v) (set-cdr! t v))
(define (sa2 t v) (let ((r (cdr t))) (set-car! r v)))

(define (test f)
(define t '(()()))
(let ((r (f t 1)))
(print t)
(set! t '(()()))
r))

(test s1)
(test sa)
(test s1) ;why?
(test sd)
(test sa2)
;(map test (list s1 sa sd sa2))

670 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 13:11:03 ]
引数のバインディング変えても外からは見えないだろ。

int f(int x) {
x = 10;
}
やってるのはこれと同じ

671 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 13:17:32 ]
>>669
set! は変数とオブジェクトの結び付き (束縛) を付け替えるオペレータ。
set-car! や set-cdr! はオブジェクト (consセル) の中身を変更するオペレータ。
ってことを念頭に置いて考えるとわかりやすいかも。
あまりに根本的すぎることなのでそこを理解できてないようだとちょっと説明しづらい。



672 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 13:26:06 ]
> また、test関数では内部でtをset!しているにもかかわらず
> その変更は影響がないように見えますが何故なのでしょうか

処理系がわからんから何とも言えんが、
おそらくその処理系は、クォートされたリストをすべての関数呼び出しで共有するように作られているんだと思う。

test 内の (define t '(()())) のところでは、
すべての関数呼び出しで共有される '(()()) というリストを t に束縛する、みたいな処理が行われる。
そこで、(test sa) を実行してしまうと、そのリストが '(1 ()) に書き換えられてしまう。
そのため、次回以降の test の呼び出しでは、'(1 ()) というリストが t に束縛されてしまう。

そもそも scheme では、クォートされたリストに set-car!、set-cdr! しちゃいけないことになってるので、
こんな処理をすること自体が間違い。
やるんだったら、毎回リストを生成するようにする。

(define t (list '() '())

673 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 13:55:51 ]
問題をきちんと理解してから解答を考えよう
って約束したじゃないですかー

674 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 14:02:00 ]
>>672
> 処理系がわからんから何とも言えんが、

むしろ何も言うな

675 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 14:29:33 ]
おまえがな。

676 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:05:14 ]
shibuya.lispの参加者、もっと感想・ネタを書いてくれ。
悪口・不満的な話は、直接、主催者にメールでもしてくれ。

677 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:24:01 ]
いずれ上がるだろう動画を楽しみに待つ

678 名前:デフォルトの名無しさん [2009/07/05(日) 15:48:43 ]
www.nicovideo.jp/mylist/13373941

679 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:53:09 ]
ニコに挙げたのか
つべで探してたわ

680 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:53:51 ]
感謝。既に上がってるのは想定外だった

681 名前:デフォルトの名無しさん [2009/07/05(日) 15:54:39 ]
つべはこっち。
www.youtube.com/view_play_list?p=C7D5490AD455E464




682 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 17:24:59 ]
>>670-672
ありがとうございます

>>671
関数の引数はjavaのように、
実体を指すポインタのコピーが渡ると考えれば良いですよね
set!だとコピーしたポインタ自体を変更しても元データには全く影響がないが
set-car!だと、コピーしたポインタの指す先を変更するので
引数にset-car!しても破壊的変更が可能

だとすれば、参照渡しで実現出来る
関数の実引数の実体を直接書き換えるような
関数の作成は不可能ですね

>>672
>そもそも scheme では、クォートされたリストに set-car!、set-cdr! しちゃいけない
これは初めて知りました。これが原因ですね
コードはGaucheとGuileで試したのですが
どちらもクォートされたリストは共有されるような実装ってことですね

683 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:31:28 ]
>>682
> クォートされたリストは共有されるような実装ってことですね

確か Gauche の場合は REPL が起動してるときは共有されないはず。
だからといってそれを期待しちゃだめなんだけど。

Gauche のマニュアルから引用 ↓

注: R5RSは、リテラル式の値を変更するのはエラーであるとしています。
しかしGaucheはペアとベクタについてはそれが定数であるかどうかをチェックしておらず、
set-car!やvector-set!等の破壊的手続きによってそれらの値を変更してもエラーは報告されません。
そうした場合の動作は不定です。

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))
に相当します

785 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 00:01:04 ]
・二分木である
・葉にしか要素がない (>>784で言えば数)
・分岐には要素がない (>>784で言えば+)
という場合、要素数がn個なら木の種類は? と同じ問題。

・要素の間の何処に分岐点を持ってくるかの数え上げ
・二つの部分木に分けた後の分割統治
を考えればわかるでしょ。



786 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 01:16:07 ]
規則とかいってるからサンプル眺めるだけでえいやっと思い付こうとしてるのかな。
n=1からn=4, 5くらいまで自分で書き出してみれば考え方もわかりそうなものだが。


787 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 07:18:12 ]
>>785
出来ました。ありがとうございます
(define (cata l)
(define (flat1 x) (fold append () x))
(define (aux n l)
(map (lambda (x)
(map (lambda (y)
(if (and (pair? x) (null? (cdr x))) (cons (car x) y)
(cons x y)))
(cata (drop l n))))
(cata (take l n))))
(define (aux2 n l)
(if (<= n 0) ()
(append (flat1 (aux n l)) (aux2 (- n 1) l))))
(if (< (length l) 3) (list l)
(aux2 (- (length l) 1) l)))

788 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 08:28:51 ]
()を評価したら()でええの?
エラーではないの?

789 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 09:08:13 ]
規定ではエラーだねぇ

790 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 09:11:14 ]
>>787
(cata '(1 2 3 4)) の実行結果が、最初に書いてあった実行例と違うんですが

(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))

791 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 10:40:02 ]
>>788
'()のがいいですね。Gaucheだとエラーにならないので
他の処理系使うまで気づきませんでした

>>790
(1 2 3)を(1 . (2 3))のように見たら
>>784を満たしているので
中途半端ですが満足してしまいました
多分ちょっといじればその出力に出来ると思います



792 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 11:01:56 ]
>>791
自分も考えてみたけどけっこう難しい例題だと思うよ。
根本的に書き直さないといけないんじゃない?悪いけど。

793 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 11:21:17 ]
そんなことない、ちょっと書き直したら動きましたよ

>>792さんも考えてるかもしれないのでヒントだけ
ネストしたmapの中身を修正するだけです

794 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 11:28:04 ]
ちなみに srfi-42 使えばこんなに簡単

(define (cata l)
(if (< (length l) 2)
l
(list-ec
(: pos 1 (length l))
(: fst (cata (take l pos)))
(: snd (cata (drop l pos)))
(list fst snd))))

795 名前:785 mailto:sage [2009/07/12(日) 11:34:56 ]
実はドット対で二分木を構成した方が分かりやすい
とアドバイスを入れるかどうか迷った。
結局元の問題と違っちゃうから書かなかったけど。

796 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 11:42:04 ]
(define (cata xs)
(cond ((null? xs) '())
((null? (cdr xs)) (list (list (car xs))))
((null? (cddr xs)) (list (list (car xs) (cadr xs))))
(#t (let ((a (car xs)) (b (cadr xs)) (rest (cata (cddr xs))))
(define (patr x)
(list a (list b x)))
(define (patl x)
(list (list a b) x))
(append (map patr rest) (map patl rest))))))

うんこーどですが、どうでしょうか

797 名前:796 mailto:sage [2009/07/12(日) 11:43:40 ]
駄目ですた

798 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 11:50:51 ]
>>794
これは神コード・・srfi-42かぁ

799 名前:792 mailto:sage [2009/07/12(日) 17:53:13 ]
>>793
やっぱ、難しい。考えて相互再帰のこんなの↓考えた。
fooの部分はそれぞれのリストの直積みたいにすれば
いいと思うのだけど、どうもうまくいかない。
また、考えてみるよ。

(define (cata ls)
(if (<= (length ls) 1)
ls
(cata1 ls 1)))

(define (cata1 ls i)
(if (= i (length ls))
'()
(cons (foo (cata (take ls i))
(cata (drop ls i)))
(cata1 ls (+ i 1)))))

800 名前:792 mailto:sage [2009/07/12(日) 19:37:44 ]
やっとできた。勉強になった。

(define (cata ls)
(if (<= (length ls) 1)
ls
(cata1 ls 1)))

(define (cata1 ls i)
(if (= i (- (length ls) 1))
(product (cata (take ls i))
(cata (drop ls i)))
(append (product (cata (take ls i))
(cata (drop ls i)))
(cata1 ls (+ i 1)))))

(define (product ls1 ls2)
(if (null? ls1)
'()
(append (map (lambda (x) (cons (car ls1) (list x))) ls2)
(product (cdr ls1) ls2))))

> (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))
>

801 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 20:35:35 ]
>>800
おめでとん
自分の環境では、
3つのコード中>>800が最速でした

参考までに
>>787の修正版も張っておきます

(define (cata l)
(define (flat1 x) (fold append '() x))
(define (single? x) (and (pair? x) (null? (cdr x))))
(define (aux n l)
(map (lambda (x)
(map (lambda (y)
(cons
(if (single? x) (car x) x)
(if (single? y) y (list y))))
(cata (drop l n))))
(cata (take l n))))
(define (aux2 n l)
(if (<= n 0) '()
(append (flat1 (aux n l)) (aux2 (- n 1) l))))
(if (< (length l) 3) (list l)
(aux2 (- (length l) 1) l)))



802 名前:デフォルトの名無しさん [2009/07/13(月) 11:09:33 ]
>>758
すまん、まじめに反応してみるが、
それは命題論理->一階述語論理の流れでは歴史的事実だが、
そこでの対象指向自体は、関数プログラミングとOOプログラミング
を篩にかけるものではない。FOLレベルのオブジェクトであれば、
関数プログラミングだろうがなんだろうがまあ存在する。

また、重ねて恐縮なのだが、対象間の関係を記述するのが数学の
すべてという意味なら、それは正しくない。

803 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 15:42:48 ]
何も理解してないバカと説明する気のないバカ

804 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 16:29:33 ]
数値計算に比べて数式処理は世の中の主流になれないみたいな感じなのかな?
map f (map g xs) == map (f . g) xsとか、数式処理みたいなものだと思うんだけど。

805 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 17:05:23 ]
う〜ん、難しくてよくわからないな。

x = x + 1 みたいな変なのがプログラミングの世界ではまかり通ってる
のだけど、こんなの普通の高校や大学初年で習う数学じゃ扱えないはず。
高度な数学なら扱えるのかな?もっと詳しくお聞きしてみたいです。

806 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 17:19:31 ]
数式処理が主流になれない理由は、解析的に解けない問題がたくさんあるから、だね。

807 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 17:38:25 ]
>>805
en.wikipedia.org/wiki/Fixpoint_theorem

808 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 18:44:18 ]
set-car!とset-cdr!を使って
(define a (list 1 2))
このaを'()にすることは可能ですか?

809 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 18:54:26 ]
gosh> (define a (list 1 2))
a
gosh> (set-car! a 'quote)
#<undef>
gosh> (set-cdr! a '(()))
#<undef>
gosh> a
'()

810 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 19:11:28 ]
手品みたいですね
()にも出来るのでしょうか?

811 名前:デフォルトの名無しさん [2009/07/13(月) 19:22:14 ]
>>804
それは、より正しくは、Numeric ComputationとSymbolic Computationとの
比較のことだと思うが、そうであるとして、
それと、関数プログラミングとそれ以外(おそらく命令型?)の比較は同型ではない。
NCとSCは、806の言うとおり、そもそも活用できる問題領域に大きな差がある。

>>805
x = x + 1 は算数の意味論で言えば明らかに偽な文だが、数学の世界であってもこれが
有意義になる意味論を定義することはできる。
なので一般性をもってその観点でそれを否定することはできない。
命令型プログラミング言語において、この式または文が、x + 1 が環境への参照であり、
x = は環境への束縛の操作であるという意味論であることを想起させにくいという点で
いえば同意。



812 名前:デフォルトの名無しさん [2009/07/13(月) 20:43:07 ]
>>810
set-car!,set-cdr!は対象がpairであることまでは破壊しないので、
pairとしての表現を持たない空リストにするのは無理じゃないかな。

813 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 20:53:23 ]
gosh> (let ((src (list 'a 'a)))(set-car! src 'quote) (set-cdr! src '(()))(eval src (interaction-environment)))
()

;; unko-

814 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 21:42:37 ]
>>805
> x = x + 1

C/C++ では lvalue と rvalue を区別してフォーマルな意味論を与えられている。
後付けの感は拭えないが、ちゃんと扱える理屈は存在する。
厳密な意味においては数学的とは言えない面はあるけど、
プログラミングに必要な要素ってのを考えると充分な妥協だと思う。

815 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 22:25:27 ]
>>805
Hoare Logicだな
実行文の前でのxの値をX,実行文の後ではYとすると
このプログラムが正常に動作すると仮定すれば
{x=X} x:=x+1 {x=Y}というHoare Tripleが構成できて、代入の規則から
x=X ≡ (x+1=Y) <=> x=X ≡ (x=Y-1) ← X = Y - 1 ≡ Y = X + 1
ってな具合にxに1を加えるっていう動作をする事が証明できたりする

代入を感覚で理解できなくて、
a=10,b=20; a=b; a=?,b=?;っていう問題を解けない人でも、この技法を使えば
計算で解くことができる、素晴しい!!

勿論、こういう単純な例だけでなく分岐やループも扱えるんだけど
「ループで配列内要素の総和を求める」っていうような問題でも
A4レポート用紙2枚に収まるか怪しいような長い証明を
書く羽目になるから、そうバシバシ使っていけるものでもないな

これと比べるとdependently typeとcurry-howard対応の何と実用的なことか…

816 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 22:39:18 ]
>>805
代入と等式を混乱していないか

817 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 23:02:30 ]
tinyurl.com/mwees3
なんで16年前のメールがgoogleグループにあるんだ?

818 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 23:09:09 ]
ログが残っているから

819 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 23:34:06 ]
tinyurl.com/m92nbe
5月には圏論をやっとる。

820 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 23:42:43 ]
直リン張らないほうがいいな。すまん。

821 名前:805 mailto:sage [2009/07/14(火) 07:36:23 ]
>>815
知りたかったのはそういうことです。
関数プログラミングは高校で習った帰納的定義、数学的帰納法など
普通の数学の延長にあるように思えました。
一方、命令型の破壊的代入を主体とするものには理屈はあるのだろうか?
と思っていました。実用的なものが関数型だけで書けるとは思ってないのですが。



822 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 07:58:33 ]
Static single assignment的に、
X_1 = X_0 + 1
と考えると面白い。
あるlambda式をlambda droppingすると、それは、
対応するSSA文をoptimal変換したことと同じ。

823 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 09:11:10 ]
>>821
それならホーア論理じゃなくてチューリング機械じゃないの?

824 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 11:49:11 ]
・表示的意味論(ピラミッドの頂点=神)
数学の延長。

・公理的意味論
ホーア論理。長い証明を書く羽目に。

・操作的意味論(食われるだけの存在=ミジンコ)
抽象機械。

825 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 16:03:26 ]
>>824
言いたいことはわからなくもないが、3つとも数学だろ。

826 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 16:25:00 ]
>>821
意味論というより、命令型プログラミングの根拠となる計算モデルを
知りたいということではないのか?
だとすれば、RAMモデルでは破壊的代入が定義されている。

827 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 22:34:41 ]
>>824
Aczelの項書換えシステム。文脈原理。

828 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 23:08:19 ]
>>805が知りたいこととは違うかもしれないが
プログラミング言語論に関しては
構文論(syntax)と意味論(semantics)という大きな分類がある
>>824の分類は意味論(semantics)の中での分類

構文論はx=x+1の数学的な意味は考えずに
これら言語の構造自体について扱う
式の「意味」という意味では
代入に=ではなく:=や<-を代入に割り当てている言語もあるわけで
構文と意味は独立なわけ

そもそも数学は代入のような副作用ってあまり扱ってないように思う
俺が知っている中で副作用を扱っているのは
線形論理ぐらいかなぁ
A:「100円持っている」
B:「80円以上持っていればパンが買える」
C:「50円以上持っていればチョコレートが買える」
A→Bは真
A→Cは真
よって「100円持っているならばパンとチョコレートが買える」

829 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 23:31:26 ]
線形論理ってアスペルガー症候群みたいな感じだね。

830 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 00:14:28 ]
逆では?
線形論理では、上の例でA→B∧Cが成り立たない。

831 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 04:13:43 ]
>>828
805です。自分でも何を知りたいのか混乱していました。
表示的意味論です。
「プログラム意味論」横内寛文著(赤本)は持っているのですが
よく理解できていません。R^5RSに収録されているのは表示的意味論
とのことで理解したいとは思うのですが。

ところでR^6RSでは表示的意味論が放棄されて操作的意味論になった
そうですが何故なのかと思っています。



832 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 05:12:42 ]
Operational Semanticsは意味論を勉強してなくても簡単に理解できるからな。

833 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 05:18:25 ]
> 「プログラム意味論」横内寛文
その本読んでみたいんだけど売ってないんだよね。

834 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 12:17:28 ]
>>831
>ところでR^6RSでは表示的意味論が放棄されて操作的意味論になった
>そうですが何故なのかと思っています。

表示的意味論が分かり難い上に実装にも証明にもあまり役に立たないから。
しかもR5RSのは矛盾だかあいまいさが証明されてたはず。

835 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 17:43:24 ]
>>805
意味論を理解することが目的なら、もう少し具体的に今どこがわからないのかを
示せばここで解説される可能性はある。

意味論がさっぱりわからん、ということでしかないとすると、本読め、以外にない。

意味論を理解することが目的じゃなくて、何かをするために意味論を理解したい
なら、目的を示した方がいいと思う。それについて助言可能かもしれない。

836 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 18:08:29 ]
>>828
いや、変数、変項、というのは形式的な数学では日常茶飯事だから、
代入というのは数学でもよくある概念じゃないか? それは人間の
頭の中で実施されることが多いが、何かを証明するときに紙に
書いたりもする。

よくある概念であるがゆえ、それ自体が明示的な対象となるのは数学基礎論
にはなるが。

あと、一見代入だからといって副作用を伴うとは限らない。
述語論理のユニフィケーションとかもあるし。

837 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 18:17:42 ]
代入?いいえ項書換えです

838 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 18:25:32 ]
>>835
805です。数学がわからないと数学を必要とするコンピューターの理論も
理解できないのではないかと思いしばらくの間、数学の勉強に行っていました。
目的はプログラムと数学との関連の理解です。
本を読みつつ、ご助言を仰ぐこともあるかもしれません。よろしくお願いいたします。


839 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 18:49:37 ]
真面目に勉強するなら2chにレスしてないで本読めでぶ

840 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 19:03:00 ]
>>839
ああ、ここは2chだってことを忘れてた。でも玉石混交だから。

841 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 19:18:18 ]
>>838
それなら、まずは計算可能性理論を勉強してみると良いな。



842 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 20:27:45 ]
>>838
上にでてきたfjとか。2chだとせっかくの話が消えてしまう。
ただ、迷惑にならないようにしたほうがいいだろうけど。

843 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 21:04:29 ]
>>802
>また、重ねて恐縮なのだが、対象間の関係を記述するのが数学の
>すべてという意味なら、それは正しくない。

難しい話になるとは思うのですが、現時点では”数学”とは何を指している
言葉だといえるのですか。
マックレーンはアイディアを抽出化して形式化したものが数学だ、形式機能主義だ
と言ってるんですけど、それって、つまり数学的対象とはあくまで形式という事なんですか。

確かに、理解していないバカではある。書いてて確かに思う。
けど、表立っては出ないがこういう話が問題になる分野領域は存在する気がするんだよね。

844 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 21:16:33 ]
もう十分以上の情報が出ているぞ

耳学問としょうもないプライドのせいで
無知だとかバカだとか思われたくないからいつまでも演説を続けるんだろうが
いいかげん黙れ

845 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 21:19:29 ]
805=815で釣りでもやってるのかと思ったが

846 名前:802 mailto:sage [2009/07/15(水) 22:41:53 ]
>>844
おお、すまなかった。誰を指しているかがイマイチわからんが、
この流れをつくった私がいけないのだろう。

>>843
というわけで、すまんが退散しようと思う。844の言うとおり、
結構いろいろな情報が出ているので、参考にして欲しい。

お邪魔しました。



847 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 01:17:17 ]
>>844
混在してわけがわからないことになってるけど、いくつか独立した話しが
並行して進んでいるんだよ。
それに、そんなぶっきらぼうに言っちゃうとみんなびっくりしてしまうよ。

848 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 01:43:59 ]
たまに情報学板のことも思い出してあげてください。

849 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 01:48:23 ]
確かに最近の話題は情報学板の方が向いてるな。
あそこ過疎りすぎだけど、見てる奴はそれなりにいるっぽい。

850 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 03:37:46 ]
>>838
数学とか理論計算機科学の話題だったらプログラム板はやめておいたほうがいいよ。
でたらめな情報が多すぎてろくなことがないから。

851 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 04:02:29 ]
>>850
情報学板に移動するよ。ありがとう。




852 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 08:45:47 ]
ERR5RS(だっけ?)って幾らかでも流行ってるんですか?

853 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 13:51:52 ]
顧みるにR5RS自体流行ってるかな?
お察しください

854 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 16:05:08 ]
LOL邦訳本ってamazonじゃ普通に買えないんだろうか。
ページはあるんだけど、なぜかプレミア価格の出品しかない。(´・ω・`)

855 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 22:57:07 ]
まさかすぐに絶版にしたりしないよね?

856 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 00:11:40 ]
SICPの悪文と格闘している間にLOL翻訳が出てしまったんだな。
On Lispも積読になってるが、LOLも積読しとく事にしよう。
以上チラ裏でした(・∀・)

857 名前:デフォルトの名無しさん [2009/07/17(金) 01:43:00 ]
>>854
Let Over Lambda 日本語版 サポートページ
hop.timedia.co.jp/show/book/Let%20Over%20Lambda
>なお、現状Amazon.co.jpではマーケットプレイス以外で購入できなくなっています。
>他の書店、オンライン書店では普通に購入いただけます。

COMMON LISP JP > Archives > 2009/07/15
practical-scheme.net/chaton/common-lisp-jp/a/2009/07/15
>出版元にも聞いてみたんだけど、
>アマゾン内部の問題らしくて理由はわからん、とのことだった
>版元品切れなわけじゃないんだけど

LET OVER LAMBDA Edition1.0 (Amazon)
www.amazon.co.jp/dp/4434133632/
>この本は現在お取り扱いできません。

LET OVER LAMBDA Edition1.0 (ジュンク堂書店)
www.junkudo.co.jp/detail2.jsp?ID=0110264349
>池袋本店 33冊 在庫有り

858 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 01:43:50 ]
>>855
弱小出版会社だから、東販/日販の初回取り扱いが少なかったんだと思う。
注文すれば、出版社に発注されるでしょう。在庫はしているだろうから。

859 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 05:31:14 ]
ふぁびょったってしゃーない。

860 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 05:33:54 ]
と書いたけど、LOLが売れるとはおもえない。グレアムのような知名度もなけりゃ
LOLそのものがそれほど定評だったレビューもなかった。
なにより、極度にマニアックだから。
細く長く生き残ればよいという本だと思う。

861 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 05:55:53 ]
On Lisp はついてけないけどLOLは単にLisp最強伝説本として楽しめた



862 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 07:36:45 ]
COMIC LOL

863 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 13:09:17 ]
LOLは前提知識それほど必要ないの?

864 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 13:28:47 ]
いまから買いに行こうと思ってたのに・・・・・

865 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 14:49:16 ]
>>863
コードが短くて解説がうまいから分かった気分になれる

866 名前:863 mailto:sage [2009/07/17(金) 16:44:02 ]
>>865
じゃあ丘リスパーの漏れにぴったりでつね(自嘲

867 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 02:23:20 ]
>>852
ERR5RSは、実際に対応してるのはLarcenyくらい。
提唱者のWilliam D Clingerが開発してるから当然だけど。
Ypsilonは対応予定。Gaucheもそのうち対応する予定。予定は未定。
他は知らない。

ちなみに、ERR5RSで書いてる人はいる。主にLarceny-usersとかに。
というわけで、will先生の活躍に御期待下さい。

868 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 07:43:54 ]
連休中、みなさんはLOLを読みふけるのでしょうか^^

869 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 09:23:21 ]
とりあえず著者はVimmerってとこまで読んだ。

870 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 09:38:45 ]
とりあえずForth最高!ってところまで読んだ。

871 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 11:43:17 ]
postscript万歳!ってところまで書いた




872 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 12:36:02 ]
LOL、オビの煽りに苦笑い、スルーw

873 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 13:46:39 ]
lolって略はネトゲ的にどうなんだろう

874 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 13:55:47 ]
LOLは元々ネトゲ用語じゃないよ

875 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 18:40:27 ]
MUDからUsenetに輸入された可能性もあるので一概にそうとも言えない

876 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 21:09:04 ]
emacs論だけ立ち読みすれば十分な本だな

877 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 22:35:35 ]
>>854
今見ると「一時的に在庫切れですが、商品が入荷次第配送します。 」だそうですよ

878 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 22:48:12 ]
タイトルがかっこいい
class over defとは違うんですみたいな

879 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 00:51:52 ]
lol=laugh out loudly だからwwwwwwwww だよ。

880 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:28:37 ]
Lispは関数型言語じゃない。まで読んだ。

881 名前:デフォルトの名無しさん [2009/07/20(月) 21:59:02 ]
すみません、私はschme大好き人間なんですが、
common lispの defunが嫌いです。「でふん」っていう語感が。
やっぱしscheme最強でしょ。



882 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 22:02:31 ]
致命的なまでに英語が苦手なようだなw

883 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 22:05:35 ]
でふん
デフィネ

884 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 23:05:35 ]
つか気に入らないなら自分で好きな名前にすればいいじゃない
これだから最近scheme始めたガキは困る

885 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:39:46 ]
(defmacro define (fun_arg body)
`(defun ,(car fun_arg) ,(cdr fun_arg) ,body))

886 名前:デフォルトの名無しさん [2009/07/21(火) 00:58:24 ]
すみません、私はschme大好き人間なんですが、
common lispの funcallが嫌いです。「ふんこーる」っていう語感が。
やっぱしscheme最強でしょ。

887 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 01:08:10 ]
labels使え

888 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 01:19:29 ]
let over set!

889 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 03:07:15 ]
letrec over μ

890 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 03:17:25 ]
scheme大好きな私ですがたった一つ好きになれないのがランバダです。
語感が嫌ですね。

891 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 03:40:41 ]
コードギアスでさぁ、
ルルーシュが C.C. の名前を呼ぶ場面があるでしょ。
call/cc を見るたびに連想するんだ



892 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 04:01:29 ]
でっかいアニメ好きです

893 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 04:39:34 ]
俺はCCガールズっていう人達見ると思い出すな。

894 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 04:49:01 ]
それじゃあ、思い出さないんですね。見ることないもんね。


895 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 05:01:59 ]
その代わりにCCレモンをよく見るからね。

896 名前:デフォルトの名無しさん [2009/07/21(火) 08:54:45 ]
lispのコードを出してくれるyacc,lexって有りますか?


897 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 09:19:46 ]
CCっていったらサクラだろJK

898 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 09:25:46 ]
俺もNHKでやってるという免罪符で見てた>CCさくら
なんか色使いが綺麗だったし
話自体はよくわからなかった

899 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 09:57:57 ]
それを言うならリリカルなんて

900 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 10:46:49 ]
リリカル・トカレフ・キルゼムオール

901 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 11:03:05 ]
りこさんのエロ画像キボンヌ



902 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 13:09:07 ]
おまいはこっちに行けw
pc12.2ch.net/test/read.cgi/tech/1183396621/

903 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 13:42:06 ]
もっとネタscheme処理系を!


904 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 13:44:06 ]
いぷしろん萌え

905 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 16:17:27 ]
VSCM萌え

906 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 20:47:00 ]
Mathematica 萌え

907 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:29:44 ]
割と普通に関数型として使えるのには感心したが
正直書きにくかった

908 名前:デフォルトの名無しさん [2009/07/21(火) 22:30:28 ]
Little Schemerを読んでるんですが、Qを読んですぐAを読むっていう
ただ読んでるだけなんですが、
みなさんはちゃんと自分で答えを考えながら読んでるんですか?

909 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:32:49 ]
俺は考えて読んだけど、好きなようにすればいいんじゃないかな。
一度全部読んでから、次は自分で考えれば?
たぶん二回目でも100点にはならないと思うから、
二回読むことには意味があると思う。


910 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 00:26:36 ]
>>909
なるほど、ありがとうございます。
いま3章の終りに来ていますがなかなかなか複雑で頭を使います。がんがる。

911 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 02:23:55 ]
LOLなんだけど、ざっと斜め読みしてたら、
マクロを本当に使いこなせるのはSchemeで修行してきた人達だ。
みたいなことが書いてあった。



912 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 04:29:56 ]
Schemerのほうが偉い症候群ですねわかります

913 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 17:44:32 ]
↓ここからCLerの猛反論

914 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 18:19:14 ]
まあ最近はSchemeからこの世界に入って、
Schemeで修行せずにCommon Lisp入る人の数の方が少ない、
ってのはそれほど間違ってないと思う。
Schemeは取り上げる大学が多いからね。
そんな噛みつくことじゃないのでどうでもいい。

915 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:25:41 ]
C99/C++のコメントを除去したかったので
コードを書いたんだけどえらい遅い
改良するとしたらどの辺でしょうか?

最初非末尾再帰版で書いて
末尾再帰に書き直したのですが
相互再帰関数は通常最適化されないのですかね?
処理時間が通常の再帰版と同じで
250kbのファイル(5千行中4000行がコメント)
を処理するのに100秒かかります

コード(続く)

916 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 19:29:01 ]
;remove comment
(define (remcom l)
(define (test str lst)
(if (< (length lst) (string-length str)) #f
(let* ((a (string->list str))
(l (take lst (length a))))
(every eq? a l))))
(define (outcomment l res)
(cond ((null? l) res)
((test "/*" l) (incomment (cddr l) res))
((test "//" l) (inlinecomment (cddr l) res))
((eq? #\' (car l)) (inquote #\' (cdr l) (cons #\' res)))
((eq? #\" (car l)) (inquote #\" (cdr l) (cons #\" res)))
(else (outcomment (cdr l) (cons (car l) res)))))
(define (incomment l res)
(cond ((null? l) res)
((test "*/" l) (outcomment (cddr l) res))
(else (incomment (cdr l) res))))
(define (inquote sep l res)
(cond ((null? l) res)
((eq? sep (car l)) (outcomment (cdr l) (cons sep res)))
(else (inquote sep (cdr l) (cons (car l) res)))))
(define (inlinecomment l res)
(cond ((null? l) res)
((eq? #\newline (car l)) (outcomment (cdr l) res))
(else (inlinecomment (cdr l) res))))
(list->string (reverse (outcomment (string->list l) '()))))

917 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:18:56 ]
>>915
test の中の (length lst)

918 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:21:17 ]
コメントが現れる度string->listしてる所、
(test "/*" l)とかを
(test `,(string->list "/*") l)
にしとくとか。(test側も修正)
それと、100秒掛かるって言われても判らんから
環境と処理系も書いて欲しいな

919 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 20:25:49 ]
あ、`',(string->list "/*")にしないとだめだったかな
動かしてないから間違ってたらごめん

920 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:03:42 ]
(define (test str)
 ;; Let Over Lambda
 (let ((l (string->list str)))
  (lambda (lst) ...)))

(define test/* (test "/*"))
(define test*/ (test "*/"))
(define test// (test "//"))

921 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:19:19 ]
lengthをやめたら、100秒が3秒になりました
長さはmaxで2と固定なので
(if (or (not (pair? lst)) (not (pair? (cdr lst)))) #f ...)
に変更しました

また、string->listの箇所も修正するとさらに早くなりました
(環境はGauche+cygwin)
ありがとうございました!



922 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:24:16 ]
上の"/*"みたいな最終的にstring->listに掛かるようなやつって
gaucheじゃ定数伝播してくれないのかな

923 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 12:29:59 ]
数値計算を主体でプログラムしてると
あまり自分でマクロを作る場面に出くわさない
on lispのマクロはそのまま使ったりするけど

924 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 12:52:12 ]
こういうのはどうよ
(define-syntax let/ec
(syntax-rules ()
((_ r b ...) (call/cc (lambda (r) b ...)))))

わざとらしい例
(let/ec r (fold (lambda (x y) (if (= x 0) (r 0) (* x y))) 1 '(2 3 0 5)))

925 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 13:28:31 ]
何が?

926 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:44:08 ]
いや、なんでもない

927 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:48:00 ]
let/ccってのはPLTやGaucheにあるね

928 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 00:17:53 ]
redditから
ttp://www.google.com/search?hl=en&q=recursion

929 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 04:03:28 ]
エロファイルのサンプルをダウンロードして来ました.このファイルはzipで圧縮されておりファイル名の末尾がアルファベットもしくは数字+拡張子zipになっており,展開すると拡張子が取れたディレクトリ名の中にファイル名+拡張子wmvのファイルが出現します.
例:
aaaa0725a.zip, aaaa0725b.zip, aaaa0725c.zip, aaaa0725d.zip

aaaa0725a/aaaa0725a.wmv
aaaa0725b/aaaa0725b.wmv
aaaa0725c/aaaa0725c.wmv
aaaa0725d/aaaa0725d.wmv

b0725-1.zip, b0725-2.zip, b0725-3.zip, b0725-4.zip

b0725-1/b0725-1.wmv
b0725-2/b0725-2.wmv
b0725-3/b0725-3.wmv
b0725-4/b0725-4.wmv

で,このファイルを末尾がアルファベットの場合は a 数字の場合は 1 にまとめるという作業をLispで行う場合,Lisp脳ではどう考えますか?

aaaa0725a/aaaa0725a.wmv
/aaaa0725b.wmv
/aaaa0725c.wmv
/aaaa0725d.wmv

b0725-1/b0725-1.wmv
/b0725-2.wmv
/b0725-3.wmv
/b0725-4.wmv

教えてくださいエロい人


930 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 05:16:08 ]
zshで
unzip *.zip
for d in *a; mv ${d%a}[bcd]/*.wmv $d
for d in *1; mv ${d%1}[234]/*.wmv $d
rmdir *

試してないけど。

931 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 05:18:15 ]
> unzip *.zip

訂正
for f in *.zip; unzip $f




932 名前:デフォルトの名無しさん [2009/07/25(土) 09:45:41 ]
MatzLispを搭載してるmfilerで展開&連番リネーム

933 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:25:06 ]
MatzLispなんてLispはありません
Lispと言うからにはS式とマクロがないと駄目です

934 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 19:28:09 ]
lisp--

935 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 19:52:08 ]
l4u…

936 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 20:07:36 ]
AVRやPICで使えるSchemeってある?LEGO Mindstrom用は見つけたけどマイコン用は見つからなかった。

937 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 20:09:27 ]
stalinでCコード吐かせてgccでコンパイルする

938 名前:929 mailto:sage [2009/07/25(土) 21:15:23 ]
なんだ結局正規表現に頼るのか

939 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:19:55 ]
こういう時のための正規表現だからね。

まぁ、正規表現に親を殺されて憎んでいるから絶対使いたくないとか、
そういう理由があるなら仕方ないかもしれんが。

940 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:50:57 ]
正規表現殺人事件
「私は見ました!! 彼はバックトラックに轢き殺されたんです!!」

941 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:10:15 ]
オートマでした



942 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:47:25 ]
>>936 Marc Feeleyの研究室で何年か前にPIC用Schemeコンパイラを作ってた人がいたと思う。


943 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:54:44 ]
>>938
やりたければ SRE でも PEG でも使うがいい。
やろうとしてることがいかにもスクリプト言語的なので、
手段だってそれに見当ったものになるだけだろ。
そこに Lisp らしさを求めたところでナンセンスなだけだ。

944 名前:929 mailto:sage [2009/07/25(土) 23:30:41 ]
>>943
> やりたければ SRE でも PEG でも使うがいい。
SRE S-expression Regular Expression
PEG Parsing Expression Grammar
ですね.勉強します.

> やろうとしてることがいかにもスクリプト言語的なので、
はい,あえてこういう問題をLisperはどう考えるか知りたくてきいてみました.
ありがとうございました.



945 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:33:50 ]
>>944
というか、そもそもLisp族での回答が出てないじゃないか。

典型的なパターンだと、ディレクトリを探索する手続きに、
ファイルごとの処理を行う手続きを渡すのがLisp的だと思う。
文字列のマッチングとかは、SREとかPEGとかあるけど、
特別Lisp的に、ってのは無いんじゃない?

946 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 03:30:51 ]
まぁ、質問が悪すぎたね。
物事を「無駄に難しく」解決したくてLispをやってる人なんて、
そう居ないわけだからさぁ。

947 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 05:04:52 ]
だが、SICPの日本語は無駄に難しい。

948 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 06:05:22 ]
質問者の頭が悪すぎた

949 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 07:46:32 ]
>>946
そうだったのか。おれは"物事を「無駄に難しく」解決したくてLispをやってる"と思ってた。
頭の体操のために開発された言語だと思っていたが間違っていたか。、

950 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 08:11:56 ]
まぁ、間違ってるね。
言語としてのLispは、ラムダ算法の表現法として開発されたのであって、頭の体操の為ではないし、
「頭の体操」が主に指向するのは、物事を「無駄に難しく」解決することではなく「美しく」解決することだし、
(その美しさを理解or表現する力を身につけるのが「難しい」ということはあり得るけど)
句点のあとに読点つけるのは、正式な日本語としても、2chによく見られる崩しとしてもおかしいし。

951 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 08:38:17 ]
「。、」 は

↓こんな風に落ち込んでる人の顔文字だと解釈した。
。、
-



952 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 09:21:18 ]
>>950
読点消し忘れたからってそんなに喜ぶなよ。
ラムダ算法の表現法として開発されたということはラムダ算法に無縁の人には
いらない言語ということか納得できる答えだ。頭の体操の定義はおいといてい
らない人には頭の体操以外のなんでもない。

953 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 09:38:13 ]
> 言語としてのLispは、ラムダ算法の表現法として開発されたのであって、

リスト処理用の言語として作られたんであって、ラムダは用語以外関係ない。


954 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:25:17 ]
>>952
何をムキになって、相手の言葉からできるだけ相手が辿り着いて欲しく無さそうな結論を見出す
中二病っぽいクソゲーを頑張ってるのかわからないけど、
最初に開発した人の目的なんて、その後の人々にはそこまで関係のあるものではないよ。
Unix開発したい人だけがCを使うわけでもなし。

955 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:27:58 ]
あと、「いらない人には」って条件つけちゃったら何でもアリだよな。
板チョコから人命まで、「いらない人には価値を見出すことができない」のは共通でしょ?

956 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:33:29 ]
あなたもわざわざ構いなさんなw

957 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:35:21 ]
>>953
リスト処理用のFORTRANライブラリとして歩みだし、
ラムダ算法の表現を模索するうちにプログラミング言語となった。
といってもそれほど間違ってないと思う。

958 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:44:41 ]
>>956
でも、そんな長くない文章でかなり凄いこと言いまくってて、つい反応してしまうだろうこれはw
「Xの定義はおいといて、X以外のなんでもない」って物言いも、かなりキてるし。
「頭の体操のために開発された言語」という話を「いらない人には頭の体操」まで一気に前線下げて、
それを鼻息のパワーアップでカバーしようとしてるのも、えらくシュールだし。
なんか変な資質あるぞ、この子w

959 名前:929 mailto:sage [2009/07/26(日) 10:55:16 ]
なるほど,Lispにとってこういう問題は難しいのですね.
Lisperと名乗る人も身近なものにはLispを使わない.
ググったところで教科書の写経をするページしか見つからないわけですね.


960 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:12:44 ]
おれがよく行くアニメ系板ならわんさかこーゆーのいるけど。

>>959
Lispに限らず他言語のスレ行っても「ファイラでやれ」「シェルでやれ」って反応が殆んどだと思うが。
あーでもrake使ってエロ画像整理とかはやってる人が稀にいるかもしれん。

正しく道具を使い分けるよう心がけてる人が多いのはどの辺だろうねぇ。

961 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:14:52 ]
ttp://evalwhen.com/pregexp/index.html
正規表現も自前で実装するのが Lisp クオリティ



962 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:27:59 ]
リストのリストをソートする機会があったので
(define a '((0 1 2) (0 2 1) (1 0 2) (1 2 0) (2 0 1) (2 1 0)))

C++のSTLみたく
こんなのを書いてみたんだけど
(define (listpred pred a b)
(cond ((or (null? a) (null? b)) #f)
(else
(if (or (pred (car a) (car b)) (pred (car b) (car a))) (pred (car a) (car b))
(listpred pred (cdr a) (cdr b))))))

(sort a (pa$ listpred <))
(sort a (pa$ listpred >))
こういうのって既にあったりします?
それか既存の関数の組み合わせでもっと楽に作れたりしませんかね


963 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:31:45 ]
あ、比較関数をリスト用に合成するのだからこっちのほうがいいですね
(define (listpred pred)
(lambda (a b)
(cond ((or (null? a) (null? b)) #f)
(else
(if (or (pred (car a) (car b)) (pred (car b) (car a))) (pred (car a) (car b))
((listpred pred) (cdr a) (cdr b)))))))
(sort a (listpred <))
(sort a (listpred >))

964 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:37:04 ]
>>959
どういう過程を辿ってそういう結論に至ったのかは知らないけど、
別に難しくもないし、身近な用途にも使ってるよ。むしろ身近にしか使ってない。
某ネ実ゲーの武器の性能計算したりとか、もう日常感たっぷり。

ネット見ると結構そういうのあると思うんだけどな。
ニコニコのコメント抜き出したり、WinampをSchemeで操作したりしてる人とかいたよ。

965 名前:929 mailto:sage [2009/07/26(日) 11:40:01 ]
> 正規表現も自前で実装するのが Lisp クオリティ
正規表現を必要としないのが Lisp クオリティと思ってた.

966 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:51:17 ]
>>916とかは正規表現では出来ない例
正規表現で出来ない問題を出せよ

967 名前:929 [2009/07/26(日) 11:58:49 ]
>>964
> >>959
> どういう過程を辿ってそういう結論に至ったのかは知らないけど、
> 別に難しくもないし、身近な用途にも使ってるよ。むしろ身近にしか使ってない。

はい,945の方がおっしゃってるように
ディレクトリを探索する手続きに,ファイルごとの処理を行う手続きを渡すというのは理解できるのですが
ここで正規表現って発想ではなくリードマクロを使って...てのを期待してました.



968 名前:929 mailto:sage [2009/07/26(日) 11:59:36 ]
>>966
> >>916とかは正規表現では出来ない例
> 正規表現で出来ない問題を出せよ

やりたいことはエロファイルの整理です.

969 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:04:17 ]
エロファイルの整理がしたいんじゃなくて
Lispのリードマクロを使った回答を知りたい、が正しいんじゃないの?

その目的なら>>930-931で回答が出てるんだから

970 名前:929 mailto:sage [2009/07/26(日) 12:10:38 ]
やりたいことは,エロファイルの整理
知りたいことは,シェルスクリプトなどで簡単にできる問題を lisp脳はどう考えるかです.

971 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:17:12 ]
シェルスクリプト使うよ



972 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:17:30 ]
(define (a x)
(let ((end (last x)))
(cond ((isalpha end) 'place_a)
((isnum end) 'place_1)
(else (error "tukareta")))))
(for-each a ero)
'placeの所はフォルダにおく処理

973 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:27:17 ]
>>970
rename.pl(1)使います。

974 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:32:52 ]
>>967
俺その>>945

リーダーマクロについて、何か勘違いをしてる気がする。
根本的に正規表現とは違う層の概念だよ。
独自の記法をS式にマッピングするだけ。

単に、正規表現以外の文字列のパターンマッチが知りたいのなら、
パーザコンビネータとかがそれ。上に出てるPEGとか。

975 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:56:46 ]
>>958
あなたには頭の体操は「美しく」解決しなきゃいけないのかそれともそうではないのか。
「美しく」とはどういうことかなどを定義されることをお勧めします。そしてその後レス
してください。

976 名前:929 mailto:sage [2009/07/26(日) 14:30:38 ]
>>974
> リーダーマクロについて、何か勘違いをしてる気がする。

いえ,理解出来ていないというか,誤解しているのでしょう.
だから,相手に対して勘違いをあたえる.

> 根本的に正規表現とは違う層の概念だよ。
> 独自の記法をS式にマッピングするだけ。

ディレクトリ(ファイル)名のリストを作る.そのリストを読み込む際,リードマクロを使って処理をディスパッチする.のかなぁって考えました.

> 単に、正規表現以外の文字列のパターンマッチが知りたいのなら、
> パーザコンビネータとかがそれ。上に出てるPEGとか。

文字列処理で正規表現使わない.リードマクロを使う.と言う発想じゃなくPEGを使うって発想するのですね.

977 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 14:44:38 ]
>> リーダーマクロについて、何か勘違いをしてる気がする。
>いえ,理解出来ていないというか,誤解しているのでしょう.

勘違いして理解してるから誤解だろ。

978 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 15:06:02 ]
>>976
リードマクロは表現をS式にマッピングする機能だって上で出てるだろうが。
書いてある表現のパースは必要なんだよ。
違う層の話が入り混じっててわけわかんなくなってるぞ。

979 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 15:20:13 ]
まあ確かにcfgやreは無駄に難しいから
素朴な再帰下降パーサーを高階関数とかで改良していこうという方針は正しい気がする

そして、Perlのような言語がそういう方針転換をするよりも
過去の成果物にとらわれないLispのほうが有利だと言えないこともない

980 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 19:08:54 ]
50以上レスが進んでるから何かと思えばずっと雑談か
暇だなおまいら

981 名前:デフォルトの名無しさん [2009/07/26(日) 19:53:39 ]
処理系何使ってるあたしはGauche。



982 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:40:58 ]
            /\___/ヽ
         /ノヽ       ヽ、
         / ⌒''ヽ,,,)ii(,,,r'''''' :::ヘ
         | ン(○),ン <、(○)<::|  |`ヽ、
         |  `⌒,,ノ(、_, )ヽ⌒´ ::l  |::::ヽl  
.        ヽ ヽ il´トェェェイ`li r ;/  .|:::::i |
        /ヽ  !l |,r-r-| l!   /ヽ  |:::::l |
       /  |^|ヽ、 `ニニ´一/|^|`,r-|:「 ̄
       /   | .|           | .| ,U(ニ 、)ヽ
      /    | .|           | .|人(_(ニ、ノノ

983 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:51:39 ]
テキスト処理を主体としたいわゆる「スクリプト言語」的な使い方をするなら Gauche はやはり強いよなぁ。
日本語の扱いをちゃんとしているところがよい。
Ypsilon なんかはやたら高速なのがよい。
まぁ、用途によるんじゃね?


984 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:58:51 ]
Gaucheとclisp、newlispを入れてる
newlispは簡単にwindow出せたりして面白いよ

985 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:30:14 ]
ベタで申し訳ないが、schemeの健全なマクロって必要なのか?
正直 ` , ,@ (gensym) だけのほうがスマートだし、変数捕捉されるのも考慮してこそマクロだと思うんだけどなぁ。
schemeの仕様作ってる人は何を心配してるんだろう。ユーザのこと心配してくれてるのかな。
(PGが人が使う用の為に作っちゃダメっていってたよ。)

986 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:30:36 ]
ノシ clisp

987 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:35:59 ]
不健全なマクロはきたない。健全なマクロのほうが美しい。

988 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:54:42 ]
` gensym を必要としなくなれば
シンボルやコンスが無い言語でもマクロが書けるようになるかもしれない

989 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:11:13 ]
>>985
モジュール化が絡んでくるとそう単純な話ではない。
scheme と CL ではスコープのルールも若干違う。
健全性に固執しすぎなのは確かかもしれないけど、
Scheme 的な一貫性のためには必要だと思うよ。


990 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:21:20 ]
>>985
scheme では同じ名前のシンボルは常に同じシンボルなので、
gensym では名前の衝突を本質的には回避できない。

991 名前:985 mailto:sage [2009/07/26(日) 22:28:07 ]
なるほど。今まで馬鹿みたいに「うは、ペアeval apply ぐるぐる最強!」とか思ってたけど、
ことはそう単純じゃないのね。もうちょっと精進するよ。馬鹿みたいなこといってごめんね。



992 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:09:19 ]
純粋さよりも簡潔さを重んじるSchemeとしてはそれこそ
シンプルな古典的マクロの上に保健的マクロを構築するアプローチのほうが合っていると思う
R5RSのなかでもsyntax-rulesは浮いているように感じる

993 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:46:52 ]
>シンプルな古典的マクロの上に保健的マクロを構築する

挫折した奴がここにおわす

994 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:52:29 ]
>シンプルな古典的マクロの上に保健的マクロを構築する

これをまじめにやろうとすると、言語の構文をほぼ全て上書きして
意味論を追加するってこと
LISPだから可能なんだけど
おれは挫折した

995 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:06:27 ]
シンプルさを保つべきだって考えと現実問題を解決するときに少々の汚れ仕事を請け負っても良いの2派閥の間の溝だからなぁSchemeとCommonLISP


996 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 05:59:54 ]
>シンプルな古典的マクロの上に保健的マクロを構築する
Alex Shinn さんの chibi-scheme がそういうような方向性かな
Syntactic Closure の上に Explicit Renaming と Syntax Rules を実装してる
Syntax Rules はまだ動いてないところもあった気がするが
ttp://synthcode.com/wiki/chibi-scheme

997 名前:デフォルトの名無しさん [2009/07/27(月) 08:13:36 ]
CommonLisp(笑)、Scheme(笑)

これからはF#の時代だからwww

998 名前:デフォルトの名無しさん [2009/07/27(月) 08:23:37 ]
名前に#が付く言語ってwindows以外のOSで動くの?


999 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 08:32:57 ]
Monoでそれなりには動くらしいよ
使ったことないからよく知らんけど

1000 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 09:25:26 ]
SML#があるじゃん

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<254KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef