[表示 : 全て 最新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)

552 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 09:17:07 ]
君も気にし過ぎでは。

553 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 03:28:11 ]
schemeからcommon lispへのtranslaterはないみたいだけど
逆はあった.

common lispからschemeに乗り換えて見ようかと思うんだけど
大幅に違うのは継続ぐらい?

554 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 03:32:06 ]
practical-scheme.net/wiliki/wiliki.cgi?Scheme:マクロ:CommonLispとの比較:意味論

555 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 06:53:11 ]
>>553
Lisp-1とLisp-2の違いとか、結構色々違いがあると思うけど。

556 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 09:16:29 ]
専ブラからだったら「リンクをコピー」でないと
practical-scheme.net/wiliki/wiliki.cgi?Scheme%3a%e3%83%9e%e3%82%af%e3%83%ad%3aCommonLisp%e3%81%a8%e3%81%ae%e6%af%94%e8%bc%83%3a%e6%84%8f%e5%91%b3%e8%ab%96

557 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 16:50:46 ]
オレオレlispを作ってみたいのでちょっと質問

schemeでは#fのみが偽だそうですが
Common lisp使いから見たらこれはどうなんでしょうか

なんとなく、#fと()がどちらも偽のほうが使いやすそうには思いますが
問題になるケースがあったりするのでしょうか?

558 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 16:57:35 ]
型チェックを厳しくしたいか、
(not-empty? x)の代わりにxが書ける簡便さを選ぶかの違い。
あなたのセンスで決めてOK

559 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 16:59:08 ]
オレオレlispならいいけど、オラオラschemeを目指す場合、
意味が変わるので既存のschemeのコードがそのまま動かない
問題になるのはそれぐらい
既存のコードがきっちり動くってのはそれだけで楽しいから
昔scheme作った時泣く泣く準拠させたよ
中途半端はよくないと思った

560 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 17:10:24 ]
なるほど。
作りたいのはオラオラschemeに近いので
とりあえず#fのみにしとくのが無難そうですね
ありがとう



561 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:19:05 ]
>>559
それschemeじゃなくなっちゃうよ、Schemeみたいな俺Lispだよ

Schemeを名乗るならRnRSに準拠しないと。
Lisp属を名乗るだけならなんでもいいけどさ。

;;;; commonlispを名乗ると完成するまで大変過ぎる


562 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:49:08 ]
変なのきた

563 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:50:30 ]
SchemeはRnRSにあらず
RnRSからSchemeが生まれたんじゃなくて
RnRSは後からできたわけでしょ?
他人に使わせることや複数人で開発することがあるとすれば
規格準拠にしたほうがいいに決まっているけど

564 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:55:20 ]
すみません、質問させてください
木構造のmapのiter版って作れるんでしょうか

なんとかこんなのを書いてみたんですが、flattenされてしまってます
(define (tmap f t)
(define (aux f t r)
(cond ((null? t) r)
((not (pair? t)) (cons (f t) r))
(else (aux f (cdr t) (aux f (car t) r)))))
(reverse (aux f t ())))

(tmap (lambda (x) (* x x)) '((1 2) (3 (4 5))))
;こうなって欲しい
'((1 4) (9 (16 25)))

565 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 23:37:10 ]
(define (tmap f t)
(cond
((pair? t)
(if (pair? (car t))
(cons (tmap f (car t)) (tmap f (cdr t)))
(cons (f (car t)) (tmap f (cdr t)))))
(else t)))
こうかな
>(tmap (lambda (x) (* x x)) '((1 2) (3 (4 5))))
=>((1 4) (9 (16 25)))

566 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 00:08:38 ]
lisp/schemeでリファクタリングしてると、時間があっという間に過ぎてしまうんですが、同じ
経験をしている人いますか?

567 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 03:30:41 ]
>>564
(define tmap (lambda (f x) (if (pair? x) (map (cut tmap f <>) x) (f x))))

