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


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

CommonLisp Scheme Part13



1 名前:デフォルトの名無しさん [2005/05/12(木) 21:44:01 ]
過去スレ
Part1: piza2.2ch.net/tech/kako/987/987169286.html
Part2: pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part3: pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part4: pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part5: pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part6: pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part7: pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part8: pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part9: pc2.2ch.net/test/read.cgi/tech/1069594582/
Part10: pc5.2ch.net/test/read.cgi/tech/1075630259/
Part11: pc5.2ch.net/test/read.cgi/tech/1091456033/
Part12: pc8.2ch.net/test/read.cgi/tech/1100229366/

関連リンクは>>2-10あたり

577 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 21:51:56 ]
複数引数の型を見て処理を割り振る話(メソッド・ディスパッチだっけ?)について。

多くのOO言語では、静的な解決しかできない。
総称関数ベースなら、呼び出された時の型を見て動的に処理を割り振ることができる。
これがメリット?

578 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 22:15:42 ]
>>577
マルチディスパッチと動的ディスパッチは一応別の問題だよね。
Smalltalkなんかはシングルの動的ディスパッチじゃないかな。
静的なマルチディスパッチの例としてはC++の関数や演算子ね。

579 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 22:20:22 ]
えぇ〜とLispのは、具体的なメソッド選択を明示的に書く仕組みだったと思います。(実使用体験0、80年代のbit記事受け売り)
ってな話だと、>>578とは違うんじゃないかなぁ〜。

580 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 22:39:20 ]
>>577
>多くのOO言語では、静的な解決しかできない。

んな事は無い

581 名前:577 mailto:sage [2005/07/12(火) 22:42:26 ]
>>580
そのとおり。
でも、引数を親クラスにキャストしてメソッド呼出したら、、、

582 名前:デフォルトの名無しさん mailto:sage [2005/07/12(火) 22:53:23 ]
何でキャストの話が出て来るんだよ
OO のモデルなんか趣味の世界だから、自分で使って勝手に判断すれば良い

583 名前:577 mailto:sage [2005/07/13(水) 00:00:29 ]
なんだぁ?ヴァカか。

584 名前:デフォルトの名無しさん mailto:sage [2005/07/13(水) 01:03:28 ]
では、そろそろ LISP の話に戻りましょうか

585 名前:デフォルトの名無しさん mailto:sage [2005/07/13(水) 02:14:15 ]
まとめると
総称関数だといくつかのクラスにまたがった複数引数をとるメソッドがかける
ってことか



586 名前:デフォルトの名無しさん mailto:sage [2005/07/14(木) 15:03:45 ]
SICPの5.4 The Explicit-Control Evaluatorで、
> Our Scheme evaluator register machine includes a stack and
> seven registers: exp, env, val, continue, proc, argl, and unev.
とあるのですが、unevという名前の意味や由来は何なのでしょうか?
他のものは一目瞭然なのですが、unevだけ全く見当がつきません。

587 名前:デフォルトの名無しさん mailto:sage [2005/07/14(木) 15:09:51 ]
>>586
unevaluated (未評価)かな?

588 名前:586 mailto:sage [2005/07/14(木) 19:58:40 ]
>>587
なるほど!
確かに「後で評価する式を格納しておく」という使い方をされてますから、
それで正解だと思います。ありがとうございました。

ああすっきりした! 今日は気持ちよく眠れる!

589 名前:デフォルトの名無しさん [2005/07/22(金) 14:37:51 ]
xn(n ∈ N)は,次のように再帰的に定義することができる.

xn = xm×xm (n = 2m,m >= 1)
= x×xm×xm (n = 2m+1,m >= 0)
= 1 (n = 0)

これを利用して,xnを計算する2引数関数pow2を定義せよ.なお,再帰呼び出しの回数をできるだけ減らすようにすること.

これ教えてもらえませんでしょうか…
解答例をお願いします。。。

590 名前:589 [2005/07/22(金) 14:41:15 ]
あぁ、書き忘れ。schemeです。

591 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 15:03:50 ]
夏休みの宿題くらい自分でやれ


592 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 15:27:50 ]
「できるだけ」ってのがひっかかるな。

593 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 15:39:49 ]
どうしてもループに直せないおバカ救済用じゃね?


594 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 15:55:59 ]
Lispもschemeもうぜえええええええええ

