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


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

Lisp Scheme Part18



1 名前:デフォルトの名無しさん [2007/08/12(日) 21:38:15 ]
過去スレ
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/
Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/
Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/
Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/
Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/
Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/
Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/
Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/
Part9: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part8: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part7: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part6: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part5: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part4: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part3: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part2: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part1: ttp://piza2.2ch.net/tech/kako/987/987169286.html

565 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:18:36 ]
それなら、defineせんでも、lambda式返せばいい。

566 名前:546 mailto:sage [2007/11/09(金) 12:24:49 ]
>547
ありがとうございます

make sbcl-core
rm -f /home/hoge/.sbcl/sbcl.core-with-slime
sbcl <<EOF
This is SBCL 0.9.17, an implementation of ANSI Common Lisp.
More information about SBCL is available at <www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
* (load "../src//slime-cvs/swank-loader.lisp")
load: not found
*** Error code 127

というメッセージが出ているので、makeの問題では無いと思うんですが…


567 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 12:35:36 ]
Scheme も internal define なんて導入せず、それ以前の Lisp みたいに
define は top level をいじることにしとけばよかったのにな。
そうすれば begin の
5.1 Programs
> At the top level of a program (begin <form1> ...,) is equivalent
> to the sequence of expressions, definitions, and syntax
> definitions that form the body of the begin.
5.2.2 Internal definitions
> Wherever an internal definition may occur (begin <definition1>
> ...,) is equivalent to the sequence of definitions that form the
> body of the begin.
みたいな特別扱いも不要だし
(define x 10)
(define y x)
y => 10
(let ()
  (define x 10)
  (define y x)
  y) --> error
なんてわかりづらいこともなくなったのに。

568 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 14:36:31 ]
beginのその特別扱いってなんであるんだ?
処理系書くとき邪魔だよねえ。

しかしdefineで内部関数を書けるのは便利。
labelsとかfsetとかは醜い。書きづらいし読みづらい。

569 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 15:16:43 ]
二つ目の方が、
(begin <form1> ...)じゃないから、
(begin (begin <definition1> ...))を機械的に、
<definition1> ...とsplicingするわけにいかないのがきつい…

こっちはR6RSではないんでしょ。
・Internal definitions are now defined in term of letrec*.

トップレベルの方はライブラリがらみでまた気にするところ増えたけど。



570 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 15:48:37 ]
(begin (begin <definition1> ...))が
(begin <definition1> ...)になって、次は、
<definition1> ...でいいんじゃないのかなあ?

その辺り、R6RSの方が解釈しやすい書き方だけど。
<body> <library body> <top-level body>と、
構文上のノンターミナル使って定義してあるから。
R5RSは文章での説明が多くて理解するのに頭を使う。



571 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:44:17 ]
The Little Shemerを簡単じゃないかと思衣ながら読んでいたら、
8章の途中から泣きそうになった(高階関数のあたり)。

何とか理屈はわかったけれど、身に付くかどうか・・・
がんばってみます。


572 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 23:47:21 ]
>>571
おお仲間だ!
multiremberEcoとかcontinuationとか出てきたあたりで学習速度がすっごいダウンするよね

573 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:50:26 ]
The Little Shemerは、
曖昧に理解せず、身に付けさせるための本だから、
ちゃんと読み終わったら身に付くよ。



574 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:56:59 ]
seasonedとかreasonedはどうだった?

575 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:38:29 ]
lisp で並列分散処理プログラムを実際に書いている人は居ます?
どういった処理系もしくはライブラリを使ってますか?
やっぱりほとんどいないのかな。。

576 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:57:24 ]
3行目があるせいで釣りにしか見えん。

577 名前:575 mailto:sageま、釣り用の言葉も有った方がおもしろいでしょ。 [2007/11/10(土) 13:40:41 ]
まじめに自分もその環境でコーディングしたいと考えています。
並列プログラミングの話ってほとんど語られていないと思ったんで。

578 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 14:08:27 ]
Erlisp は期待してたんだけど、どうなったのだろう

579 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 14:09:17 ]
cmlisp とか, *lispとかの話かい???



580 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 14:36:44 ]
CL のライブラリだよ

581 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:16:14 ]
アナルlisp?

