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

528 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 22:30:15 ]
>>525
あきらめるってのが良くわからないけど(まるでこのスレを起点に何かを動かすつもりだったみたいな)、
試しにそういう動作をするマイLispを作って遊んでみたらどう?
で、使ってみたらこんな感じだった、って報告を後日改めてここに書き込むとか。

529 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 01:27:38 ]
>>525
例えば psyntax には pure Scheme な quasiquote の実装があるから
眺めてみるといいんじゃない
ttp://www.cs.indiana.edu/chezscheme/syntax-case/

530 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 03:53:44 ]
>>526
その人とは違うよ。
>>528
そうだね。マイLisp作れたら面白そうだ。
汚いやり方でも少なくとも俺には合ってるからね。
俺がSICP読み終える頃には楽勝で実装できるんだろ、きっと。
>>529
quasiquoteは100行くらいか。
syntax だけじゃ多分無理だけど参考にするわ

531 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 04:23:16 ]
quasiquote って効率を考えずに実装するだけならば外側から順に再帰的に
consとappendに展開するマクロみたいな感じですむからそんなに難しくないと思う。

`@,で展開するのはもはやquasiquoteとは別の文法を導入しているような気が。
別にあっても悪くはないと思うけどもこれだけだと単なるapplyの中置演算子版みたいだし、
特殊な文法用意するのはlispらしくないし別にapplyつかえばいいじゃんということな気がする


532 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 04:49:20 ]
>>530
SICP読破を目指して本ばっかり読んで頭でっかちになるより、ちゃんと手を動かして
コードを書きつつ試行錯誤して正しい理解を身につけてほしいと思う今日この頃。
べつにトンチンカンなことを言ってスレを賑わすのが悪いと言ってるんじゃないだが、
本に書いてある意味論以外に、コードがどういう流れで処理されて実行結果に
たどり着くのかという流れを理解してから物を言った方がいいよ。

それとquasiquoteのオレサマ実装ぐらいSICPなんて読まんでもHaskellの48時間で
書くやつで誰でもできると思うけど。

533 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 06:56:16 ]
SICPは量は多いかもしれないが難解ではないよ。
本当に難しくなるのは、SICPで扱っていない枝葉末節が絡んできた時。

534 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 07:53:23 ]
しかしapplyも変な仕様だよな。
Schemeも同じ仕様なのはどういうわけだろ。
(append (list arg1 ...) args)をas isにすれば、
コンパイル時に余計なコンスセルを消費しないのは確かだけど、
余計なお世話のような気がする。
便利主義の昔のLispはまあいいとしても。

535 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 09:08:38 ]
彼は高校生くらいだろ
気持ちわかるよ
俺も滝に打たれるような気持ちでアセンブラ書いてた時期があったから
これが済んだらスーパープログラマーになってるはず、みたいなw
まあ無駄にはなってないけどさ

536 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 19:15:53 ]
codepad.org/g2dULeuu



537 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 21:16:20 ]
ふつう48時間かかるものが、
枝葉末節を知っているだけで生産性が100倍以上になるわけだ。

538 名前:530 mailto:sage [2009/06/16(火) 22:10:10 ]
>>536
おー、`,@ で展開ができるよ! ありがとう、面白い。>>512もできた。
mzsceme は #%app で関数実行の前に細工ができるのか。
#mzscheme よく分からないけど (require m) は (require "filename") だよね。

539 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 11:53:24 ]
>>538
モジュール名

540 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 12:42:36 ]
悪い意味じゃなくて、Gauche本がSchemeの全て
な人が増えた気がする。


541 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 12:52:39 ]
初学者に読んで貰うような本が出たら、
それしか読んでない人が増えるのは当たり前だわな。
アホですか?(悪い意味ではなく)

542 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 14:18:14 ]
それしか読んでない≠それを全てと考える
なはずなのにそれがイコールで結ばれじゃう単細胞が多いってこと

543 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 14:54:56 ]
maximaのコードを高速化したい
compileでcommon lispに変換はできる
それをschemeで動くようにしてstalinで実行が一番高速なんだろうか

544 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 17:39:23 ]
YpsilonとStalinってどっちが速いの?

545 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 17:39:48 ]
stalinに決まってるだろボユゲ

546 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 17:40:58 ]
>>543
生きている間にコンパイル終らないよ



547 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 18:32:53 ]
stalin自身を高速化したいときはどうすんの

548 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 19:22:23 ]
最適化をしないようなオプションを設定する(本末転倒)

549 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 19:22:41 ]
stallinを動かすマシンを高速化する

550 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 21:35:45 ]
Gauche本は参考文献を示していない。

551 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 23:27:27 ]
>>550
だから?
別に気にするところじゃないだろ。

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 ]
そういうネタだらけでスレが埋まってしまうのは困るけど
閑散としている時のネタとしてはアリじゃないかな






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

前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