595 名前:589 [2005/07/22(金) 16:02:10 ]
出来ないからこうして書いてるんです( ´,_ゝ`)



596 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 16:14:52 ]
出来ないなら教官に質問しにいくとかすれば?
出来ないことを色々考えて出来るようになるのが学生の仕事だろ?
ロクに考えもせずに答教えろとか言う奴は単位なぞ落としてしまえ。


597 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 16:36:44 ]
最近の小学校はScheme教えてるのか。すごいな。

598 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 18:16:05 ]
※しょうがくせいのみんなへ
・なつやすみのしゅくだいは、じぶんでやりましょう。

599 名前:?デフォルトの名無しさん mailto:sage [2005/07/22(金) 22:03:21 ]
Schemeの問題で
>再帰呼び出しの回数をできるだけ減らすようにすること
ってのはどんなんだろうね?
再帰をなるべく末尾再帰にしろってんならいいんだけど。

600 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 23:29:41 ]
x は関数または演算子なんだよね?x×(xm×xm)って、演算子と整数の
積なの?意味がわからない。

601 名前:デフォルトの名無しさん mailto:sage [2005/07/22(金) 23:43:50 ]
頭悪いのを披露するためだけにわざわざ横から出てきてごくろうさん。



602 名前:600 mailto:sage [2005/07/22(金) 23:45:57 ]
あ、問題を読み間違えていた。

603 名前:ビッケ ◆Jyl0Z1ahKc mailto:sage [2005/07/22(金) 23:52:54 ]
xnなどと書かれているのはベキ乗 x^n のことでしょう。

「再帰呼び出しの回数」については、設問中のベキ乗の定義を見ると
再帰呼び出しのネスティングの深さのことを言ってるのかも知れませんね。
その授業(?)でそういうことを扱った直後の演習問題とか。

「できるだけ」なんていわれても困るけど、設問中の定義に従って
ネスティングの深さがO(log n)となる定義を書けばOKということなのかも。

604 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:02:33 ]
ちゃんと自分の頭で噛み砕いて質問すれば親切な香具師は答えてくれる
かもしれんが、ここまで露骨に「宿題やって」だと誰も答えてくれんわな。

605 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:12:28 ]
これ、ループに直せるの?定義が再帰的だから、どうしてもループには出来ないや。
末尾再帰も無理っぽい。
結局、let (let*) で途中経過をまとめるぐらいしかできないよ。こまった。




606 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:19:22 ]
これ定義どおり実装するなら幼稚園児向けの問題で面白くもなんともないじゃん。
おまいら小学生ならもっと頭を使おうぜ。w

607 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:19:34 ]
(define (pow2 x n)
(let loop ((x x) (n n) (r 1))
(if (= n 0) r
(loop (* x x) (quotient n 2) (if (even? n) r (* r x))))))

608 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:33:24 ]
>>607
きれいだけど、定義から離れすぎてない?
漏れの頭では、>>589 の定義からは、これを自明には導き出せない…。

609 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 00:47:05 ]
>>607>>589 の定義と同値かどうかは興味深い問題だね。
"1" が "×" の単位元でない場合とか "×" が可換でない
場合とかを考えるとちゃんとした証明が必要かも。

610 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 01:58:59 ]
(define (pow2 x n) (apply * (vector->list (make-vector n x))))

611 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 02:10:26 ]
>>608
>>589 をそのまま実装すると
(define (pow2 x n)
(if (= n 0) 1
(let ((x1 (pow2 x (quotient n 2))))
(* x1 x1 (if (even? n) 1 x)))))
x^n * x^n = (x * x)^n だから
(define (pow2 x n)
(if (= n 0) 1
(* (pow2 (* x x) (quotient n 2)) (if (even? n) 1 x))))
末尾再帰に変換して >>607

612 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 02:30:33 ]
>>611
ありがとう。おかげで疑問点がはっきりしてきました。
x^n * x^n = (x * x)^n って、使っていいの?

我々は pow2 が累乗を返す関数だと知っているから、この変形は自然に見えるけど、
この問題で使っていいのは、あくまで
pow2(x, 2n) = pow2(x, n) * pow2(x, n)
pow2(x, 2n + 1) = x * pow2(x, n) * pow2(x, n)
pow2(x, 0) = 1
の3式だけではないんだろうか?


613 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 02:53:57 ]
なるほど、確かに
pow2(x * x, n) = pow2(x, n) * pow2(x, n) は自明ではないな。


614 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 03:24:59 ]
(define pow2 expt)


615 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 03:43:39 ]
>>612-613
pow2(x, 0) * pow2(x, 0) = pow2(x * x, 0) = 1
pow2(x, n) * pow2(x, n) = pow2(x * x, n) とすると
定義より pow2(x, n + 1) = x * pow2(x, n) (これも証明する?) なので
pow2(x, n + 1) * pow2(x, n + 1) = x * pow2(x, n) * x * pow2(x, n)
= (x * x) * (pow2(x, n) * pow2(x, n)) = (x * x) * pow2(x * x, n)
= pow2(x * x, n + 1)
以上から数学的帰納法により pow2(x, n) * pow2(x, n) = pow2(x * x, n)



616 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 05:11:48 ]
>>615
数学的帰納法を使ったら pow2 の一般項 =x^n だって証明できてしまうと思われ。
そもそも関数の再帰的定義とは数学的帰納法を機械にやらせることなのに、
それを人間がやってしまったら本末転倒ではないかと。

617 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 06:39:58 ]
ん? 元々 x^n を求める pow2(x, n) を定義せよって話でしょ。
x^2n = x^n * x^n
x^(2n+1) = x * x^n * x^n
x^0 = 1
となる性質を使えって条件があるだけで。

618 名前:デフォルトの名無しさん mailto:sage [2005/07/23(土) 10:34:49 ]
求める関数を pow2(x,n), s(x,n)=log_x pow2(x,n) とおくと、pow2 漸化式は次のようになる。

s(0,x)=0
s(2n,x)=2*s(n,x)
s(2n+1,x)=2*s(n,x)+1

ここまで見ると何となく s(n,x)=n になりそうな事が見えて来るが、
帰納法を使わず直観的に考えてみる。
s(n,x)の",x"を以後省略することとし、
nの2進表記を b_n...b_1b_0 とすると

s(b_n...b_1b_0)
=2*s(b_n...b_1)+b_0
=4*s(b_n...b_2)+2*b_1+b_0
...
=2^n*b_n+...+2*b_1+b_0

すなわち s(n)=n となる。
よって pow2(x,n)=x^n である。
故に>>614


619 名前:デフォルトの名無しさん mailto:sage [2005/07/24(日) 19:52:58 ]
でもってexptを高速化する手法の一つが今回の問題だったんでないかい?

620 名前:デフォルトの名無しさん mailto:sage [2005/07/24(日) 20:17:31 ]
ヒント:exptは浮動小数でも(略)

621 名前:デフォルトの名無しさん mailto:sage [2005/07/24(日) 21:58:13 ]
R5RS には (expt EXACT INTEGER) => EXACT とは書いてないから
(define (expt x n) (exp (* (log x) n))) な実装もアリ。
だから処理系に依存せずに EXACT ^ INTEGER => EXACT が欲しければ
自前で書くしかない。
Common Lisp だと (expt RATIONAL INTEGER) => RATIONAL が保証
されてるのに……

622 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 08:43:33 ]
>>621
ふが〜 おれ (expt 2 128) とかがEXACT INTEGERで正確に得られることを期待してコード書いてたけど、これ処理系依存になっちまうのか....いたいぜ。

623 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 08:53:40 ]
>>620
意味不明。(略)が(おれは無知です)の意味ならどうでもいいけど。

624 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 09:04:10 ]
expt は "Finally, the procedures listed below will always return
an exact integer result provided all their arguments are exact
integers and the mathematically expected result is representable
as an exact integer within the implementation:" の中にある。


625 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 10:30:53 ]
>>624 THX!



626 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 17:31:11 ]
エキスパートシステムで、たとえば「stop」と入力した場合、
強制終了させるにはどうしたらいいんですか?

627 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 17:32:57 ]
「stop」と入力されたときに強制終了すれば良いと思う。

628 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 17:37:21 ]
>>627
強制終了の仕方を教えてください

629 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 18:03:19 ]
>>628 期待した答えが返って来ないときは、質問のしかたが
間違ってる可能性が高いよ。

開発者なら、どういう言語のどういう処理系を使っていて、
どういう風に大域脱出したいのかを説明しないと。

けど、その前に近くにいる人に聞きなさい。それができない
なら電源をいきなり切ってボスに辞表を叩きつければ、仕事を
強制終了できるよ。


630 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 20:12:54 ]
人生を強s(ry

631 名前:デフォルトの名無しさん mailto:sage [2005/07/25(月) 20:15:08 ]
人生を強すぎる精神力で乗り切る。

632 名前:デフォルトの名無しさん [2005/07/26(火) 23:14:30 ]
>>623
exptは浮動小数でも動くから、pow2がexptを高速化するという命題は
常に成り立たないということだよカス。


633 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 01:54:37 ]
ところでpow2って掛け算の回数最小になるんだろうか?
証明できるor反例ある?


634 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 02:15:48 ]
3つ以上の項を一度に乗算する命令でも想定しない限りは自明だろう。
それくらい瞬間的にわからないというのはちょっとヤバイのでは。

pow2(x, n)=x^nについて考える。末端リーフがn個の二分木を考えてみろ。
二分木で高さが最小になるのはなるべく均等な木のときであることはわかるだろう。
その二分木の高さイコール乗算の回数だ。


635 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 02:42:10 ]
ごめん、大嘘でした。
>>634はnが奇数のときは2を掛けるから偶数のときで乗算の数が違う
ということを見落としてた。

(^ x 9) = (* x (let ((y (^ x 4))) (* y y))) => 6回
(^ x 4) = (let ((y (^ x 2))) (* y y))) => 4回
(^ x 2) = (let ((y (^ x 1))) (* y y))) => 3回
(^ x 1) = (* x (let ((y (^ x 0))) (* y y))) = x ;; ちょっと省略 => 2回

(^ x 7) = (* x (let ((y (^ x 3))) (* y y))) => 6回
(^ x 3) = (* x (let ((y (^ x 1))) (* y y))) => 4回
(^ x 1) = x => 2回




636 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 04:38:27 ]
>>633 乗算回数最小はこれでどうだろう? 最速かどうかは知らない。

(define (pow2 x n)
  (define (pow2-sub l m r)
    (if (= m 0) r
        (let loop ((l l))
          (if (> (caar l) m) (loop (cdr l))
              (pow2-sub (cdr l) (- m (caar l)) (* (cdar l) r))))))
  (if (= n 0) 1
    (let loop ((m 1) (two^prevm 1) (two^m 2) (r x) (l (list (cons 1 x))))
      (if (<= two^m n)
          (let ((rr (* r r)))
            (loop (+ m 1) two^m (+ two^m two^m) rr (cons (cons two^m rr) l)))
          (pow2-sub l (- n two^prevm) r)))))


637 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 04:45:26 ]
回数はこんな感じ。左から指数n、r=3^n、(expt 3 n)と比較しての検証、乗算の回数。
n=0 r=1 [OK] *-count=0
n=1 r=3 [OK] *-count=0
n=2 r=9 [OK] *-count=1
n=3 r=27 [OK] *-count=2
n=4 r=81 [OK] *-count=2
n=5 r=243 [OK] *-count=3
n=6 r=729 [OK] *-count=3
n=7 r=2187 [OK] *-count=4
n=8 r=6561 [OK] *-count=3
n=9 r=19683 [OK] *-count=4
n=10 r=59049 [OK] *-count=4
n=11 r=177147 [OK] *-count=5
n=12 r=531441 [OK] *-count=4
n=13 r=1594323 [OK] *-count=5
n=14 r=4782969 [OK] *-count=5
n=15 r=14348907 [OK] *-count=6
n=16 r=43046721 [OK] *-count=4
n=17 r=129140163 [OK] *-count=5
n=18 r=387420489 [OK] *-count=5
n=19 r=1162261467 [OK] *-count=6
n=20 r=3486784401 [OK] *-count=5


638 名前:デフォルトの名無しさん [2005/07/27(水) 13:21:00 ]
いきなり横レスですみません、超初心者です。こことSICPのスレは
とても勉強になるので感謝してます。上のアイデアというか原理は
たとえば 3^20 = (3^4)^5 = ((3^2)^2)^(2*2+1) で5回って意味でしょうか?
……うぅぅ凄すぎて式が追えないorz


639 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 20:58:21 ]
順番が前後するが
3^20=3^16*3^4 ... 1回
3^16=3^(2^4)=(((3^2)^2)^2)^2 ... 4回
3^4は3^16を求める途中で得られているので0回
合計5回



640 名前:デフォルトの名無しさん mailto:sage [2005/07/27(水) 23:36:31 ]
s/順番が前後するが/話が前後するが/


641 名前:デフォルトの名無しさん mailto:sage [2005/07/28(木) 00:25:58 ]
あほ





642 名前:デフォルトの名無しさん mailto:sage [2005/07/28(木) 22:57:26 ]
>>632
最初からそう書けよ。
相手する価値もないヤシだってすぐわかるからさ。

643 名前:638 [2005/07/29(金) 04:53:54 ]
>>639 レスありがとうございます。やっと SICP の1.2.4節に辿り着きました
mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.4
後半の改善策が >>589 と同じ例題で、
;nが偶数なら b^n = (b^(n/2))^2
;nが奇数なら b^n = b*b^(n-1)
解答も >>607 と似てました。これを使った乗算回数は、たとえば
3^20 = (3^10)^2 = ((3^5)^2)^2 = ((3*3^4)^2)^2 = ((3*((3^2)^2))^2)^2
で理屈上は>>636と同じ5回(でも実は末尾で余計に1掛けたりとかで、少し多そう)。
オーダーとしてはどちらも log2(n) で、>>634の話が実は正しいような気がしました
Orders of Growth を理解するための頭の体操とはいえ、疲れた…
まだ木構造リストの演算をきちんと勉強してないので、勘違いしてたらすみません


644 名前:デフォルトの名無しさん [2005/07/29(金) 23:03:59 ]
age

645 名前:デフォルトの名無しさん [2005/08/08(月) 17:23:07 ]
a
b
 c
  d
      dd
  e
 f
 g
  h
   i
 j
k
というインデント付きのテキストから

(a b (c (d (dd) e) f g (h (i)) j) k)

というリストを得たいのですが、
どうやったらうまく書けるかいまいちよくわかりません。
再帰を使えばよさそうというのはわかるんですが。
スタックみたいなバッファが必要でしょうか?

ちなみにテキストデータの仕様は
半角2文字インデントで1階層を表現して、
ddみたいな数階層上のインデントがあっても直前の階層の1つ上とみなす。
a, b, c ・・・はシンボルです。




646 名前:デフォルトの名無しさん [2005/08/08(月) 17:35:29 ]
入力の話を簡単にするために、
((a 0)
(b 0)
(c 2)
(d 4)
(dd 12)
(e 4)
(f 2)
(g 2)
(h 4)
(i 6)
(j 2)
(k 0))

という(シンボル インデント文字数)という組のリストから

(a b (c (d (dd) e) f g (h (i)) j) k)

という形に直すにはどうしたらいい?
ということでお願いします。

逆の変換は簡単にできそうなんですが・・・。

647 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 18:28:54 ]
どっかの宿題?

648 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 18:34:19 ]
いいえ、思いつきです。。
ちなみに25過ぎのおっさんですよ。。

649 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 18:46:54 ]
つーか久しぶりにSchemeやってんだけど
頭固くなってるというか、頭悪くなってる。

仮にeまでだとして、
スタックで持ちまわって
((a))

((b a)) ;; 同一インデントはそのままスタック先頭にcons

((c) (b a))

((d) (c) (b a))

((dd) (d) (c) (b a))

((d (dd) e) (c) (b a))
((c (d (dd) e)) (b a))
((a b (c (d (dd) e))))

=> (a b (c (d (dd) e)))

みたいな感じで並べ替えればいいのはなんとなくわかるんだけどね。
肝心のコード思いつかない。


650 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 20:39:31 ]
汚く、token がchar の、indent(space)-num conscious な gauche 版ならできた。

(define (port->sp/char/nls iport)
(reverse
(fold
(lambda (x y)
(cond ((eq? x #\newline) (cons '() y))
((null? y) `((,x)))
(else (cons `(,@(car y) ,x) (cdr y)))))
'()
(port->list read-char iport))))

(define (proc arg)
(let lp ((rest arg)
(temp '())
(result '()))
(if (null? rest)
(reverse (if (null? temp) result `(,(proc temp) ,@result)))
(let ((node (car rest)))
(case (length node)
((0) (if (null? temp)
(lp (cdr rest) '() result)
(lp (cdr rest) '() `(,(proc (reverse temp)) ,@result))))
((1) (if (null? temp)
(lp (cdr rest) '() `(,(car node) ,@result))
(lp (cdr rest) '() `(,(car node) ,(proc (reverse (cons (cdr node) temp))) ,@result))))
(else
(lp (cdr rest) `(,(cdr node) ,@temp) result)))))))


651 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 20:40:04 ]
(proc (port->sp/char/nls (open-input-string "a
b
c
d
dd
e
f
g
h
i
j
k")))
=>
(#\a #\b (#\c (#\d (((((#\d))))) #\e) #\f #\g (#\h (#\i)) #\j) #\k)

652 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 21:04:45 ]
むっ! Pythonのトランスレータを書こうとしているな。

653 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 21:07:47 ]
> ((dd) (d) (c) (b a))
> ↓
> ((d (dd) e) (c) (b a))

ここがよく分からない.eを新たにプッシュするときに,どうしてdはeと同じ
リストに含めて,ddは1つネストしたリストに入っているの? もっと言えば,
(c)や(a b)はd,ddと全く別の扱いを受ける必然性もないように見える.

要するに,リストのネストの深さを保存してないよ,ってこと.


654 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 21:59:58 ]
a
b
 c
  d
      dd
     ee
  e
 f
 g
  h
   i
 j
k

とかなってたらeeはどうするのか? ということを考えると
>ddみたいな数階層上のインデントがあっても直前の階層の1つ上とみなす。
はよろしくないんじゃないかな。それとも構文エラー?



655 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 22:16:21 ]
>>653
インデントの情報も付加して説明すると、

(((a) 0)) ;; インデント0の組

(((b a) 0)) ;; 同一インデントはそのままスタック先頭にcons

(((c) 2) ((b a) 0)) ;; インデント2>0なので新規にスタック追加

(((d) 4) ((c) 2) ((b a) 0)) ;; インデント4>2なので新規にスタック追加

(((dd) 12) ((d) 4) ((c) 2) ((b a) 0)) ;; インデント12>4なので新規にスタック追加
ここで(e 4)がくると(d 4)までスタックを撒き戻すという意味です。
撒き戻すついでにreverseして整える。

(((d (dd) e) 4) ((c) 2) ((b a) 0))
さらにeが終端なので連鎖して撒き戻し&reverseが発生する
(((c (d (dd) e)) 2) ((b a) 0))

(((a b (c (d (dd) e))) 0))
=> (a b (c (d (dd) e)))
それで結果がこうなればいいんじゃないか、ということです。

でも 2 -> 12 -> 4とかのパターンだと
12を4とみなすとか例外作らないとだめかなあ。

>>650
早速ありがとうございます。
コード研究してみます。




656 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 22:18:33 ]
>>654
上にも書いたけど、それさっき気づきました。
やっぱ インデント構造はそのまま保持して、
後から遊びを修正するようにした方が利口かもしれない。

657 名前:デフォルトの名無しさん mailto:sage [2005/08/08(月) 22:37:15 ]
あー、>>654の場合は構文エラーというのも悪くないですね。
「ぶら下がる親があいまい」とかで。
様式的に654の様なケースはありえなさそうだし。


658 名前:デフォルトの名無しさん [2005/08/10(水) 22:19:54 ]
>>650氏のコードを自分の想定した入力形式に書き換えてみました。

(define (proc arg)
 (let loop ((rest arg) (temp '()) (result '()))
  (if (null? rest)
   (reverse (if (null? temp) result `(,(proc (reverse temp)) ,@result)))
   (let ((node (car rest)))
    (if (< (car node) 2)
     (loop (cdr rest) '()
      (if (null? temp)
       `(,(cadr node) ,@result)
       `(,(cadr node) ,(proc (reverse temp)) ,@result)))
     (loop (cdr rest)
      `(,(cons (- (car node) 2) (cdr node)) ,@temp) result))))))

(proc '((0 a) (0 b) (2 c) (4 d) (12 dd) (4 e) (2 f) (2 g) (4 h) (6 i) (2 j) (0 k) (2 m)))
=>(a b (c (d ((((dd)))) e) f g (h (i)) j) k (m))

(< (car node) 2)の箇所はインデント幅が奇数だったら小さい側へ切捨てる処置です。


659 名前:デフォルトの名無しさん [2005/08/10(水) 22:28:19 ]
それと入力を作って、

(define (read-indent-text)
 (define (space-count str)
  (let ((len (string-length str)))
   (let loop ((i 0))
    (if (and (< i len) (char=? (string-ref str i) #\space))
     (loop (+ i 1))
     i))))
 (let loop ((str (read-line)) (r '()))
  (if (eof-object? str)
   (reverse r)
   (let ((pos (space-count str)))
    (loop (read-line)
     (cons (list pos (substring str pos)) r))))))

----ind.txt----
root1
 abc
 def
  gef
 aaa
  bbb
 ccc
root2
 aaa
----ind.txt----

(proc (with-input-from-file "ind.txt" (read-indent-text)))
=>("root1" ("abc" "def" ("gef") "aaa" ("bbb") "ccc") "root2" ("aaa"))

こんな感じになりました。

660 名前:デフォルトの名無しさん [2005/08/10(水) 22:48:55 ]
ついでに逆変換も作りました。(これは1分でできた。)

(define (ind-pp s . indent)
 (define (spaces n)
  (if (zero? n) #t (begin (write-char #\space) (spaces (- n 1)))))
 (set! indent (if (pair? indent) (car indent) 0))
 (let loop ((x s))
  (if (pair? x)
   (if (pair? (car x))
    (begin
     (indent-pp (car x) (+ indent 2))
     (loop (cdr x)))
    (begin
     (spaces indent) (display (car x)) (newline)
     (loop (cdr x))))
   #t)))

(ind-pp '("root1" ("abc" "def" ("gef") "aaa" ("bbb") "ccc") "root2" ("aaa")))
root1
 abc
 def
  gef
 aaa
  bbb
 ccc
root2
 aaa
=>#t

結構手間掛かりましたね。。

661 名前:デフォルトの名無しさん mailto:sage [2005/08/10(水) 23:16:41 ]
fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy
のscheme-modeをgaucheのgoshをインタプリタとして使ってみたいのですが、
そういう使い方してる人います?
できれば教えて下さい。

またこれ以外でも、xyzzyで使えるscheme-modeがあれば紹介してください。

662 名前:デフォルトの名無しさん [2005/08/10(水) 23:37:10 ]
リストに入れた関数を一つの引数に次々に適用するにはどうするのがよいのでしょうか?

状況としてはユーザからの入力値をチェックすることを考えています。
例えばチェック用関数 func_a, func_b, func_c, func_d と入力値 x, y, z があり
x については func_a と func_b,
y については func_a と func_c,
z については func_a と func_d,
によるチェックを行いたいわけなんです。

そこで x の場合
(func_a, func_b) と x を引数にとってリスト ((func_a x) (func_b x)) を
返すようにしたいのですが map のような便利な関数はないのでしょうか?
あるいはリストに入れた関数を一つの引数に次々に適用するよりも
適切な方法はありませんでしょうか?


663 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 00:26:44 ]
(define (hoge func-list x)
(map (lambda (f) (f x)) func-list))

(hoge (list (lambda (x) (+ x x)) (lambda (x) (* x x))) 10)
=> (20 100)

664 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 01:08:58 ]
お約束キタ━━━━━━(゚∀゚)━━━━━━!!!

665 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 01:30:32 ]
おおぅ、こんなところに誤爆してたのか orz



666 名前:デフォルトの名無しさん mailto:sage [2005/08/11(木) 23:41:25 ]
>>661
どっかでgoshの-iオプションを使うとか聞いたことがあるようなないような。

667 名前:デフォルトの名無しさん mailto:sage [2005/08/12(金) 08:36:46 ]
>>645
亀だけど Gauche で書いてみた.
入力は ((シンボル . インデント数) ...) みたいな感じ.

(use srfi-1)

(define (iexpr->list xs)
  (define (f xs level rs)
    (if (null? xs)
        (values xs (reverse! rs))
        (receive (sym l) (car+cdr (car xs))
          (cond ((= l level)
                 (f (cdr xs) l (cons sym rs)))
                ((< l level)
                 (values xs (reverse! rs)))
                (else
                 (receive (rest res) (f xs l '())
                   (f rest level (cons res rs))))))))
  (values-ref (f xs 0 '()) 1))


668 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 23:19:44 ]
>>667からvalues関係を取っ払ってみた。
そんだけ。

(define (iexpr->list xs)
 (define (f xs level rs)
  (if (null? xs)
    (cons xs (reverse! rs))
    (let ((sym (caar xs)) (l (cdar xs))) 
     (cond ((= l level)
         (f (cdr xs) l (cons sym rs)))
        ((< l level)
         (cons xs (reverse! rs)))
        (else
         (let ((x (f xs l '())))
          (f (car x) level (cons (cdr x) rs))))))))
 (cdr (f xs 0 '())))

>(iexpr->list '((a . 0)(b . 1)(c . 4)(d . 5)(d . 2)(e . 3)(f . 0)))
=>(a (b (c (d)) (d (e))) f)
なかなか面白いですな。
これ使って何かに繋がらないかな。
すぐ思いつくのはGUIコントロールの階層表現ぐらいだけど。

669 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 22:40:48 ]
Schemeのコンパイラなどで使うというCPSについてわかりやすく
解説してるページはありますか?
コンパイラとかの中間言語としてのCPSとか、CPSへ/からの変換が
知りたいといいますか。英語でもいいです。

継続とは何ぞやとか、
普通の場合に戻ってから実行する処理をクロージャとして渡せば
一般の言語で継続渡し形式で書ける、という程度の継続渡しの
理解はしてるつもりです。



670 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 23:13:14 ]
>>669
とりあえずSICP嫁。英語ならWebで読める。

671 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 23:37:09 ]
SICPは読みかけの途中で止まってます。どのへんに書いてありますか?


672 名前:デフォルトの名無しさん mailto:sage [2005/08/21(日) 23:44:38 ]
あとは、東大のコンパイラ演習のレジュメとか
ttp://www.is.s.u-tokyo.ac.jp/~vu/97/jugyo/processor/compilerresume/

673 名前:デフォルトの名無しさん [2005/08/22(月) 00:11:36 ]
Scheme用のRSS解析ライブラリってないの?
perlのXML::RSSみたいなの.

674 名前:デフォルトの名無しさん mailto:sage [2005/08/22(月) 00:38:14 ]
SXMLとSXPATHでは足りない?

675 名前:643 [2005/08/22(月) 00:47:55 ]
よりらくちんにやりたいのです.



676 名前:デフォルトの名無しさん mailto:sage [2005/08/22(月) 02:56:42 ]
>>673
LISPはクローズドな開発が多いから
ここで「〜ない?」系の質問しても答えはほとんど「無い」が返ってくると思っていい。
どうしても必要なら自分で書け。
そしてコミュニティに還元しろ。

677 名前:643 mailto:sage [2005/08/22(月) 09:31:13 ]
>>676
なるほど!
じゃあ,がんばって書くよ.

678 名前:デフォルトの名無しさん mailto:sage [2005/08/22(月) 10:58:41 ]
LISPだと簡単に書けちゃうから、逆にあまり再利用を考えずに自分専用のを
作って使い捨てしちゃうってことはあるね。
>>677 がんがれ

679 名前:デフォルトの名無しさん [2005/08/30(火) 13:54:52 ]
Lisp に少し興味を感じています。
あまりにも他の言語と異質な感じをうけるため、心理的な抵抗感も実はあります。

Scheme は Lisp の派生あるいは方言である、と入門サイトに記述されています。
両言語の特性の違いについて、実際にプログラムを組んでいる方の感覚とご理解から
意見を伺いたいです。Lispが優れている言語ならば、それをもとにしたSchemeを
学習する方が良いのだろうか、と悩んでいます。

経済的な理由からLinuxマシンを新規に構成するのではなく、現在使用中の
Windowsマシンで Lisp/Scheme を学びたいと思っています。

680 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 19:51:41 ]
>>679
CommonLispならcoLinux(ただしXP/2000限定)を入れてcmucl、
Windows単体で動かしたいならclisp使うとか。
Schemeなら日本語リソースではgauche、
とにかく速いのがいいならbiglooかな。

681 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 20:01:43 ]
お勉強目的なら xyzzy でいいんじゃね?
エディタとしてもよく出来てるし。

682 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 20:07:21 ]
>>681
xyzzyはかなり方言だし、ちゃんとしたclispあたりのほうが良いと思う。
Scheme系ならgaucheかな。

683 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 21:34:10 ]
>>680 >>681 >>682

皆様のおかげで、5つの実装・環境について特徴を知ることができました。
奥深いのですね。ありがとうございます。
調べたところ、エディタ xyzzy には熱心な愛好者が多そうですね。
Lispの言語としての魅力と関係があるように印象を受けました。

お勧めのgaucheを少し検索しました。
Kahuaというウェブアプリケーション作成の仕組みがあるとか・・

時間をつくってお勧めを参考に Lisp/Scheme を勉強してみます。

684 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 21:52:14 ]
>>683
あんまし色々言うと混乱させてしまうかもしれないけれど、
とりあえず動かしたいということだったら IDE もついてくる PLT Scheme が楽かも。
xyzzy がとっつきやすいのと同じ理由で。
一応日本語方面も外国ものとしてはそれなりだし。
でも、教科書とにらめっこして勉強するんじゃなく、
実際自分で使う小物スクリプトを色々書きながら勉強するというスタンスだったら
gauche が一番向いてるのかな。
そもそもスクリプティングに使いやすいものを、という開発方針だった気がするし。
何にせよ、Scheme は善かれ悪しかれ処理系ごとの個性が強いので
色々な処理系を試してみて、一旦これ、と決めたら、
それの使い方を詳しくつっこんでみるのがいいと思う。

685 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 22:35:37 ]
結局、Schemeはスマートだけどライブラリが不足している現状があり、
それが処理系ごとの違いに繋がってるんだと思う。
Gaucheくらい充実してればSchemeも楽しい。



686 名前:デフォルトの名無しさん [2005/08/30(火) 23:14:12 ]
日本語を扱いに長けているcommon lispの処理系には何がありますか?
schemeだったらgaucheで決まりなんだけど、common lispは良さそうなのが
見当たりません。


687 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 23:20:45 ]
>>686
最近のclispはSJIS/JIS/EUC/Unicode自由自在だよ。
clisp.cons.org/impnotes/encoding.html

688 名前:デフォルトの名無しさん [2005/08/31(水) 00:12:43 ]
Petite Chez Scheme というのを ChezEdit-NT というエディタで動作させるのも楽しそう。

689 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 13:15:57 ]
スレ違いならすんませんが、Scheme勉強しようと思って、
OSX TigerにGauche 0.8.5インストールしたところリンクが通らず、
Finkでdlcompat入れろつーことらしいから(10.2だけど)、
Fink入れてみたんだけどdlcompatとかなさそうで、
ほんじゃってんで、ports入れてみて、
dlcompat落としてみたら、コンパイルできんって感じでげす...orz
どげにしたらインストでけるんでがしょ?


690 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 13:35:34 ]
しかるべき場所でちゃんとした言葉遣いで相談したほうが良いと思います。

691 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 14:06:18 ]
port install gauche

692 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 21:30:54 ]
gaucheの特徴
・define-macroがある
・マニュアルが日本語(ライブラリも)
・ライブラリが豊富
・Cで簡単に拡張できる。


693 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 04:52:45 ]
>>686
SBCL は最近、日本語通る様になった

694 名前:686 mailto:sage [2005/09/03(土) 01:42:43 ]
>>687>>693
おまいら、ありがとうございます。
>>950は次スレのテンプレに日本語使える処理系情報を追加しておくように。


695 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 05:56:43 ]
gaucheでhttpクライアントを作ろうとしています。
このとき http-get 関数に :Accept-Encoding "gzip, compress" を
指定して圧縮されて受け取ったデータを展開するにはどうすればよいでしょうか?

javaみたいにgzipのストリームがあれば便利なんですが、ストリームどころか
素のgzipのユーティリティも見当たらないようです。
知ってる方お知恵をお貸し下さい、おながいします。




696 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 16:34:33 ]
とりあえず何とかしたいなら、プロセスポートを
使ってgzipを呼ぶようにすれば?
rfc.mimeも使うよね。

697 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 23:19:40 ]
ttp://www.rubyist.net/~matz/20050830.html#p01
Paul Grahamが(言わなきゃいいのに)本音を漏らしちゃった話。
言語デザイナーとしての限界とか、無理して作るなとか、さんざんなこと言われてる。

698 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 23:57:02 ]
>>697
個人的にはPaulの意見は理解できる。つーか、Matz僻みすぎ。

699 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 00:00:15 ]
やっぱLISPは完成度が高すぎるんだな。
Paul一人ごときが進化できる代物ではないと。
Guyぐらいの天才でもないと。

700 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 02:06:14 ]
たしかに完成度は高いのかもしれんが、
抽象度の高いものは、漏れのような頭の悪い奴らにとっては使いこなすのが難しいわけで。
そういう意味で、Perl, Python, Rubyのような言語ってのは、脳味噌が一部不自由でもLispの
パワーの片鱗に触れられるって点で意味はあると思うんだけどな。
で、より毛深くなりたくなったら、Lisp/Schemeの世界に足を踏み入れればよいのだし。
結局のところ動的言語使いはLispに始まりLispに帰るのか。


701 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 02:15:22 ]
比較的簡単な問題をちょいちょいっと手続き型で書いていく時は、LispよりPythonの方が便利だと思う。
公式ライブラリが豊富なのもこの長所を延ばしてる。

Perlはawkの改良として、歴史的意味があった。

Rubyは...えーっと...

702 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 04:10:30 ]
arc は Vaperware への道をまっしぐら感が強いよなあ。

>>695
wiliki の方でも訊いてみてはどうでしょ。
>>696 みたいな感じの答えになりそうな気はするけれど、
具体的なコードも出してくれるかも知れんし。

703 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 04:53:54 ]
Arc も、もう少し志を低くして
(asdf-install:install 'arc)
で使える便利ライブラリ、くらいにするといいんだよ。

704 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 07:30:26 ]
Haskell ,Clean 等は効率的で、LISP, SCHEME は万能である。
万能とは、科学者にとって悲しむべき特性である。


705 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 11:24:03 ]
とはいえLispも今までいろいろ進化してきたしな。
これで完成だとか言ってると危ないかも。



706 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 11:25:21 ]
そういえば、LISPでも関数を特別視してるけど、
それをなくしたら新しい文化ができるかも。

つまり、関数呼び出しは全てfancall, applyを使う。


707 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 12:16:58 ]
funcall も apply も関数ですが
ていうか scheme では既に特別視してないし

708 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 13:01:47 ]
じゃあ、定理証明系見たいなノリでmacroで作ったやつをmapできたりさせよう。

709 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 13:09:09 ]
他の言語なら適当な文法考えるだけでなにか
新しいものを追加した気分になれるがlispだと
そんなのマクロで書けるじゃんでほとんど終わる
ので圧倒的に不利なきがする


710 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 13:15:42 ]
個人的には理論的純粋さよりも実用性だな。ライブラリがあればいい。
ANSI Common Lisp + ネットワーク + 国際化 + XML + ...
みたいなノリで CLtL3 を作って標準化してほしい。

711 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 18:55:28 ]
LISPは記号処理は得意でも文字列操作はそれほどでもない中途半端さがない?

712 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 19:29:12 ]
>>711
EmacsLispはいかがですか?(反則ぎみ)
つか、欲しかったら時分でマクロなり関数なり定義してけばOK。
ソースある処理系だったら実装言語で拡張しちゃえば最強。


713 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 19:53:44 ]
一度SchemeやCommon Lisp使っちゃうと、elispでごりごり書くなんて事実上ありえん。
それならPerl使った方がマシ。

714 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 22:23:55 ]
Common Lisp だとリーダマクロなんて最後の武器があるしなあ。
#/regexp/ みたいなものくらいなら片手間で実装できるし。
まあ regexp 自体は既存のライブラリ使うとしてだけど。
xml を直接埋め込むようなライブラリとかもあったよね。

あとはファーストクラスの動的マクロとかの黒魔術に手を染めるしかないかもなあ。
Graham は確かオプションで切り替えられるような機能を
arc でサポートする予定だったと思ったけれど。

洒落だったら後置記法の Sexpr とか思いつくんだけどなあ。

715 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 22:36:29 ]
>>714
>後置記法

括弧つきFORTHだな。w



716 名前:デフォルトの名無しさん mailto:sage [2005/09/05(月) 07:20:19 ]
>>713
emacs の開発者やコード寄贈者には Scheme や Common Lisp ハッカーが
ごろごろいるけど。

717 名前:デフォルトの名無しさん mailto:sage [2005/09/05(月) 23:59:51 ]
(>>713 emacsは絶対けなしちゃ駄目!!(><))
↓以下別の話題

718 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 01:47:11 ]
個人的にここがお気に入り
pc8.2ch.net/test/read.cgi/tech/1114223450/

719 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 04:50:31 ]
荒れるからやめろ。
↓以下Lispの話題

720 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 11:46:48 ]
LISPって夢があっていいけど
ライブラリを充実させてほしい。
どんなしょぼLISPでも使えるネットワーク系ライブラリとかよ。

721 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 14:16:24 ]
Generaがナツカシス。
ああいう開発環境をいまの技術で作れば、めちゃ快適なんだろうなと夢想。


722 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 18:33:08 ]
>>720
ほんとそのとおりだよ。LISPerにはライブラリ共有の概念がないのかね。


723 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 19:30:23 ]
www.cliki.net/networking

724 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 21:32:59 ]
偉そうなこと言うやつはいるけど。
それ以外の日本語のコンテンツの少なさは凄いよな。


725 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 21:40:16 ]
↑偉そうなこと言うやつ



726 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 22:06:11 ]
>>724
探せばそれなりにはあるよ。大学なり個人なり。
Java とかに比べれば、そりゃ少ないけど。

↓はテンプレに入れても良いかも。

チュートリアル
ttp://www.h7.dion.ne.jp/~matsu/feature/common-lisp/index.html

ティップス
ttp://www.geocities.co.jp/SiliconValley-Cupertino/2478/root-sect-2.html

727 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 22:31:27 ]
偉そうなこと言う奴は、確かに充実してる(多い)な

728 名前:デフォルトの名無しさん mailto:sage [2005/09/06(火) 23:37:41 ]
なんだ、宿題教えてもらえなかったのか

729 名前:デフォルトの名無しさん mailto:sage [2005/09/07(水) 22:26:23 ]
初心者用のコンテンツのみ充実してるな。


730 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 18:36:51 ]
しかし、初心者自体は足りてないと

731 名前:デフォルトの名無しさん mailto:sage [2005/09/10(土) 12:21:47 ]
さっきうっかり chez のサイト踏んだら chez scheme が
version 7 に上がってたんで一応貼っておきますね。
リリースノートを眺めた限りではあんまり派手な変更はなさそうですけれど。
多言語方面に対応しないのはお客さんから要望が出ないからなんだろうなあ。

www.scheme.com/csv7.0/

732 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 03:15:04 ]
>>731
値段が判りませぬ。幾らなんでしょうかご存じでしょうか。サイト探してみたんですけど
見当たらなかったように思います。

733 名前:デフォルトの名無しさん mailto:sage [2005/09/12(月) 04:00:26 ]
>>732
フリーで機能限定版(コンパイラが無い)の Petite Chez があります。
Chez 自体の値段は私も知りませんが ACL といい勝負だという噂は聞いたことがあります。
基本的に個人相手に商売してるんじゃなさそうな気がします。

734 名前:flatline@Vim%Chalice ◆r6EONKKhcc mailto:sage [2005/09/13(火) 16:55:02 ]
"On Lisp" のHTML版を置いておきますね.

っ [ user.ecc.u-tokyo.ac.jp/~t50473/onlispjhtml/ ]

まだTeXのマクロが残りまくりですが...

735 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 20:45:38 ]
>>734
乙カレー! これで emacs-w3m で『On Lisp』が読めるよ。




736 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 22:01:01 ]
>>733
ACLって1ライセンスいくらでしたっけ。
今ちょっとfranzのページ見てきたら載ってないのなー

737 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 22:02:28 ]
>>736
時価とかじゃね?

738 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 22:08:48 ]
www.franz.com/products/packages/
によれば $599〜

739 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 22:45:29 ]
そんなに高くないのな
・・で、日本語マニュアルは付いてくるのかい?

740 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 22:46:51 ]
>>734
すげ
つーかここまでお疲れ様でした。

741 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:02:55 ]
サポートいらないから、ソースネクストから1,980円で発売してほしい。

742 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:09:30 ]
同意

743 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:19:45 ]
microsoftの製品より安くね?

744 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:39:37 ]
開発ツールじゃMSの製品に他のメーカは内容も値段も全く勝負にならん。

745 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:44:46 ]
>>743
あっちは単言語で安いパッケージがある。



746 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:46:08 ]
Microsoft Visual Common Lisp .NET 待望

747 名前:デフォルトの名無しさん mailto:sage [2005/09/13(火) 23:59:21 ]
Pythonですら.NETになったというのにおまいらときたら……

748 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 00:04:23 ]
つ DotLisp
sourceforge.net/projects/dotlisp/

749 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 00:24:29 ]
On Lispの日本語版って出版されんの?
Franzの11月セミナーのとこにそれっぽいようなことが書いてあった気がするんだが。


750 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 00:47:14 ]
Microsoft で CLR の主任設計者やってる Patrick Dussud は元々 Lisp 屋だし
今年の ILC でも講演してたよ。
international-lisp-conference.org/2005/speakers.html#patrick_dussud

751 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 06:20:08 ]
>>749
> さらに、今年末出版予定の、邦訳版 On Lisp (原書著者Paul Graham)の翻訳者である野田開氏もお迎えし、
> 書籍On Lispについてや翻訳の体験談をお話し頂きます。

これか。
jp.franz.com/base/aclhome_base.html

752 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 06:45:41 ]
そういえば On Lisp といったら原書の方も、
再版するとか改訂するとかする暇がないとか色々噂は聞くけれど、
実際のところどうなってるんでしょう。

753 名前:flatline@Vim%Chalice ◆r6EONKKhcc mailto:sage [2005/09/14(水) 10:59:31 ]
>>749
出版社の方が,原書を出した米国の出版社と交渉に当たって下さっているところです.

>>752
改訂版を出そうとしている(米の)出版社がGraham氏の原稿を待っているとのこと.
# 私もできれば改訂版に追従したいんですが...
Graham氏は完璧主義の方で,その上お忙しいので,しばらくかかりそう,とか.

754 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 15:04:06 ]
Schemeもあるでよ〜
Common Larceny requires the Common Language Infrastructure. It is known to work with the Microsoft .NET Framework implementation.
www.ccs.neu.edu/home/jrm/download.html

755 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 16:57:06 ]
Larceny か
音沙汰無いなと思ってたらこんなところで



756 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 19:35:50 ]
処理系依存の質問ですがここでいいですか?

FreeBSD4.11でportsからインストールしたCMUCL19a
traceの結果がレベル0しか出力されない

(defun fac (n)
(if (> n 1)
(* n (fac (1- n)))
1))

(trace fac)
(fac 3)

処理系の出力
0: (FAC 3)
0: FAC returned 6
6

教えてエロい人

757 名前:デフォルトの名無しさん mailto:sage [2005/09/14(水) 21:29:51 ]
SBCL 使えば? 日本語も使えるし。

758 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 02:19:00 ]
計算過程をずっとsingle-floatの範囲内で収めたいのですが、ACL7は積み残しが
発生する場所では気を利かせてdouble-floatで計算してくれるみたいです。
C/C++のように強い型付けをされた言語の真似をさせるにはどうしたらよいですか。
foreign-function使ってfloat同士の加算だけの関数を呼び出すのは我ながら
バカらしい解決方法だと思うのですが、もっとまともな方法ありますか?

759 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 02:28:31 ]
>>758
例えば
(defun p (x y)
 (declare (single-float x y))
 (the single-float (+ x y)))
みたいな書き方すれば多くのコンパイラは良きになしてくれるよ。

760 名前:758 mailto:sage [2005/09/15(木) 02:39:10 ]
>>759
declareとtheを使った書き方は試しているのですが、まだ期待した結果を
得られるには至ってません。記述方法の問題かも知れないのでも少しいじってみます。
ありがとうございました。

761 名前:デフォルトの名無しさん [2005/09/15(木) 06:26:15 ]
.NET + Common Lisp については、こんなのもあるらしい。

weitz.de/rdnzl/
RDNZL - A .NET layer for Common Lisp


762 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 20:55:47 ]
積極的にsingle使いたい理由でもあるの?
最適化のつもりなら多分逆効果だよ

763 名前:758 mailto:sage [2005/09/15(木) 22:46:38 ]
>>762
僕への質問と理解してよければ、ハードウェアのシミュレータを書こうとしてるからです。
演算器がsingleしか持ってないので途中でdoubleに行っちゃったりして実機上の計算と結果が
異なってくるとイヤかなぁ、と。
マクロとかバンバン使って勝手に俺言語でっち上げて、パイプラインの状態とか視覚的に
見れるようなところまで持って行けたら素敵なんだけども。こんなことLispでやろうとするのって
おかしいですか?

>>753
出版されたら買わせていただきますわ。期待して待ってます。

764 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 23:08:26 ]
C でも float foo(float x, float y) { return (x + x) / y; } を
foo(MAXFLOAT, 2) と呼び出した場合、途中 double で計算して
オーバーフローしない処理系があるし、それも規格合致だよ。

正確にエミュレートしたいのなら自前でビット演算するしかない。

765 名前:758 mailto:sage [2005/09/15(木) 23:47:07 ]
>>763
ご忠告ありがとうございます。究極的にはそうなるんでしょうね。
SystemCとかってどうなってんのかな。暇なとき見てみよっと。




766 名前:デフォルトの名無しさん mailto:sage [2005/09/15(木) 23:48:59 ]
>>765
SystemCは厳格にやるクラスと高速なクラス(これは=float/doubleだけど)が両方
用意されているよ。

767 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 07:20:05 ]
>>764
float の演算が double に変換されてから行われるのは K&R の時代の話じゃないの?
……と思ったけどオーバーフローが絡むとアレか。未定義だか処理系定義だかか。

768 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 09:53:09 ]
ダカカ。

769 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 16:07:10 ]
中村正三郎氏によるProactical Common Lispの書評(?)
iiyu.asablo.jp/blog/2005/09/16/76723
サイン本、いいなー。w

770 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 16:08:13 ]
>>769
typo
誤:Proactical
正:Practical

771 名前:デフォルトの名無しさん mailto:sage [2005/09/16(金) 23:11:58 ]
今日のセミナー人少なかった・・・個人的にはすごく興味深い内容だったんで
もっと多くの人が知ってくれればいいのにと思ったよ。
撮影していたビデオを配信する予定がないこともないらしいのでちょっと期待。

Prologって使ったことないんだけど、適用する分野を間違えなければ便利そうね。

772 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 10:16:18 ]
gosh> (display 2)
2#<undef>
gosh> ((car '(display display)) 2)
*** ERROR: invalid application: (display 2)

why? please.

773 名前:デフォルトの名無しさん [2005/09/17(土) 10:53:05 ]
lispboxっての入れてみたんだけど、
デフォルトのclisp2.34が起動時にエラーが起こるので、
エラーの起こらないclisp2.35を使ってみたいです。
しかし、clispフォルダの中身をいれかえて、
lispbox-register.elを入れてやるだけでは動かないようです。

どうやったら動くか知ってる人いませんか?
ちなみに、2.34のエラーは以下の通りです。上2行のWARNINGは2.35でもでるようです。
WARNING: locale: no encoding CP932, using UTF-8
WARNING: *TERMINAL-ENCODING*: no encoding CP932, using UTF-8
invalid byte sequence #xEE #x2E #x74 in CHARSET:UTF-8 conversion

よろしくお願いします。


774 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 11:14:52 ]
>>772
display っていうシンボルを 2 に apply しようとしてる.
シンボルは関数でないから当然エラー.
やりたいことやるには
((car `(,display ,display)) 2)

775 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 11:25:13 ]
おまえ初心者っぽい奴にいきなりunquoteでかいてんじゃねーよ
素直にlistで書けよ



776 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 11:27:14 ]
'(display display) == (list 'display 'display)
`(,display ,display) == (list display display)

777 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 11:27:16 ]
↑すまん、ちょっとあたまに血が上りすぎた
俺が言いたいのはquoteとリストの区別が付いてない初心者だから
順序立てて教えないと理解しないだろってことだよ

778 名前:772 mailto:sage [2005/09/17(土) 11:49:38 ]
なるほど! 自分は

gosh> ('display 2)
*** ERROR: invalid application: (display 2)

こんなことをしているのと同じだったんですね。
774さんのようにunquoteで書くか、以下のようにして
書くかしてちゃんと関数として評価されるようにしなければ
ならなかったと。

gosh> ((car (list display display)) 2)
2#<undef>

おかげで unquote についても覚えることができました。
>>774-777さん。どうもありがとうございます。

gosh> display
#<subr display>
gosh> `(,display)
(#<subr display>)


779 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 11:57:35 ]
LISPとSchemeの両方を使うが
頻繁に使わないって人はよく間違うよね。


780 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 15:04:42 ]
間違わねーよ
間違う奴は全く理解してないってことだろ

781 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 21:58:51 ]
>>769
その文章がWebに掲載された日の午前中に
私がamazonで購入したときには残り3冊だったのに、
その10分くらい後にはもう在庫なしになっていた。
洋書売り上げランキングも、最初見たとき5000位台だったのが、
一時的に50位くらいまで上がってるのを見た。
影響力すごすぎ。

782 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 00:18:02 ]
そんなに影響力あるのかあの薄らハゲ。詳しく知らないけど何者?
リンク先のblog見るかぎりじゃ結構バカそうなんだが。バカを演じてるだけなのかな。

783 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 00:39:59 ]
>>782
マイクロソフトの天敵みたいな人。
ちなみに元法務大臣とは別人だぞ。w
ja.wikipedia.org/wiki/%E4%B8%AD%E6%9D%91%E6%AD%A3%E4%B8%89%E9%83%8E

784 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 01:34:41 ]
マイクロソフトの天敵だと思っているのは本人だけだろ。


785 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 09:25:35 ]
>>780 (defun (hoge huga) ...)とか間違ってやるだろ?





786 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 10:20:03 ]
どこの馬鹿がやるんだろう・・・。

787 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 14:58:41 ]
>>785
defunとdefineの違いがなければ間違うかもしれんが、どちらかの単語を打ち込んだ
時点で自動的に脳内モードが切り替わるのでその手の間違いは少ない。

788 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 01:03:27 ]
scheme でうっかり #' を書いてることはあるなあ。
あとは #t を t とか #f や '() を nil とか。
まあ書いた瞬間に気付いてへこむわけですが。