568 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 06:12:44 ]
>>564
普通に書くと再帰が二カ所あるので、単純な繰り返しにはできない
末尾呼び出し版でよければ、CPSでこんな感じ

(define (tmap f t)
(define (aux t cont)
(cond ((null? t) (cont t))
((not (pair? t)) (cont (f t)))
(else (aux (car t)
(lambda (r1)
(aux (cdr t)
(lambda (r2)
(cont (cons r1 r2)))))))))
(aux t values))

569 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 06:44:58 ]
>>564
(define (tmap f t)
(define (aux f t r s)
(cond
((null? t)
(if (null? s)
(reverse r)
(aux f (caar s) (cons (reverse r) (cdar s)) (cdr s))))
((not (pair? t))
(if (null? s)
(f t)
(aux f (caar s) (cons (f t) (cdar s)) (cdr s))))
(else
(aux f (car t) '() (cons (cons (cdr t) r) s)))))
(aux f t '() '()))

570 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 07:00:57 ]
On Lispに書いてあるみたく継続使ってもいいよね。



571 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 07:21:29 ]
リストの入れ子ならともかく
木構造ならcdrも'()でもpairでもない場合があるだろ。


572 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 07:54:59 ]
二分木ならともかく
木構造なら子が3個以上の場合があるだろ。

573 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 08:23:16 ]
どちらも矛盾しないお

574 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 08:45:26 ]
571は572を包含するが、逆はムリ。
Lispの汎用的な処理で木構造といえば普通は571の方の定義。copy-treeとか。
www.lispworks.com/documentation/HyperSpec/Body/26_glo_t.htm#tree
これはCommon Lispだけど、Schemeがこれに異を唱えるという話も聞かない。

575 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 08:50:36 ]
ただし564はそれを意図したものではないと思われる。

576 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 09:10:45 ]
ローテク版。アルゴリズム的には一番簡単?
(define (tmap func tree)
(cond ((null? tree) '())
((pair? tree) (cons (tmap func (car tree)) (tmap func (cdr tree))))
(else (func tree))))


577 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 09:49:16 ]
この場合はどうする?
(tmap null? '((() 2) (3 (() 5))))
;こうなって欲しい
((#t #f) (#f (#t #f)))

578 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 10:26:36 ]
(branch (leaf 1) (leaf 2))みたいにタグをつけないと
(leaf ())と(branch)の違いが曖昧になるね

579 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 10:36:43 ]
>>576 末尾再帰のものも、最初はそういうのから始めて継続渡しに変換して作る。
練習がてら、やってみたら。
(define (tmap f t)
  (let loop ((t t) (r '()) (s '()))
    (if (pair? t)
        (if (list? (car t))
            (loop (car t) '() (cons (list (cdr t) r) s))
            (loop (cdr t) (cons (f (car t)) r) s))
        (if (null? s)
            (reverse r)
            (let ((st (list-ref (car s) 0)) (sr (list-ref (car s) 1)) (s (cdr s)))
              (loop st (cons (reverse r) sr) s))))))

>>577
carに現れる'()を要素とみるか空ノードとみるかの違い。
上の関数は4行目の list? を pair? にかえるという実にそのものの変更で所望の動作に。

580 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 23:06:49 ]
(quote ())と(#%app)の違い。



581 名前:564 mailto:sage [2009/06/22(月) 23:39:28 ]
みなさん色々ありがとうございました。
>>567はとても短いし
>>568はすごく参考になります
主に>>568を参考に、
>>571>>577のケースも含めて動くものを書いてみました。

(define (tmap f t)
(define (aux t cont)
(cond
((and (pair? t) (null? (car t)))
(aux (cdr t) (lambda (r) (cont (cons (f (car t)) r)))))
((null? t) (cont t))
((not (pair? t)) (cont (f t)))
(else (aux (car t)
(lambda (r1)
(aux (cdr t)
(lambda (r2)
(cont (cons r1 r2)))))))))
(aux t values))

以下のパターンで動きます
(tmap (lambda (x) (* x x)) '((1 2) (3 (4 5))))
(tmap (lambda (x) (* x x)) '((1 . 2) (3 (4 . 5))))
(tmap null? '((() 2) (3 (() 5))))
(tmap (lambda (x) (* x x)) ())

582 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 00:59:09 ]
ドットペアについては方針が分かれるよな
リスト表現としてのツリーを普段どう見てるか
・対応する →初心者
・無視する →中級車
・エラーにする →高級車


583 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 01:43:54 ]
car だけに

584 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 01:46:36 ]
クダーらないギャグを言うなよ。

585 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 01:48:47 ]
てめーもクッダらねーぞ

586 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 01:52:39 ]
こんな時だけ加速するなw