582 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 00:04:04 ]
Schemeの入門はLittle Schemerしかないのかな。
手習いや湯浅先生の入門本は入手しづらいし。

583 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 02:55:56 ]
あなりすぷ・・・



584 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 12:23:59 ]
(cons 'ちんぽ 'アナル)

585 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 07:54:12 ]
`(ちんぽ . アナル)

586 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 09:50:01 ]
Python実装だけど並列処理の記述はLispでやる予定の俺がいますよ


587 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:13:04 ]
みんなschemeの処理系なに使ってんの?
みんな自作?

588 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:21:59 ]
ごうしゅをつかってまつ

589 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:49:07 ]
Gauche 時々 MIT

590 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 23:10:25 ]
587 じゃないけど...

MIT 使ってる人は初めてだ。もし良かったら、
どんな時に Gauche じゃなくて MIT を使うか
教えて下さい。

591 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 23:26:12 ]
MITしか入ってない環境で作業するとき・・・。

592 名前:591 mailto:sage [2007/11/12(月) 23:50:57 ]
職場で借りてるファイルサーバになぜか入ってて時々使ってるって程度の話ね。

593 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 23:58:55 ]
多くのディストリとかcygwinに、わりとデフォで入っているという理由で guile を使うことがある



594 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 00:16:13 ]
>>591,592
どうもありがとう。何か拘りがあって使ってらっしゃるのかと思いました。

595 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 00:46:26 ]
>>587
slang

596 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 01:25:24 ]
リストの中からある要素を探して、その要素の前にあるオブジェクトを破壊的に挿入する
にはどうしたらいいでしょう。例えば、3 の前に 'a を挿入したいです。
(let ((x 3))
(let ((ls (list 1 2 3 4 5)))
;; ここ
ls))
=>(1 2 'a 3 4 5)


597 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 02:27:53 ]
俺初心者で悪いけど、こういうこと?

(define (find-insert lst fnd val)
(define (find-cdr lst f)
(if (equal? (cadr lst) f)
lst
(find-cdr (cdr lst) f)))
(let ((l (find-cdr lst fnd)))
(set! (cdr l) (cons val (cdr l)))))

(define ls '(1 2 3 4 5))
(define x 3)
(find-insert ls x 'a)
(write ls)

598 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 04:01:03 ]
>>597
お付き合いいただいてどうもです。ヒントになりました。
setf を使えば良かったみたいです。3 の後になってしまいますが、
次善の策としてこれでも良いです。
(let ((x 3))
(let ((ls (list 1 2 3 4 5)))
(let ((place (member x ls)))
(setf (cdr place) (cons 'a (cdr place))))
ls))
=>(1 2 3 a 4 5)

599 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 12:00:26 ]
>>587
俺はPLTだな…IDEが付いてくるからって理由だけだが。

600 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 12:14:47 ]
gaucheとscm。
scmはdefaultでreadlineがあるからちょこちょこ書くときはこっち。

601 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 18:00:34 ]
scheme48(とguile)
有理数が使えていろんな環境で使えるのはこれくらいしかない(と思う)
ocsなんかも面白そうだけどまだあんまり使ったことない

602 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 18:05:51 ]
一度どれか使っちゃうと、
独自仕様部分のポーティングが面倒になる。

603 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 18:51:27 ]
つまりスキームなんてどれも使うな、コモンリスプ最強ってことか?



604 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 20:17:53 ]
>>603
Common Lispの処理系が動かない環境もあるんでつ(´・ω・`)

605 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 01:05:28 ]
どんな環境?

606 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 06:55:03 ]
zaurus-openbsdとか

607 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 13:22:12 ]
clispくらい動きそうだけどな

608 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 13:58:42 ]
つPalmOS

609 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 18:19:10 ]
>>607
動きそうだけど動かないですねぇ
clispもGCLもGaucheもMzSchemeもGambit-Cも

Gambit-Cはビルドは成功するけどリーダがいかれてて
3 -> 0
8 -> unbound error
とかになります
ソースが機械翻訳のCだから追う気になれないけど
規則性のあるバグだから見つかればつぶせそうです

scheme48は依存ライブラリもなく、GCも多倍長計算も有理数も自前なのにi386 onlyでポーティングされてるのが疑問
だから自分でパッケージ作っていれてます