789 名前:デフォルトの名無しさん [2005/09/19(月) 14:01:50 ]
というか関数と変数で名前空間を分けることのメリットって何よ?
#:とかfuncallとかめんどくさすぎる

790 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:11:08 ]
変数として使っても、呼び出しフォームで関数が取り出せるというだけかな。
CommonLisp的思考をしない限りはメリットはない。
おれもSchemeみたくスロット1つにしてしまっても良いと思う。


ところで、()をわざわざ'()とquote付けて書いてるのが多数なのは
宗教上の理由でしょうか。
()は評価しても()だよね?
()は#tとか#fと同じ様な扱いのはずだと思うけど。
Schemeはここだけ不思議。

791 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:14:00 ]
>>790
Schemeでは () は評価できない(エラー)だと思う。

792 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:16:18 ]
へーエラーになるのか。
なんでだろうね。
Gaucheでも入れてみようかな。

793 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:21:50 ]
>>792
評価できる形式ではないから。
Common Lispの場合は()はnilというsymbolであってspecial変数としてnilという
値を持っているから評価できるだけ。

794 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:37:10 ]
エラーなんだっけ?
R5RSでは未定義だったような。うるおぼえ。

795 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 14:41:17 ]
>>794
ああ。正確には未定義だったかも。



796 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:09:52 ]
やってみた。gaucheだと両方とも同じように評価される。