587 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 02:20:07 ]
carだけに

588 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 04:51:56 ]
ヌルポ

589 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 04:20:36 ]
Structural Operational Semantics
tinyurl.com/lv4dzf

590 名前:576 mailto:sage [2009/06/25(木) 07:06:29 ]
時間ができたので継続渡しの再帰版を書いてみた。
もう>>564氏のカタはついたようだが、すこしだけ短くなった気もするので
エロイ人からの突っ込みを期待して書いておくことにする。

(define (tmap f t)
(define (tmap-cps f t cont)
(cond ((pair? t) (tmap-cps f (car t)
(lambda (x) (cont (cons x (tmap-cps f (cdr t) values))))))
((null? t) '())
(else (cont (f t)))))
(tmap-cps f t values))



591 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 12:17:36 ]
つ ((null? t) (cont t))
tmap-cps自体を関数として使うつもりがあるなら
内部でvaluesを決めうちしちゃだめよ

592 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 13:08:42 ]
>>590
次はクロージャを使わずに継続をスタックで表現してみよう

593 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 13:22:41 ]
>>590
>(cont (cons x (tmap-cps f (cdr t) values)))
部分式の値は一時変数に入れてから使う。
(tmap-cps f (cdr t) (lambda (y) (cont (cons x y))))

本当は
(cdr-cps t (lambda (d) (tmap-cps f d (lambda (y) (cons-cps x y cont)))))
と書きたい。

en.wikipedia.org/wiki/Continuation-passing_style
>The key to CPS is to remember that
>(a) every function takes an extra argument, its continuation, and
>(b) every argument in a function call must be either a variable or a lambda
>expression (not a more complex expression).

594 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 09:08:05 ]
GIMPのscript-fu (基本的にR5RS準拠) では
真偽値 #t, #f とは別に TRUE, FALSE の定数が用意されています。

標準のダイアログで真偽値を受け取ると TRUE, FALSE で受け取ってくるので
条件判定を

(if (= flag TRUE) 処理)

と書かなければいけないのですが、マクロなどを使って

(if flag 処理) と書けるようにするにはどうすれば良いでしょうか?

595 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 10:09:07 ]
>>594
うちのWindows上のGIMP 2.6.6でマクロを評価すると、
Script-Fuコンソール固まるから詳しいことは言えないけど、
hygienicじゃない伝統的なマクロは使えるみたいだから、