610 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:48:16 ]
Linuxならi386以外にもportされてるけどな
ttp://packages.debian.org/sid/scheme48

611 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 01:12:44 ]
というかzaurusなら普通にscheme48のパッケージが流通しているわけであるが。

感度の悪いアンテナ持ってるやつってどうよ?

612 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 06:53:05 ]
>>611
zaurus-"OpenBSD"の話です
i386のみにportingされているのは事実です
i386じゃなくても動くのも事実ですけどね

613 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 07:42:01 ]
好きで使っているOSへの愚痴は、そのOSの板でやってくれ。



614 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:20:53 ]
そう、ここは好きじゃないのに使わされている OS への愚痴を書き込む場所です

615 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:48:10 ]
好きでも嫌いでもないOSの愚痴はどこに書き込んでもいいです

616 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:51:51 ]
押忍

617 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:58:29 ]
OCS ってこれか。

will.iki.fi/software/ocs/

618 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:17:35 ]
御意

619 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 13:14:54 ]
>>600
ledit使えばいいんじゃね? > readline

$ ledit gosh -i

$ alias gau='ledit gosh -i'してる。

620 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 15:57:12 ]
SECDR-Schemeってソース見てみたいんだけど、誰か持ってない?
テンプレのリンクは切れてて見れませんでしたわ。

621 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 23:48:16 ]
以前ダウンロードしたときはリンク切れから適当にURLを推定して当てた記憶があるですよ。

622 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 10:39:21 ]
だから、そのダウンロードしたソースを持ってないでしょうか?
って聞いてるんだわ。(^〜^)