gosh> ()
()
gosh> '()
()

R5RSをみて見たけどようわからん。見当違いなトコ見てるかも。

4.1.3 Procedure calls
> Note: In many dialects of Lisp, the empty combination,
> (), is a legitimate expression. In Scheme, combinations
> must have at least one subexpression, so () is not a
> syntactically valid expression.

4.1.2 Literal expressions
> '() ===> ()

識者の登場キボン

797 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:13:36 ]
思いっきり書いてるやん
> so () is not a
> syntactically valid expression.

798 名前:796 mailto:sage [2005/09/19(月) 15:15:09 ]
orz...thx.


799 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:18:04 ]
未定義ならgoshでは()=>()ってだけじゃないの。

ちなみに
Petite Chez Scheme Version 6.9c
Copyright (c) 1985-2003 Cadence Research Systems

> ()
()
> '()
()
これもgoshと同じか。

800 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:19:49 ]
Guileね

guile> ()
ERROR: missing or extra expression
ABORT: (misc-error)
guile> '()
()
guile>


801 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:22:41 ]
Guileはちゃんと(?)エラーになるな
guile> ()
ERROR: missing or extra expression
ABORT: (misc-error)
guile> '()
()
guile>

802 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:23:12 ]
あら見事にかぶった。

803 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 15:24:22 ]
>>800,801
おおぅ。ちゃんとエラーになる処理系もあるんだな。
やっぱquoteせにゃならんか。