(define-macro (dialog-if test then . else)
`(if (= ,test TRUE) ,then ,@else))

みたいなのでいいんじゃないか。

最悪、マクロ使えないなら、他の処理系でS式変換すればいいと思う。

596 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 10:19:17 ]
再帰を全て末尾再帰に変形する手続きとか論文のネタになってそうなものだけど
どなたかご存じない?

597 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 10:22:21 ]
CPS?
foldrとfoldlの双対性?

598 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 11:22:23 ]
>>595
GIMP2.6.5で試したところ期待通りの動作になりました。
ありがとうございます。

599 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 23:44:46 ]
最近思うこと
schemeはカリー化を言語組み込みでサポートしたほうが
シンプルになるように思うんだけど
今からそんなことをせずともpa$もcutもあるわけで
R6RSはすでに十分実用的になってしまった感がする

R5RSまでのシンプルさのが、良いなぁ

600 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 11:04:33 ]
前にも言ったけどね
R5RSのマクロはcons, quote, quasiquote, mapなど一切使わないで書けるよ
という意味でLisp界にとって危険な存在だからね
黒歴史ということにしたい人もいるだろう



601 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 13:10:18 ]
カリー化って引数の並び順に依存するから
そのままだとあんま便利とは思えない。
名前付きのキーワード引数をサポートして
オプションを固定化するために使えればいいけど。
(define (http cmd host port url auth ... )〜)
(define htttpa (http :host "192.168.10.2" :auth ""))
(httpa :cmd "GET" :port 8080 :url "/")

でも引数全部埋めないと実行できないから不便か


602 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 14:40:01 ]
引数を全部埋めるってのはデフォルト値の提供で解決するが
しかし、どちらにせよ名前付き引数は嫌いだなぁ
5引数あって3引数埋めたら
2引数の:hoge :fugaを埋めたら使えるカリー化関数になるが
これってつまるところ、structuralに型がついた関数なわけで
ちょっと息苦しい

大体、引数が2個か3個の関数は多いし
引数の順番を入れ替えるのは3引数のflipみたいなのを使えばよくね
(map (- 1) '(1 2 3))
(map (flip - 1) '(1 2 3))

603 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 15:53:12 ]
>>602
うん、だからカリー化って意味ねーなと思って
つーかカリー化前提でデフォルト値の提供ってどうすんの?

そもそも引数たくさんあるような関数なら
自力でmake-httpみたいなパラメータ固定化手段を用意するだろうし


604 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 16:00:44 ]
足し算とか、引数の性質が簡単なやつならカリー化もいいけど
引数に値と関数を取るようなやつとか、
関数をいくつも引数にとって関数を返す関数なんかをカリー化したら
保守できなくなりそうだよ

>>599
試しに作って公開してみてよ

605 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 17:09:16 ]
カリー化はS式にターメリックやらスパイスを使えばいいよ

606 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 17:43:41 ]
それ何て

607 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 19:54:04 ]
ここできいて良いかわからないですが
gauche-glをcygwinで動かせた人います?

608 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 20:35:17 ]
やったことないけど出来るはず。
ちなみにMingwでは出来た。

609 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 21:07:16 ]
cygwinで0.8.13では動いたよ
0.8.14ではなんかしらんがコケた

610 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 21:16:31 ]
OpenBSDでguile-1.9.0のビルドがコケるんでソースを追ってみたんですが
guileもboehm-gcを使ってたって知りませんでした
それも5.2とか古いver
よく今まで動いてたなとゾッとしました(メジャープラットフォームでは問題なかろうけど)
Changes in 1.9.0を読んでかなりワクワクしながらビルドしたんですけど
コケるんで萎えて放置中
偶数版リリースまで待ったほうがいいのかなぁ
1.8までのプラットフォームでちゃんと動くようになれば2.0はかなり期待大



611 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 17:15:24 ]
>>608
これを聞いて、mingwのインストールからやってみましたが
私には無理でした。gauche-glのmakeで失敗します
具体的には(home-directory)が#fを返すためにそこでmakeが止まります
gaucheのmingwでのビルドでは全てのテストにパスしていない
(make testは9050/9067 pass)のが原因かもしれません

cygwinは全然だめで
./configure --includedir=ほげ --oldincludedir=ふがを
windowsとcygwinのパス表示で色々試しましたが
GLUT/glut.hどころか、Cのヘッダ(sys/types.h等)も
configureでnoになります。
(gaucheのインストールでは普通にyesになります)
なお、glut自体はcygwin/windowsで動作確認済です

Gauche-boxの存在にその後気づいてインストールしたのですが
バイナリ配布されているgauche-glは
リンク切れになっていました
なんでもいいのでwindows環境でgauche-glが使いたいのですが
バイナリ配布してる箇所って、他にないですかね・・

612 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 17:19:58 ]
ほげとふがをわはとむすにすればうまくいくかもしれない。わけない。

613 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 19:42:22 ]
>>611
saito.s4.xrea.com/?Gauche

614 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:26:25 ]
>>613はリンク切れ

615 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 21:05:08 ]
>>614
悪い
今再Up中だからちょっとまってくれや

616 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 21:08:26 ]
>>614
準備出来たでー

617 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 21:14:09 ]
>>613
どうやってビルドしているんだろうか。詳しい手順が知りたい。


618 名前:611 mailto:sage [2009/06/28(日) 21:39:27 ]
>>616
再アプ乙です!!
今、gauche-glの動作を確認しました
これで思う存分図形言語で遊べる、ありがとう

619 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 01:04:48 ]
>>617
忘れた。
でも、ひっかかったのはしょーもないことばっかりだった気がする。
ひっかかったところをそのつど修正すればだいたいいけるよ。
もしかしたら Gauche 自体もちょっとは弄ったかもしんない。

620 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 01:16:01 ]
>>618
Cygwin でなくてよかったんかい?
Mingw でビルドした Gauche はいくつかの機能が使えないよ。
重大なのはプロセスとスレッド関連くらいだけど。



621 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 14:53:46 ]
問題ない
窓使いでcygwin版を使いたがる人は少ないはず

622 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 14:37:48 ]
schemeをさらにシンプルにしようと思って
こんなのを考えてみたんだけどどう思う?
consセルだけのほうが
()について非対称なリストよりもシンプル

;consセル版fold
(define (cfold f a b)
(cond ((not (pair? b)) (f a b))
(else (cfold f (f a (car b)) (cdr b)))))
(define (cfold1 f lst) (cfold f (car lst) (cdr lst)))

;reverseがリストよりもシンプルで効率的に(appendなしで)書ける
(cfold1 (lambda (x y) (cons y x)) '(1 2 . 3))

;このままだと、「空」が表現できないので
;consを仮にこんな風に定義してみる

;()なら無視するcons
(define (conss x y)
(cond ((null? x) y)
((null? y) x) ;片側だけのほうがよいか?
(else (cons x y))))

;末尾に()がないと思っても良い
(cfold (lambda (x y) (conss y x)) () '(1 2 . 3)) ;←これを言語レベルで'(1 2 3)と表記
(cfold (lambda (x y) (conss y x)) () '(1 2 3))

623 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 14:41:18 ]
「リストを末尾の要素に持つリスト」はどう表現するの、それ。

624 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 14:49:58 ]
普通に'(1 2 (1 2))という感じです
(cfold (lambda (x y) (conss y x)) () '(1 2 (1 . 2)))
(cfold (lambda (x y) (conss y x)) () '(1 2 (1 2)))

ただ、空リストからなるリストは表現できないので
これは不備だなぁ
conssを片側だけにしてもreverseは動かないし

625 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 15:01:49 ]
ああ、言ってる意味がわかった
(cdr '((1 2)))が()だから今動いてるけど
そうじゃなかったら動かないですね
そういう意味ではリストの末尾は必ずatomじゃないとダメになるから
これじゃダメだ

626 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 21:12:08 ]
ボクの考えた最強のLISP(Scheme)!
ってネタは尽きないよな
気持ちは判るが、妄想垂れ流す前に一度それで組んでみろよ
>>622みたいなのはすぐ作って確認できるだろ
どう思う?って、俺はまたキチガイかと思ったよ

627 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 21:46:01 ]
>>626
作らない奴はクソだ,と思っているんだろうけど,
設計は設計で,そっちも大事だと思うぞ。
全部作ってみろで返すのはひどい。

628 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 21:57:45 ]
そういうネタだらけでスレが埋まってしまうのは困るけど
閑散としている時のネタとしてはアリじゃないかな

629 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 00:05:48 ]
S式を2分木として見ればどうやっても歪に見える

ドットペアを含むリスト(1 2 . 3)は
 /\
1  /\
  2   3

リスト(1 2 3)は
 /\
1  /\
  2  /\
    3   nil

主観ではcdrがconsかnilに統一されてる後者の方がシンプルだと思う
前者はcdrがatomという可能性をいつも意識するからハゲそう


630 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 02:24:46 ]
竹内先生の入門本が増補改訂版で出るらしいんだが、
Schemeなのかな。CLなのかな。



631 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:28:58 ]
ICFPのプログラミングコンテスト、Steele兄貴の招待講演が
Organizing Functional Code for Parallel Execution: or, foldl and foldr Considered Slightly Harmful
ってなってるが、foldは悪なのだろうか
内容が気になるな

632 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:51:32 ]
foldじゃなくてl or rだよ。
シーケンシャルなのを問題にしてるんでしょ。

>>630
これかな?
www.amazon.co.jp/初めての人のためのLISP-ソフトウェアライブラリ-3-竹内-郁雄/dp/4781904548
特定の言語を対象としている本じゃないよ。このスレのように。
トピックスが増えるんじゃないのかな。

633 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 10:04:34 ]
演算がmonoidalならfoldも並列化できる

(x + y) + z = x + (y + z) { associative }
x + e = e + x { unit }

x + (y + (z + e)) = (x + y) + (z + e)
(((e + x) + y ) + w) = (e + x) + (y + w)
ちなみにこれはfoldlからfoldrへの相互書き換えが可能になる条件でもある

多分この辺がslightlyに留まる理由で、
結論としてmonad最高!!ってな流れになったりならなかったりという予想

634 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 10:26:36 ]
>>632
HMVはお取り寄せ可能になってる。
www.hmv.co.jp/product/detail/3608319
発行年月 : 2009年06月
出版社 : 翔泳社

seshop.com/には載ってないが


635 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 12:14:49 ]
予約受付中?
www.bk1.jp/product/03125439

636 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 16:08:20 ]
>>633
wじゃなくてz使ってよ、気色悪いw

637 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 18:41:29 ]
うはxxxxxxxxxおkxxxxxxxxxxxxxxxx

638 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 18:59:01 ]
>>634
書店の人が出版社に確認してくれた。当初予定より遅れて
平成21年12月2日だそうだ。楽しみだね。

639 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 23:15:22 ]
>>638
\(^o^)/

640 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 00:05:29 ]
入門Gaucheで勉強してるけどp64から急に難しくなってきたぜでもがんばるぜ



641 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 00:07:24 ]
LittleSchemer読もうぜ

642 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 00:21:15 ]
>>641
ありがとうだぜさっそくポチるぜ。

643 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 02:43:14 ]
竹内センセの本が出るのか。それは全力で買いだ。

644 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 04:18:45 ]
一冊あれば十分だけどなw

645 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 04:55:07 ]
増補で付録とか付くんかな?
竹内先生の本は持ってるけど、記念で買おう。

646 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 05:50:44 ]
lisp本、wktkしてきたぜ。

647 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 06:20:20 ]
初めての人向けじゃなくって
もっと突っ込んだの書いて欲しいな


648 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 06:34:49 ]
竹内先生監修シリーズって感じで、5人ぐらいに書かせればいいんじゃねえ?

649 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 09:42:11 ]
Lispじゃないけどそういう感じの本あったよね。
意外と面白くなかったw
それより雑誌bitのTAOの連載を合本したら面白いのに。


650 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 10:45:35 ]
今思えば、ビューティフルコードは初心者に媚びない所だけはよかった
日本であれぐらい書ければ、もっちーがファビョることもなかっただろうに



651 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 18:26:23 ]
>>647
あの本は初心者向けの本じゃないよ。
Lispマニア向けの本だ。初心者が読んでもそれなりに楽しめるけど。

652 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 18:29:18 ]
LISPの本と思わずに、T先生と生徒のかけあいを楽しめばいいんだ。






[ 続きを読む ] / [ 携帯版 ]

前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