623 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 10:49:39 ]

             「 ̄ `ヽ、   ______
             L -‐ '´  ̄ `ヽ- 、   〉
          /           ヽ\ /
        //  /  /      ヽヽ ヽ〈
        ヽ、レ! {  ム-t ハ li 、 i i  }ト、
         ハN | lヽ八l ヽjハVヽ、i j/ l !
         /ハ. l ヽk== , r= 、ノルl lL」
        ヽN、ハ l   ┌‐┐   ゙l ノl l
           ヽトjヽ、 ヽ_ノ   ノ//レ′
    r777777777tノ` ー r ´フ/′
   j´ニゝ        l|ヽ  _/`\
   〈 ‐ 持ってるが lト、 /   〃ゝ、
   〈、ネ..         .lF V=="/ イl.
   ト |お前の態度が とニヽ二/  l
   ヽ.|l         〈ー-   ! `ヽ.   l
      |l気に入らない lトニ、_ノ     ヾ、!
      |l__________l|   \    ソ



624 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 13:49:48 ]
CommonLispやSchemeでは、
2個以上の引数を取るandやorはマクロで定義されている様なんですが、
関数を使っても定義できるはずです。
なぜマクロを使っているのでしょうか。

625 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:01:08 ]
無駄な評価をふせげるから。

626 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:02:36 ]
そんで、大昔は、特殊形式でやる流儀もあったけど、
今はマクロで済むことはマクロでやる流儀。

627 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:39:20 ]
誰かfranzセミナー行った人、内容教えて

628 名前:624 mailto:sage [2007/11/23(金) 14:55:37 ]
>625
関数だと引数をみんな評価してしまうけど、
マクロならしないってことですか?

>626
すいません
特殊形式とマクロの違いがよくわかってないんですが、
引数を関数とは違う順序で評価するという点で同じで、
そのうち特殊形式はプリミティブなものと言うような理解で
いいんでしょうか。



629 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:32:46 ]
>>628
andもorも、「左から見ていって、途中でオシマイという運びになったらその後ろは評価しない」ものでしょ?
でも関数は「まずすべての引数を評価する」機構なわけで、それではandもorも実現できない。
一方、マクロは引数をまったく評価しない。だからこれを使って定義されている。

特殊形式は、すべての引数を評価するとは限らない関数、みたいなもので、
想像の通り、プリミティブなものだ。

てかこの辺り、Lispの勉強の初日や二日目の範疇じゃないか?

630 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:22:56 ]
遅延評価を導入すれば関数として統一的に定義じゃないかという吊りかも

631 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:36:14 ]
脳内のイメージが遅延評価な人なのかもしれん。Haskell でも試してみたら?

632 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:00:01 ]
>>628
なんのために書籍の「ON LISP」があると思っているのか

633 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:28:27 ]
賢い人を更に教育するため。

私たちにとっては,On Lisp でレベルアップして,
更にいろいろ教えてくれる様になったその人たちに
より突っ込んだを質問が出来るようになる。だな。



634 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 13:54:45 ]
初心者はANSI Common Lispがいいよ。On Lispはちょっと応用すぎる。
あとはEmacs Lisp Tutorialとかも参考になるだろうね。

635 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 14:04:06 ]
Scheme→Common Lispだと拒否しちゃいそうだけど
Common Lisp→Schemeだと使い分けられそう。

636 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 14:08:24 ]
プラットフォームがBlackboardならScheme、それ以外ならCommon Lisp。

637 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 15:35:48 ]
引数の評価についてはSICPでも超序盤で触れてるね

638 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 16:42:39 ]
>>633のような輩に無料で教えるほど賢い人は暇ではないだろうな

639 名前:624 mailto:sage [2007/11/24(土) 22:13:01 ]
>629
>andもorも、「左から見ていって、途中でオシマイという運びになったらその後ろは評価しない」ものでしょ?
なるほど、単なる論理演算かと思ってました
ありがとうございます

>630,631
最近Haskellをかじって
うはwwwマクロもういらねんじゃね?www
とかいって喜んでたんですが、やっぱりそれであってるんですね

640 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 02:35:01 ]
>>115-128 あたりで同じやりとりをした気がするけど、遅延評価でも関数じゃ setq とかが書けないんで、マクロは必要。

641 名前:デフォルトの名無しさん [2007/11/25(日) 03:53:03 ]
マクロがあってもスペシャルフォームは書けないはずだけど。

642 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 10:05:48 ]
setq って quote して set するだけだと思ってたけど、他に何かしてたっけ?

643 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:39:38 ]
遅延評価でquoteが書けるか?



644 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 16:05:00 ]
>>642
説得してる

645 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 16:12:29 ]
>>642
それだと(多くの処理系では)グローバルしかセットできない

646 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:16:37 ]
なるほど。
# 普段 ELisp しか使ってないから、 set するだけだと思ってた。

じゃ、 case とかが書けないからマクロは必要、に訂正かな。

647 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 01:33:45 ]
>>635
SchemeとXyzzyLispって俺はどうすれば…。

648 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 02:05:34 ]
どうしようもないね

649 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 03:29:28 ]
>>635
俺は逆だなぁ、CLだとなんでも揃うのだけどSchemeだと原理主義ありきなんで妥協してくれないから。


650 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:05:23 ]
原理主義ってどんなの?
「プリミティブがあれば充分」論者はR6RSで少なくなっていくと思う。
moduleとかOOとか。

651 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:21:24 ]
じゃあ、さっさと R6RS を実装しやがれ

652 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:33:55 ]
あんなR6RSを正直に完全実装するのがでてくるかな?
リファレンス実装以外で。

653 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:38:14 ]
今のメジャーな処理系が実装するというよりは、新しい処理系で R6RS 準拠ってのが出てきそうな気がする



654 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:57:18 ]
SchemeのC++0xやー

655 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 17:28:37 ]
個人的にはR5RSにリードマクロとsyntax-caseと{read,write}-byteとfile-seekとsystemと環境を明に操作する手段とimplicit forceとfull numeric towerとFFIさえあれば良いだけなんだけどなぁ
実装してる処理系はあるけど標準化されてないってのがネック
UTF-8ファイルの読み書きで1バイト読み込むのか1文字読み込むのか実装依存(1文字読み込む実装は知らないけど)だし

構文オブジェクトもファーストクラスにして
(define foo (syntax ...なんて構文で定義したり
applyの第1引数に構文オブジェクトを受け取るように出来たらいいのに
でもそうすると構文木解釈系でしか動かないだろうから相当遅くなるし
そもそも合成構文はevalされる前に展開されるから無理か

ただCLと違って値も関数もdefineで定義できるのに
構文定義だけdefine-syntaxってのが美しくない気がする
define-syntaxは処理系に対して、defineは実行系に対しての構文だと割り切るしか無いか

656 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:57:37 ]
そういえば以前PCLの翻訳が進んでるって話題でてたけどどうなったんだろう。
中止になったのなら半分まで進めて止まってる翻訳再開しようかな・・・

657 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 22:43:16 ]
>>656 あなたは「RHG読書会」というお告げが聞こえたような気がした --more--

658 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 11:59:24 ]
>>656
Lisp関係の書籍出している出版社に問い合わせてみては?
既に進んでいるなら、翻訳者陣に参加して加速してくださいw

659 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 16:42:48 ]
>655
ハゲド
ごちゃごちゃしたいならCLに行けば良いんだから
schemeは原理主義的な性格を守っていってほしい

構文オブジェクトは普通のマクロ入れると
コンパイラのコード生成ルールを吐いてくれるように出来ないかな?
ほんとに動的なマクロだと無理だろうけど...

660 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 13:58:46 ]
continuation の挙動について理解できていない点があり,
以下のような 2 種類の Scheme コードを書いてみました.

;;; case-A ----------------------------------------
(define continuation-A #f)
(define procedure
(lambda (n)
(define counter-A n)
(call-with-current-continuation
(lambda (k)
(set! continuation-A k)
(write counter-A) (newline)
)
)
(set! counter-A (+ counter-A 1))
(write counter-A) (newline)
)
)

(procedure 0) ; ==> 0 と 1 が表示される
(continuation-A #t) ; ==> 2 が表示される
(continuation-A #t) ; ==> 3 が表示される
(continuation-A #t) ; ==> 4 が表示される

;;; case-A おわり

661 名前:660 mailto:sage [2007/12/06(木) 14:00:00 ]
;;; case-B ----------------------------------------
(define continuation-B #f)
(do ((counter-B 0 (+ counter-B 1)))
((= counter-B 10) 'finished)
(if (= counter-B 5) (call-with-current-continuation (lambda (k) (set! continuation-B k))))
(write counter-B) (newline))
; ==> 1 2 3 ... 7 8 9 finished が表示される

;;プログラム実行部
(continuation-B #t) ; ==> 5 6 7 8 9 finished が表示される
(continuation-B #t) ; ==> 5 6 7 8 9 finished が表示される
(continuation-B #t) ; ==> 5 6 7 8 9 finished が表示される

;;; case-Bおわり

662 名前:660 mailto:sage [2007/12/06(木) 14:02:18 ]
case-A では
continuation-A が生成されたときから変数 counter-A が
ずっと見えたままであり,
continuation-A の呼び出しごとに counter-A の束縛値が
1 ずつインクリメントされていく.
(continuation-A が呼ばれるたびに,
「continuation-A 生成時における counter-A の束縛値」である 0 に
いちいちリセットされることはない.)

case-B では
continuation-B が呼ばれるたびに counter-B の束縛値は
「continuation-B 生成時の counter-B の束縛値」である 5 に
リセットされる.

多分基本的なところが理解できていないのだと思いますが,
この 2 つのコードにおける continuation 上の変数の見えかたについて
なぜこのような違いが生ずるか,お教えいただければ助かります.

663 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 15:14:39 ]
わざわざdoなんか使うから話が余計ややこしくなってる。
doを再帰に展開してごらん。



664 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 15:14:49 ]
doは再帰だから。
doのdefine-syntaxがR5RSに書いてあるから読んでみたらどうよ?
束縛環境を良く考えると分かるはず。↓while版

(define continuation-B #f)
(let ((counter-B 0))
(while (< counter-B 10)
(if (= counter-B 5)
(call-with-current-continuation (lambda (k) (set! continuation-B k))))
(write counter-B)
(write-char #\ )
(inc! counter-B))
(print 'finished))
(continuation-B #t)
(continuation-B #t)
(continuation-B #t)


665 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 15:15:39 ]
do は counter-B の値を破壊的に書き換えてない。
新しい環境作って、そこで同じ名前に別の値を束縛してるだけ。
だから元の場所に戻ると、そこの環境にはそのときの値が残ってるから、その値が参照される。

set! は破壊的に書き換えるから、元の値が残ってない。






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

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

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