804 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 16:05:09 ]
Guileってもはや独自言語仕様に向かってなかったっけ?
Guileでエラーになったからと言え、これをSchemeの仕様と言ってしまっていいものか。
つーか未定義か。

805 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 20:40:25 ]
まぁグィラーは特殊だから。



806 名前:デフォルトの名無しさん mailto:sage [2005/09/19(月) 21:35:30 ]
Guile は規格で正しいとされてないことは積極的にエラーにし、
Gaush や PLT Scheme は規格でエラーにしろとされてるものしか
エラーにしないような感じ。
以前出た (define (foo) (define x 10) (define y x) y) が
どう扱われるかもそうだったよね。

807 名前:デフォルトの名無しさん [2005/09/20(火) 00:21:52 ]
今、現在Schemeを勉強しているのですが
絵を簡易的なアニメーションさせることは
Schemeを使って可能でしょうか?
また、Schemeからリンクさせることも含めて
可能な手段をわかる人おられますか?
かなり求むです。

808 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 01:10:18 ]
gauche-glとかオススメ

809 名前:デフォルトの名無しさん [2005/09/20(火) 11:12:11 ]
>>808

かなり感謝です。実際に求めていたものがありました。
しかもSICPにも図形言語として紹介もしていたようですね。
みなさんかなりの達人では??
私もこれからレベルアップします!!

810 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 20:56:22 ]
>>806
参考になるです。

811 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 01:25:04 ]
>>773
| WARNING: locale: no encoding CP932, using UTF-8
| WARNING: *TERMINAL-ENCODING*: no encoding CP932, using UTF-8

公式配布の CLISP では CP932/Shift-JIS エンコーディングが使えません.
GNU Libiconv をリンクして作成したバイナリを使えば大丈夫です.

私の手元では Windows 2000/XP + Emacs22 CVS + Slime CVS + GNU CLISP 2.35
で↓のように日本語シンボルが使えています.あとはパス名に日本語が使えない
問題が解決できればバイナリを公開してもいいですが.

; SLIME 2005-07-29
CL-USER> (length "あいう")
3
CL-USER> (defun 2倍 (引数) (* 引数 2))
2倍
CL-USER> (2倍 2/3)
4/3


812 名前:デフォルトの名無しさん [2005/09/21(水) 05:16:45 ]
 昔パソコン用のMuLispで書いたシステムの移植を考えております。
問題は、auto-quoteとでもいいますか、アトムを評価するとこのシステムは、
アトムの名前を返すようなシステムになっておりました。
 これと同じ仕様になっているLispあるいはSchemeの処理系あるいは、
これを簡単に実現できるような(つまりMuLisp互換システム)システムを
ご存知の方教えていただけませんでしょうか。

813 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 09:51:22 ]
既存の処理系の上でアトムの名前を返すevalをつくればいいような気がするけど・・・。

814 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 13:34:06 ]
evalするかわりにatom->nameみたいなの用意すりゃいいじゃん
ちょっと意味ワカラナス

815 名前:デフォルトの名無しさん mailto:sage [2005/09/21(水) 17:33:23 ]
>>812
MuLispの仕様ってどこかに公開されてるの?



816 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 02:40:00 ]
シンボルを評価して自分自身が返って来るとしたら、変数はどうするんだろう。
よく判らないけれど、自己評価するシンボルが欲しいとかなら、
Common Lisp で keyword に置き換えておくのが楽じゃないかと思います。

817 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 02:43:24 ]
>>816
よくわからんが束縛されてない自由変数のデフォルト値って感じなのかな。
keywordにするのは賛成。

818 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 02:57:26 ]
動的束縛で、foo ≡ (lambda () a) として
(foo) => a、(let ((a 10)) (foo)) => 10
となることを期待するコードがあちこちにあったりすると厄介かも。

819 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 03:00:03 ]
MuLispって時代的にはCommon Lisp以前だから、動的スコープなんだろうな。

820 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 04:43:43 ]
...ってことは単純に移植できなくないか?

821 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 06:48:06 ]
んー、未束縛の場合は自分自身を返す、ってんだったら、
handler-case 使って unbound-variable で捕まえるっていう手もあるかも。
スコープは……とりあえずどっかのパッケージに閉じ込めといて、
do-symbols 使って (declaim (special <... そのパッケージのシンボル全部 ...>))
とかに展開するマクロを書いてロード後に呼んでみるとかで意外と何とかならんかなあ。

822 名前:デフォルトの名無しさん mailto:sage [2005/09/22(木) 08:34:14 ]
昔の Lisp ならそれほど大きな言語仕様じゃないだろうから、Common Lisp に
変換するマクロ書いた方が結局早いんじゃないかな。
(atom x) は (atom (if (boundp 'x) x 'x)) とか、動的束縛なら
(let ((var val)) ...) は (let ((var val)) (declare (special var)) ...)
とか変換してくだけだよね。

823 名前:デフォルトの名無しさん [2005/09/23(金) 14:18:00 ]
僕には洋書は無理ですた
誰か買いません?
「EXPLORING COMPUTER WCIENCE WITH SCHEME」
ユーズドにしてはかなり綺麗な方だと思う¥5,000でお願い
www.amazon.co.jp/exec/obidos/ASIN/0387948953/qid%3D1127452213/250-5942737-7464260


824 名前:823 mailto:sage [2005/09/23(金) 14:19:34 ]
×: COMPUTER WCIENCE
○: COMPUTER SCIENCE


825 名前:デフォルトの名無しさん mailto:sage [2005/09/23(金) 23:42:10 ]
新品の半額なら考える



826 名前:デフォルトの名無しさん mailto:sage [2005/09/24(土) 00:11:42 ]
ほぼ半額に近いね

827 名前:デフォルトの名無しさん mailto:sage [2005/09/24(土) 00:48:41 ]
>>823 買いたくなるようなことを書いて

828 名前:デフォルトの名無しさん mailto:sage [2005/09/24(土) 15:17:06 ]
>>827
書けるくらい理解したのなら、売らないだろうに、イヂワルなやつだな。

829 名前:デフォルトの名無しさん mailto:sage [2005/09/24(土) 19:04:31 ]
世の中、CDを聴いてから(売るんじゃなくて)返品する奴もいるという話だぞ。


830 名前:デフォルトの名無しさん mailto:sage [2005/09/24(土) 21:26:13 ]
>>829
ソニンのことか

831 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 00:22:08 ]
Schemeに静的型対応させた言語が最強だと思うんですが
ありませんか?
なければ作りますが。

832 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 01:16:43 ]
carやcdrの戻り値はどうするの?
関数型言語みたいにリストの中に単一の型しか入れられないんでは
Lisp系としては不便この上ないし、かといって型チェックが入るんでは
何も変わらんか、型が固定されるだけ不便になる。


833 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 01:24:50 ]
型変換すればよいのでは。

834 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 10:11:14 ]
あっちゃこっちゃで型変換しまくりの静的型対応言語ってのもなぁ。

835 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 10:30:38 ]
基本は型無しで、効率重視の部分では型宣言もできますくらいで
いいんじゃないの?



836 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 10:41:18 ]
そんな物があったとして、静的型付けな Scheme と SML との間に何を見出すか
によって意見が割れそうだね。

837 名前:デフォルトの名無しさん [2005/09/25(日) 13:33:28 ]
経路探索のプログラムの組み方を教えてもらえないですか?
答えでもいいです、よろしくお願いします。

838 名前:デフォルトの名無しさん mailto:sage [2005/09/25(日) 13:37:52 ]
pc8.2ch.net/test/read.cgi/tech/1106587515/150


839 名前:デフォルトの名無しさん mailto:sage [2005/09/27(火) 23:48:07 ]
いままで気が付かなかったけれど、
fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy
ここの scheme-mode で run-scheme に近いことができるようになってる。

Petite Chez Scheme 7.0で使ってみたところ、問題なく動いた。相当に便利。
まだ荒削りなので、今後に期待。


840 名前:デフォルトの名無しさん mailto:sage [2005/09/28(水) 19:46:16 ]
すみませんが、MzScheme で日本語を使うには、どうしたら良いでしょうか?

DrScheme や MrEd では問題なく日本語が使えますが、コマンドプロンプトで
動いているMzScheme だと、与えられる文字コードがWindows_31Jになってしま
うせいか、日本語を入力してもすべて化けてしまうのです。

コマンドプロンプトからUTF-8を与えることができればいいのかと思うのです
が、そこからが分かりません…。


841 名前:デフォルトの名無しさん mailto:sage [2005/09/28(水) 21:05:14 ]
Emacs で
(add-to-list 'process-coding-system-alist
'("mzscheme" . utf-8))
しておいて M-x run-scheme とか。

842 名前:840 mailto:sage [2005/09/28(水) 21:36:05 ]
>>841
申し忘れましたが、私のシステムは Windows(2000, 98)なのです。
できたら>>938の xyzzy の scheme-mode を使いたいと思っています。


843 名前:デフォルトの名無しさん mailto:sage [2005/09/28(水) 22:31:29 ]
あまり関係ないけど、xyzzyスレ Part11 に載っていたコード。
xyzzyの sheme-mode はインデントの機能がちょっと貧弱だけど
これを.xyzzy に書くと、lisp-modeと似た感じになる。

; scheme-mode で lis-mode 風のインデントを行う。
(define-key *scheme-mode-map* #\C-m 'lisp-newline-and-indent)
(define-key *scheme-mode-map* #\C-i 'lisp-indent-line)
(setf (get 'define 'lisp-indent-hook) 'defun)


844 名前:デフォルトの名無しさん mailto:sage [2005/09/28(水) 23:59:02 ]
wikipediaのラムダ計算のページ
ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97

例で
(λx.(λy.(x+y))3)5 → (λy.(3+y))5 とか
λx.(λy.(x+y))3 → λy.(3+y)
とあるんですが、これって正しいんでしょうか?

845 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 00:24:27 ]
ただしい
だがなぜこんなところに聞くのだ。

まだHaskellスレとかの方がよくないか。





846 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 01:10:42 ]
xyzzy の Scheme Mode は素晴らしい。これは Scheme のスクラッチ・バッファ
そのものだ。Ctrl+JでS式がSchemeインタプリタに評価されて、結果が次の行
に表示される。自分はずっとこういうのが欲しかった。

今まで Windows98 で動く Scheme 実行環境にはろくなものが無かった。
ChezEdit … NTでしか動かない。
DrScheme … 自分のマシンには重すぎてインストールすらできなかった。
Chez Scheme 付属の PWL … 重すぎて、ただ起動しただけでCPUパワーを使い
きってしまう。

だから結局、素の PetiteChezScheme をコマンドラインから起動し、エディタ
の内容をコピペするしかなかった。

この xyzzy のScheme Mode は、便利で、操作が軽快で、そしてCPUパワーをほ
とんど食わない。自分のような貧乏人には理想のScheme環境だと思う。
matsuoka さん、ありがとう!


847 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 01:11:56 ]
>>844
ラムダ計算の仕方を全く知らないならちゃんと勉強しろよ。
中途半端に聞いたって仕方がないだろ。

848 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 01:12:43 ]
>>842
make-process に :incode *encoding-utf8* :outcode *encoding-utf8*
を付け足す感じでどうでしょ。試してないけど。
詳細はリファレンス参照。
ttp://hie.s64.xrea.com/xyzzy/reference/html/ref-make-process.html
上手くいかなかったら win 板の xyzzy スレで訊いた方がいいかも。

849 名前:842 mailto:sage [2005/09/29(木) 10:51:10 ]
>>848
ありがとうございます。残念ながら、うまく行きませんでした。
試しに :OUTCODE *encoding-sjis* も試してみましたが、結果は同様でした。
xyzzy スレに行ってみます。


850 名前:デフォルトの名無しさん [2005/09/29(木) 14:19:17 ]
>>844
S式で書けば
λx.(λy.(x+y))3 = ((lambda (x) (lambda (y) (+ x y))) 3)
(λx.(λy.(x+y))3)5 = (((lambda (x) (lambda (y) (+ x y))) 3) 5)

これならわかる?

851 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 15:30:54 ]
さらば slime48

852 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 19:03:44 ]
>>844
1つ目の方違わね?
(λx.(λy.(x+y))3)5 → (λx.(x+3))5
じゃね?

853 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 19:23:02 ]
違う
>>844で合ってる

>これって正しいんでしょうか?
# 強いて言えばラムダ計算に中置き演算子がでてくるのが不思議

854 名前:デフォルトの名無しさん [2005/09/29(木) 19:31:05 ]
xyzzyのscheme-modeってgosh使えないの?


855 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 20:04:59 ]
>>854
試してみたけど、Gauche は動かないねえ。

fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy
> pscheme を直接呼ぶと結果が帰って来ない(pscheme の STDOUT の扱いの問題)
> Petite Chez Scheme と MzScheme? は全然動く(STDIN/OUT がいけるのは大丈夫)

とあるから、Gauche の STDOUT に問題があるのだろうか?
対処法はわかんない。




856 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 20:40:52 ]
gosh -i
とか?

857 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 20:51:01 ]
>>853
ラムダ計算自体はべつに前置記法を要求してるわけじゃないんでは?

858 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 21:29:42 ]
>>856
うまく行かない。

> xyzzyenv: "C:\Program Files\Gauche\bin\gosh.exe -i ": 指定されたファイ
> ルが見つかりません。
というエラーが出る。


859 名前:858 mailto:sage [2005/09/29(木) 21:33:02 ]
念のため、.xyzzy のその行を貼る。
(map-slash-to-backslash "C:/Program Files/Gauche/bin/gosh.exe -i ")

こう書くと、前述のエラー。


860 名前:デフォルトの名無しさん mailto:sage [2005/09/29(木) 21:34:55 ]
-iまでをパス名と認識してるみたいだが

861 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 11:02:14 ]
Gauche も動いた。こちらを参照。
xyzzy Part13
pc8.2ch.net/test/read.cgi/win/1127783135/l20
ここの27以降。

そしてこちらは、Emacs のscheme-mode風に、評価の結果が run-scheme バッ
ファに表示されるようにする改造。
d.hatena.ne.jp/guttyon/20050929


862 名前:デフォルトの名無しさん [2005/09/30(金) 12:19:13 ]
defunとdefmacroってどう違うんですか?

(defmacro f0 (arg)
 (f1 arg))
という構文があって、
(defun f0 (arg)
 (f1 arg))
と置き換えると、使用されている場所でエラーが出ます。
使用されている場所で、f0 〜をf1 〜に置き換えても同じエラーが出ます。

等価な置換を教えてください(あれば・・・)
mapcarやapplyの中で使われていることは、関係していますか?

863 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 13:38:50 ]
>>862
マクロと関数の違いを君の言葉で説明しなさい。
それとなぜ置き換えたいと思ったのかもね。
話はそれからだ。

864 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 16:34:26 ]
>>862
関数とマクロは、似て見えるかもしれないけど、全く別のもの。
とりあえず↓のマクロの解説を読んでみて。
www.geocities.jp/m_hiroi/rakup/rakup20.html


865 名前:デフォルトの名無しさん [2005/09/30(金) 21:20:46 ]
kahuaのインストールができないんですが、ここで聞いてもいいですか?



866 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 22:46:02 ]
漏れは構わんと思うけどkahuaのMLを避けてわざわざ心ない輩に煽られたいのは何でなん?

867 名前:デフォルトの名無しさん [2005/09/30(金) 23:10:10 ]
今年もやるよーん
jp.franz.com/base/seminar-2005-11-18.html

868 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 00:45:58 ]
Gauche+emacsでslimeのようなシンボル補完ができないものか

869 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 02:31:12 ]
俺はシンボル補完よりもeldocぽいやつ+HyperSpecが便利で、schemeにも欲しい。

シンボル補完は、Gaucheには定義されてる全シンボルをとる方法あるんか?ってのと、
変数と関数の区別がないから不便そうだね、ってのがまず思い付く。

SLIMEといえばswank-scheme48がいつごろかに入ったね。
Emacsのscheme用環境というとquackが思い浮かぶけど使ったことないや。


870 名前:デフォルトの名無しさん mailto:sage [2005/10/01(土) 20:10:20 ]
Bigloo Development Environment ってどうよ。


871 名前:デフォルトの名無しさん [2005/10/02(日) 04:58:12 ]
schemeのマクロを解説したサイトとかないですか?
他のLispのマクロの知識もないんですが…
R5RS読むしかないんでしょうか。


872 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 08:19:19 ]
>>871
あれはけっこう難関。漏れも今悩んでる。
日本語リソースについては期待しないほうがいいと言っておく。

873 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 09:01:28 ]
define-syntaxは構文を書くのに向いている。
macroは何でもあり。
コツは概念の理解と慣れること。

874 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 11:49:06 ]
R5RSには定義だけで概念は書いてないからねえ

875 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 12:01:19 ]
犬飼さんの入門Schemeにちょっとばっかしマクロの記述あったけど
あれじゃダメかいな。



876 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 13:19:35 ]
>>871
書籍ならそこそこまともな解説が書いてある場合が多いと思う。

877 名前:871 mailto:sage [2005/10/02(日) 16:22:34 ]
ありがとうございます。日本語は期待してはいけないんですね…。
とりあえず、犬飼さんのを読ませていただいて、必要ならば、英語も含めてググってみます。

www4.ocn.ne.jp/~inukai/scheme_primer_j.html
okmij.org/ftp/Scheme/macros.html
community.schemewiki.org/?scheme-faq-macros

ちなみに、(R5RSには明示されていない)概念てどんなのでしょう

878 名前:デフォルトの名無しさん [2005/10/03(月) 12:19:19 ]
(define-syntax mac (syntax-rules () ((_ a ... b) '(b a ...))))

Chez Scheme、Dr.Schemeだと動いたけどこれってR5RS的には違法ですよね?
Gaucheだとエラー。

879 名前:デフォルトの名無しさん [2005/10/03(月) 21:38:39 ]
>>878
R5RSではダメだが、srfi-46で定義されている。



880 名前:デフォルトの名無しさん mailto:sage [2005/10/03(月) 21:55:06 ]
>>879
知らなかった。トンクス

881 名前:本田 [2005/10/04(火) 13:21:07 ]
>MIT CADR Lisp Machine Source code
www.heeltoe.com/retro/mit/mit_cadr_lmss.html
>Retrocomputing - MIT CADR Lisp Machines
www.heeltoe.com/retro/cadr/index.html

882 名前:デフォルトの名無しさん mailto:sage [2005/10/06(木) 20:46:51 ]
fun.sci.fukuoka-u.ac.jp/wiki/index.php?xyzzy
の Scheme モードで、追加機能の要望が募集されているみたい。

真っ先に欲しいのは、実行の中断(ブレーク)です。
うっかり(tarai 14 7 0) とかやると、延々と止まらなくなってしまうから。


883 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 06:43:57 ]
>>882
Scheme のプロセス握ってるバッファに切り替えて M-x kill-subprocess でいけません?

884 名前:882 mailto:sage [2005/10/07(金) 09:44:23 ]
>>883
確かにそうすれば止まりますが、プロセスを殺したくないんです。単に中断し
たいだけなんです。
コマンドプロンプトで MzSchemeを利用している時は、Ctl-C で user break
になります。たしか Petite Chez Scheme も同じ。

xyzzy の Schemeモードでもそれを利用したいんです。



885 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 13:44:37 ]
個人的にはxyzzyの話はxyzzyのスレか何かでやってほしい



886 名前:デフォルトの名無しさん mailto:sage [2005/10/07(金) 15:20:33 ]
募集されてるならそこでやればいい。
wikiのようだしその方が生産的でしょ。

887 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 21:10:39 ]
emacs の話も emacs スレかどこかでやってくれ

888 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 21:13:52 ]
>>887
その通りだと思うが、なんか唐突だな。w

889 名前:デフォルトの名無しさん mailto:sage [2005/10/09(日) 23:12:35 ]
せっかくだからこの機会に。
整えるときはいっきにやったほうが浸透しやすいじゃない?

890 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 00:01:17 ]
Lisper の使うEditorとしては
1 . Emacs
2 . Vi
3 . その他
な印象を受けるけど、Viの話題は出ないんだな。

891 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 01:14:48 ]
OpenMCL 1.0 リリース sage

892 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 02:05:18 ]
OpenMCL は Mac OS X が x86 に移行した後、どうするんだろうか。
x86 backend を一から作るのかな。

893 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 17:22:43 ]
>>890
おれバリバリScheme処理系作ってるけどWin厨なんでWZ使ってるよ?
普通EmacsやViなんて変態エディタ使わないでしょ。
あ、変態の反論とかエディタの話題振られてもこれ以上しないから。

894 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 17:31:04 ]
>>893
出た、言いっぱなし厨!w

895 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 19:52:51 ]
>>893
Viは確かに普通ではないが、Emacsはいたって普通のエディターだが。
まさか、CUAじゃないから変態とかいってんの?



896 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 20:35:56 ]
CUAってなあに?

897 名前:デフォルトの名無しさん mailto:sage [2005/10/10(月) 22:01:16 ]
GUAの反対に決まってるだろ

898 名前:デフォルトの名無しさん [2005/10/10(月) 23:26:47 ]
Vz厨だった漏れからは、Wzなど問題外の紛い物だったな。


899 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 03:49:37 ]
portable hemlock に guile emacs に、elisp を common lisp / scheme で
置き換えるプロジェクトは尽く上手くいっていないけど、みんな elisp で
満足なのかな。順調なのは xyzzy だけ?

900 名前:デフォルトの名無しさん mailto:sage [2005/10/11(火) 04:47:03 ]
そういうことやる人はたいがいEmacsと重なる文化圏の住人なので
・まあ文句はあるけどelispで結構暮らせる
・Emacs自体も開発が進む
・elisp既にたくさん
・Emacsを再び作るのは結構大変
でモチベーションが続かないんじゃなかろうか。

OSやユーザ層でEmacsと重なりにくい部分を選び、その環境に特化することを
特徴の一つとすることでxyzzyは生き延びているように思える。


901 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 11:56:55 ]
xyzzyがwindowsでそれなりに成功ところから推理すると、
二匹目のどぜうはMacにいると見た。

902 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 19:44:40 ]
単にUNIXで失敗してるだけだと思うが

903 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 20:57:42 ]
ttp://iiyu.asablo.jp/blog/

SICP第2版の訳について良し悪しで意見が分かれてる。
おまえらの意見は堂よ?

904 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 21:02:48 ]
>>903
いわゆる「悪い翻訳」ではない。ちゃんと読めるという意味で良い翻訳だと思う。

905 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 21:24:16 ]
とかなんとかいって興味をひいてアフィリエイトで
儲けようという作戦か?





906 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 23:01:44 ]
macroさえ使えれば
elispでもqsortが次のように書けるからね。
(defmatch qsort
( (x . xs) -> (append (qsort (lcomp y (y <- xs) (< y x))) `(,x)
(qsort (lcomp y (y <- xs) (>= y x)))))
( () -> '()))
末尾再帰除去の最適化さえあれば。

907 名前:デフォルトの名無しさん mailto:sage [2005/10/12(水) 23:20:20 ]
Common Lisp が気に入っているのは主に処理スピードなので、CL を土台にした
環境があったら嬉しいなぁ。スピードが必要な部分は C で書くというのも一つの
解であるとは思うけど。

908 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 00:03:16 ]
Matz 日記見て思ったんだけど、引数付きブロックは素直に
lambda(x, y) { x * y } みたいな構文にすればいいのに
うだうだ考えてるのって、彼はよっぽど Lisp が嫌いなのかな。

909 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 00:20:40 ]
Succinctness is Power


910 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 00:41:51 ]
>>908
プログラムがS式でなくなればLispの利点の8割くらいは失われると思う。

911 名前:デフォルトの名無しさん mailto:sage [2005/10/20(木) 03:14:21 ]
>>910
その8割と残り2割の解説よろしこ。

912 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 01:56:23 ]
木構造が直接書き下せなくなる.前置記法が失なわれる.なにより拡張する自
由がなくなる.そう自由だ.大事なのはそこだ.言語が拡張できなきゃ新しい
パラダイムを試す自由がない.

S 式をやめれば,そこに残るのは,高階関数,クロージャ,オブジェクト指向,
そんなあたりまえの行儀のいい退屈な言語だ.そんなものは 2 割にもみたない.

# まぁ,ちかごろは純粋なんちゃら〜ってほうがウケがいいみたいだが.

913 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 02:11:04 ]
えーっと、マクロ・ラブってことでいいっすか?

914 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 02:50:57 ]
いいです

915 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 12:59:35 ]
>>912

純粋なForth?



916 名前:デフォルトの名無しさん mailto:sage [2005/10/21(金) 15:08:09 ]
>>912
あなたが試してみた新しいパラダイムを2,3挙げてみて下さい。

917 名前:fumumu mailto:sage [2005/10/21(金) 20:46:16 ]
>>916
生理中ですか?


918 名前:デフォルトの名無しさん [2005/10/21(金) 22:54:18 ]
>>917
パラダイムでもないし、2、3と言っているのに1つだし、
全然ダメですねw

919 名前:デフォルトの名無しさん mailto:sage [2005/10/22(土) 10:11:56 ]
純粋なんちゃら でもDynamic型ができて、Dynamicでマクロと同等のことができればいいんじゃまいか。



920 名前:デフォルトの名無しさん mailto:sage [2005/10/22(土) 17:20:44 ]
よーおーこそー ここーえー♪

921 名前:デフォルトの名無しさん mailto:sage [2005/10/29(土) 15:27:48 ]
>>908
lambdaが新しい予約語になってしまうのが嫌なのでは。


922 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 08:47:21 ]
lispのキーワードが嫌ならjavascriptに習ってfunctionにでもすりゃいい。
何でもかんでも演算子にできりゃいいってもんでもないだろうに。

923 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 09:44:34 ]
Gauche(0.8.6_pre3) + Kahua(0.3.4) から PostgreSQL に繋ぎたいんですけど、
test.kahua で

(use dbi)
(dbi-make-driver "pg")

すると

*** ERROR: Compile Error: Compile Error: define-module can't be used
within sandbox module
"/usr/local/share/gauche/site/lib/dbd/pg.scm":9:(define-module dbd.pg
(use gauche.co ...

と言われて使えないです。

Kahua から Gauche のライブラリ使うには working-directory 内の plugins
ディレクトリに (allow-module dbi) のように書いたファイルを置かなければ
ならないようです。

(use dbi) はその方法でエラーは出なくなったのですが、PostgreSQL のドラ
イバは、(allow-module dbd.pg) するだけじゃ駄目みたいで。
分かる方いたら教えて下さい。


924 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 21:02:59 ]
>>922
lambdaが新しい予約語になると
lambdaという変数名その他を使ってるプログラムが全部動かなくなる。
それが嫌なのでは。


925 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 21:08:07 ]
いったい何の話してるの? 見えない。



926 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 21:35:41 ]
えーっと、とあるスクリプト言語ではλ式を {|x, y| x * y } と書くんだけど、
Common Lisp の &optional みたいにデフォルト値を書けるよう
({|x : 10, y : 20| ...} みたいな文法だっけ?) 拡張しようとしたところ、
これではデフォルト値の式に "|" 演算子が使えないことが判明。
そこでその言語のデザイナは悩んでいるわけだけど、Lisp みたいに
lambda (x, (y (x | #x20))) {...} みたいにすればいいだけだろうって話。

927 名前:デフォルトの名無しさん mailto:sage [2005/10/30(日) 22:05:19 ]
新しい予約語作ってもビクともしないPerl最高!

928 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 06:12:26 ]
予約語を増やしたくないのならマクロを使えるようにすればいいじゃない

929 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 22:13:55 ]
lambdaな壁紙ってどっかにない?

930 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 22:16:23 ]
>>929
京都へ行って写真撮ってくれば?
wwwfun.kurims.kyoto-u.ac.jp/MtLambda.html

931 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 22:56:24 ]
>>930
クソワロタw

932 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 21:35:48 ]
日本語訳
www.kurims.kyoto-u.ac.jp/~cs/lambda.html


933 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 01:17:09 ]
pc8.2ch.net/test/read.cgi/tech/1129287390/
ボロクソに言われてるぞ

934 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 01:25:14 ]
>>933
non-Lisperに何を言われてもLisperは動揺しない。

935 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 01:37:51 ]
>>933
そのスレはもう見るだけ時間の無駄だと思う。ちょっとでもひっかかる言葉が
あるとわらわらわらわらわらわらわらわらと厨ばかり涌いてくる。



936 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 03:04:37 ]
LISP厨はマジでキモいな
あのスレ見てそう思った

937 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 10:03:07 ]
論理性に欠けるスレはリンクしない

938 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 10:16:58 ]
Lisp Resource Kit キットの背景の壁紙が巨大なλだったような

939 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 11:56:34 ]
>>936
空気読めないのはどうかと思うよなあ
ああいう場所にしゃしゃり出て、一方的に「禁止な」はさすがに引いた

940 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 15:12:39 ]
はいはい、貴方も空気読みましょうね

941 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 16:11:02 ]
>>939
あれってやっぱLisp小僧だったんかな
ここには来てないよね?

942 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 19:08:14 ]
自演乙

943 名前:デフォルトの名無しさん mailto:sage [2005/11/07(月) 19:30:21 ]
自分にお返事を書く時は
もうちょっとわかりにくくした方がいいのにね。
程度がしれる。

944 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 22:57:53 ]
Gauche 0.8.6 でてるのに気がついた

945 名前:デフォルトの名無しさん [2005/11/09(水) 10:20:17 ]
Gauche0.8.5使ってるんだけど、0.8.6にどうやってバージョンアップできるの?



946 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 19:58:37 ]
>>945
tar xzvf Gauche-0.8.6.tgz
cd Gauche-0.8.6
gauche-config --reconfigure | sh; make; make -s check; make install

でも0.8.6ではデフォルトの文字コードが変わってるそうだから、
今まで --enable-multibyte=ほにゃら、をつけてなかったら
ちゃんと./configureを呼ばないとだめ。

あと拡張パッケージを入れてたら再コンパイル。

gauche-package install -r パッケージ.tgz


947 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 22:03:58 ]
>>944-946
昔からかもしんないけどWindowsMeではGaucheがエラーになるんだよなー。
Meで使えないNetApiBufferFree APIを呼んでる部分は適当に無効にしてるんだけど。
Wikiで報告はしてきたけど、河合タソはMeは持ってないみたいだし、
俺はヘタレだからソースを追ってもワケわかんねぇしで修正は期待できんかなぁ?
Meユーザーがいたら追試験ヨロ。

948 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 22:08:05 ]
Me ねぇ…さすがにもうサポートできる人は少ないだろう.つうか API が無い
とかだけではなく NT 系との挙動の違いもあるし修正は無理じゃねぇかなぁ….

949 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 22:48:57 ]
>>948
0.8.5はMeでも動いてるんだよ。
BoehmGCのバージョンをアップデートしてるとか書いてあるから、
もしかするとGCの方の問題かもしれんな。
GCだけ古いのでコンパイルできるかちょっとやってみる。

950 名前:デフォルトの名無しさん [2005/11/09(水) 23:57:08 ]
>>946
僕は--enable-multibyte=ほにゃら、をつけてなかったので、結論として下記になりますよね?
% gzcat Gauche-0.8.6.tgz | tar xf -
% cd Gauche-0.8.6
% ./configure
% make
% make install

結局バージョンアップというより、新規インストールという感じですね。
そしたら、0.8.5は上書きされるのかな?
よー分からん。寝よ。

951 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 02:57:20 ]
いやいやいや, そうじゃないだろ
付けてたなら 946
付けてないなら --enable-multibyte=eucc-jp しないと同じにならないよ

952 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 02:58:25 ]
s/eucc/euc

953 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 03:01:58 ]
今さらサポート打ち切り間近なOSなんか持ち出されてもウザいだけだろうしなあ

954 名前:デフォルトの名無しさん [2005/11/10(木) 12:18:24 ]
>>951
そうか。よくわかってなかった。これでいいですよね?
% gzcat Gauche-0.8.6.tgz | tar xf -
% cd Gauche-0.8.6
% ./configure --enable-multibyte=euc-jp
% make
% make install



955 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 12:27:33 ]
Gaucheって実行ファイル作れますか?



956 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 19:22:32 ]
>>955
今はできないけど、将来的にC言語への変換機能を導入する予定はあるらしい。

957 名前:949 mailto:sage [2005/11/10(木) 19:23:21 ]
GCをバージョンアップ前に戻したらMeでも動いたよ。

958 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 19:28:58 ]
>>955
Schemeのプログラムを文字列として埋め込むんでよければ簡単に作れる。
ネイティブコード化という意味なら>>956

959 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 19:33:32 ]
簡単に作れるなら作ってやれよ

960 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 19:36:27 ]
いいよ

961 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 20:14:05 ]
wilikiにそういうのがあったような気がする

962 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 15:28:54 ]
Lisp1.5で書かれたプログラムのサンプルとか
構文のマニュアルとかが参照できるサイトを
探していますがググってもなかなか見つかりません。
どなたかご存知ありませんか?




963 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 15:44:58 ]
>>962
なぜ今さらLISP 1.5なのかは謎だが、LISP 1.5 Programmer's Manualが基本。
Amazonでも買えるが、ぐぐったらPDF版が↓に落ちてた。
www.mahalito.net/mirrors/community.computerhistory.org/scc/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf

964 名前:949 mailto:sage [2005/11/11(金) 18:14:37 ]
>>955
gauche-install.in.cを見れ。

965 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 19:02:07 ]
>>961
これかな
ttp://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3ascm2exe



966 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 23:12:16 ]
>>963
なぜかと言われると、今のLispとどのくらい違うか興味があったからです。
ありがとうございました。


967 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 00:35:36 ]
Common Lisp と比べたら似ている所が無いくらい違う。


968 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 01:11:59 ]
S 式を継承した言語のユーザーは自分が Lisp を使ってると自覚してるのに、
M 式を継承した言語のユーザーは自分が使ってるのが Lisp だとは思ってないよね。

969 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 01:18:06 ]
それで?

970 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 01:27:33 ]
M式というと故・中西正和先生を思い出す。APPLE LISPとか。

971 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 08:17:04 ]
>>968
縦読みだな!

972 名前:デフォルトの名無しさん mailto:sage [2005/11/12(土) 14:28:27 ]
M式って、John McCarthyがLispの構文を
記述するとき、Lisp自身の構文(S式)
と区別できるように考えたメタ記法だから
Meta Expressionだという理解でいいかな。

で、M式を「継承」した言語なんてどこにもないと。


973 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 10:22:32 ]
John McCarthy 先生が今でも元気だと知って驚いたのは俺だけでしょうか

974 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 20:43:55 ]
ILCにも出張ってきて講演してるしね。
あっち系の方々の典型的な歳の取り方してぶよぶよに太ってしまわれたのが残念ではある。
Paul GrahamのサイトとかLisp Tシャツに使われてる先生のカッコイイ姿を想像して行くと
その変貌ぶりにさらに驚くと思う。

975 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 20:51:35 ]
>>974
出張ってきて、っていうか、今回のILCの開催地は先生の勤務先では?



976 名前:デフォルトの名無しさん mailto:sage [2005/11/13(日) 21:22:26 ]
NYC/2003にも居たよ。

977 名前:デフォルトの名無しさん mailto:sage [2005/11/15(火) 19:03:45 ]
すいません質問です
Javaに組み込み言語として使えるScheme処理系ってありませんか
あったら教えてください
Javaのプログラムを呼び出したり、あるいは呼び出されるようなSchemeが
ほしいんです

978 名前:デフォルトの名無しさん mailto:sage [2005/11/15(火) 19:27:06 ]
>>977
Kawa, SISC, JSchemeあたり?
URLはぐぐってくれ。


979 名前:デフォルトの名無しさん mailto:sage [2005/11/16(水) 11:55:29 ]
>>977
山ほどあります。お好きなものをどうぞ。
www.robert-tolksdorf.de/vmlanguages.html


980 名前:デフォルトの名無しさん mailto:sage [2005/11/16(水) 12:26:40 ]
981レスを過ぎるとレスなし期間が1日あるだけでdatに落ちるようになるよ

981 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 00:53:02 ]
もしかしたらすれ違いなのかもしれませんが,

(f)がエラー無く評価できるためのfの条件,
((f) 3)をエラー無く評価できるためのfの条件
を説明せよschemeの課題がでまして,ありいろいろ試したのですがどうしても
not applicatableとエラーがでてしまいます

どなたかお教えくださいませ

982 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 01:20:01 ]
(f): fは引数を必要としない手続き
((f) 3): fは引数を1個以上取る手続きを返す引数を必要としない手続き

983 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 01:29:36 ]
>>982

どうもありがとうございます!
一つだけ疑問なのですが,((f) 3)は引数が一つなのにfが引数を1個以上
とる手続きを返しても大丈夫なのでしょうか?


984 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 04:15:49 ]
引数一個以上てのは (lambda (x . y) ...)

985 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 09:56:06 ]
にらみ合いが続くかと思いきや、
結構あっさり981超えちゃったなー。
ところで誰か次スレ立ててくれ。
俺はムリ。




986 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 15:27:02 ]
スレ建て挑戦してみようかと思ってるけど
>>1 に書く過去ログPart9のURLわかる人いる?

987 名前:デフォルトの名無しさん mailto:sage [2005/11/17(木) 15:39:18 ]
>>11 にあるリンク先も死んじゃってる模様

988 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 01:27:54 ]
>>986
適当に当たりをつけてみたら発見しました。これだよね?
pc8.2ch.net/tech/kako/1069/10695/1069594582.html

サーバは過去ログ化作業時に板のあるサーバになる模様。


989 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 07:28:29 ]
>>988
そのURLをIEにコピペしてみたけど人大杉で確認することができず
専ブラだと何故か表示することができなかったんだけど
もしかして●持ってないと確認できないとかかな?

990 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 09:51:24 ]
ごめん、>>988は嘘、というか勘違い。忘れて。


991 名前:デフォルトの名無しさん [2005/11/18(金) 10:21:56 ]
立てました

Common Lisp, Scheme Part 14
pc8.2ch.net/test/read.cgi/tech/1132275726/

992 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 11:12:49 ]
>>991
乙です

立てようと思ってテンプレ用意してたけど出遅れちゃいました

993 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 14:14:28 ]
DAT落ち阻止のため、暇ネタを提供。
AutoCADではかつてカスタマイズにLISPが使われていたが、今ではVBAも広く使われて
いるらしい。そのVBA派によるサイト。

ギコでもわかる AutoCAD VBA
acesekkei.com/programming/vba/

いろいろ意見はあるだろうが、LISP退潮の実例の一つとしていろいろ考えてしまった。


994 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 16:00:56 ]
>>993
どんな言語であれ、言語人口やメンテ要員の確保とか考えると
この流れはある意味仕方ないかと。
例えばCLOSにも言える事だけどLISPでオブジェクト内のいりくんだ構造を
操作する場合エディタの支援があってもしんどいでしょ。
(目的操作 (参照 (参照 オブジェクト プロパティ名a) プロパティ名b))
と書かせるより演算子で
オブジェクト.プロパティa,プロパティb,目的操作()
と書けた方が直感的でわかりやすい。
こういうわずらわしさをLISPで適当なフロントエンドを作成して
でっちあげるような解決方法もあるんだろうけど、そこまでするなら
既に一般に広まってる適当な言語を採用した方が良いと判断したんでは。
VBA自体が特に優れているというわけではないので念のため。
VBAの採用はOfficeやActiveXなどゲイツ周りの影響でしょう。

995 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 16:48:10 ]
そういえば過去ログ倉庫やまとめサイトってないのかな
誰かWilikiとかで作らない?



996 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 17:31:54 ]
>>995
そういう Wiliki は flatline氏がだいぶ以前から提供しているのだが、
www.komaba.utmc.or.jp/~flatline/wiliki.cgi

作業者がいなくて、盛り上がってないのだ。
時間があったら自分もやりたいんだけど。


997 名前:デフォルトの名無しさん mailto:sage [2005/11/18(金) 22:55:06 ]
>>994
アクセッサが不恰好になるのは、S式を使う限り、なかなか解決しがたい問題
ですね。オブジェクト指向が不可欠になった現在、これは大きなデメリットだ
よなあ。

Gauche:スロットアクセス
practical-scheme.net/wiliki/wiliki.cgi?Gauche%3a%a5%b9%a5%ed%a5%c3%a5%c8%a5%a2%a5%af%a5%bb%a5%b9


998 名前:デフォルトの名無しさん mailto:sage [2005/11/19(土) 11:06:32 ]
997のリンク先とかは
with-slots で
(with-slots (hoge fuge hage) object
(lambda () hoge))

(lambda (obj) (ref obj 'hoge))
が限度じゃないか?または、
(define-method* obj ( (hoge fuga hage) <XX>)
hoge)
とか define-method の文字の長さの方が気になるし。

または、マクロ言語(OOとする)
(let ((x 1)
;(y (lambda () |hoge|)) ;コンパイル不可?
)
(OO obj
(display |hage|)
; (display (y))
))
とか。
データ構造と関数構造を分離しないと新たに面倒な問題が発生するし。


999 名前:デフォルトの名無しさん mailto:sage [2005/11/19(土) 14:13:35 ]


1000 名前:デフォルトの名無しさん mailto:sage [2005/11/19(土) 14:14:08 ]
次スレ

Common Lisp, Scheme Part 14
pc8.2ch.net/test/read.cgi/tech/1132275726/

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






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

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

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