- 1 名前:デフォルトの名無しさん mailto:sage [04/08/02 23:13]
- 過去スレ
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: ruku.qp.tc/dat2ch/0311/20/1042167213.html Part8: pc2.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/ 関連リンクは>>2-10あたり
- 52 名前:デフォルトの名無しさん mailto:sage [04/08/15 22:30]
- >>46
規格を調べてないから間違ってるかもしれないけど (atan) とかの関数が返すfloatの精度は処理系依存だったような気がする。 この点は、>>45 がうまくいっているなら大丈夫として、 >3. とにかくリテラルを `1d0' に. >もやりましたが,まだ warning が出ます. integer が必要なところまで floatにしてない? (elt '(a b c d) 1d0) とかは通らないよ。
- 53 名前:44 mailto:sage [04/08/15 23:56]
- >>52
> integer が必要なところまで floatにしてない? 大丈夫です.cmucl や sbcl では warning が出ないので, clisp 2.33.2 が何か間違えているのかと思いましたが, CLHS で *read-default-float-format* の example を試してみたら cmucl と sbcl は single-float と double-float しか実装されていないんですね... cmucl を使っていれば何も知らずに過ごせるんですね... ところで,sbcl ってちょっと bug ありませんか? dotimes から (return) しようとするとコンパイルが通らないのです. 簡単なテストではうまくいくのですが.
- 54 名前:デフォルトの名無しさん mailto:sage [04/08/16 02:08]
- >>42
ソースきぼんぬ。
- 55 名前:デフォルトの名無しさん mailto:sage [04/08/16 02:33]
- 月刊 Lisp Magazine
創刊号の付録は lambda closure の実装 9号まで集めると簡単に最適化 Lisp コンパイラが組めます。 その他、継続号を入手するのが困難な季刊 Schemer (予定)とか、 必要な時にだけ発行される Haskell User (未定)とか。
- 56 名前:デフォルトの名無しさん mailto:sage [04/08/16 03:22]
- > 必要な時にだけ発行される Haskell User (未定)とか。
lazyだけにいつまで待っても出ないヨカーン
- 57 名前:デフォルトの名無しさん mailto:sage [04/08/16 10:04]
- 読者が読むまで記事が書かれません
- 58 名前:デフォルトの名無しさん [04/08/16 11:44]
- >>51
#define LINESIZE 1024 char linebuff[LINESIZE]; char strbuff[256];
- 59 名前:デフォルトの名無しさん mailto:sage [04/08/16 21:46]
-  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」
―――――――――――――‐┬┘ | ____.____ | | | | | | | ∧_∧ | | | |( ´∀`)つ ミ | | |/ ⊃ ノ | | J ←さじ  ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄
- 60 名前:デフォルトの名無しさん mailto:sage [04/08/16 21:56]
- >>55 月刊 Lisp Magazine か Lisp Wizard 探訪 とかやってくれんかなぁ
今どこで Lisp が使われているか本当に知りたいよ
- 61 名前:デフォルトの名無しさん mailto:sage [04/08/16 22:32]
- 昔、bitにはLispの連載があったよなぁ。。
- 62 名前:デフォルトの名無しさん mailto:sage [04/08/16 22:51]
- Good Old Days
λ...
- 63 名前:デフォルトの名無しさん mailto:sage [04/08/16 23:24]
- Gauche-devel-jpのshelarcyがいたい。
webも痛い。page.freett.com/shelarcy/
- 64 名前:デフォルトの名無しさん mailto:sage [04/08/17 00:35]
- ウォチは板違いってテンプレに書いておいた方が良さそうだな
- 65 名前:デフォルトの名無しさん mailto:sage [04/08/17 00:41]
- 結局、月刊 Lisp Magazine はネタですか?
残念。
- 66 名前:デフォルトの名無しさん mailto:sage [04/08/17 00:41]
- >>64
やってんのは一人だろ、どうせ。何のつもりか知らんが。
- 67 名前:デフォルトの名無しさん mailto:sage [04/08/17 14:41]
- Lisp関係ないじゃん
- 68 名前:デフォルトの名無しさん mailto:sage [04/08/17 21:57]
- >>63
あれは誰かがサクっと書いて「ほれ。」と出して黙らせるしかないんじゃないかな。 放置が一番でしょう。 川合さんのメールは似たような奴を相手にしたら使えそうなので、 それを引き出したという点では価値があるといえる(w
- 69 名前:デフォルトの名無しさん mailto:sage [04/08/17 22:59]
- あれは単に匙を投げられただけでわ
- 70 名前:デフォルトの名無しさん mailto:sage [04/08/18 04:06]
- R*RSでは伝統的なマクロ(不健全なマクロ)をサポートする気はないのかな?
もうすでに却下されているのかな?
- 71 名前:デフォルトの名無しさん mailto:sage [04/08/18 10:32]
- >>70
一体何のために?
- 72 名前:デフォルトの名無しさん mailto:sage [04/08/18 12:50]
- hygienic の対義語が不健全か。その表現いいねー
(defmacro sekusu (timpo mamco) `(insert ,(if (hokei-p timpo) ... とかやっちゃうわけだ。ハァハァ
- 73 名前:デフォルトの名無しさん mailto:sage [04/08/18 17:14]
- Scheme の健全マクロを学ぶのに、おすすめのページはありますか?
- 74 名前:デフォルトの名無しさん mailto:sage [04/08/18 18:33]
- >>73
ないよ
- 75 名前:デフォルトの名無しさん mailto:sage [04/08/18 19:08]
- >>73
とりあえずブックマークにこんなの入ってた。 home.comcast.net/%7Eprunesquallor/macro.txt
- 76 名前:デフォルトの名無しさん mailto:sage [04/08/18 19:47]
- >>73
前スレ(Part 10)の786にも書いたんだけど、 Schemeの健全マクロについては、 ・日本語 オンラインで読める文献は >>5 に出てる「入門Scheme」以外にないと 思う。pdf ファイル。 #www4.ocn.ne.jp/~inukai/scheme_primer_j.html 書籍だったら、『プログラミング言語SCHEME』R.ケント ディヴィグ (著) www.amazon.co.jp/exec/obidos/ASIN/4894712261 ・英語 上の本の原書(英語版)がオンラインで読める。 www.scheme.com/tspl2d/index.html
- 77 名前:デフォルトの名無しさん mailto:sage [04/08/18 23:27]
- >>76
よっぱど英語を見たくないのでもなければ、下の英語のがおすすめ。 わかりやすいよ。
- 78 名前:デフォルトの名無しさん mailto:sage [04/08/19 00:27]
- Dr.Schemeって機能限定されてない?
defstructとか使えないような気がする・・・
- 79 名前:デフォルトの名無しさん mailto:sage [04/08/19 01:40]
- 「機能限定されてる」んじゃなくて、「機能拡張されてない」んでしょ
defstruct は srfi なんだから
- 80 名前:デフォルトの名無しさん [04/08/19 02:32]
- The Little Schemer の9章を解説してるwebページはないですかね?
もしくは理解するのに役立つwebページ、本でもいいですが…。 define 使わなくても lambda をたくさん使えば関数定義できるってことを 解説した章だったんでしょうか?さぱーりわかりません。ヽ(´ー`)ノ
- 81 名前:デフォルトの名無しさん mailto:sage [04/08/19 06:26]
- lambdaで関数定義ってことはY combinatorかなあ。
- 82 名前:デフォルトの名無しさん [04/08/19 08:46]
- 昨日の某大学の院試でSchemeの問題が出たんだけど…
できませんでした。orz
- 83 名前:デフォルトの名無しさん mailto:sage [04/08/19 10:29]
- >>80
あれは Y Combinator の説明なんだけど、はっきり言ってわかりづらい。 私は旧版の日本語訳『Scheme手習い』しか読んでないんだけど。 ちなみに Y Combinator とは、lambda だけで定義された再帰関数をつくる ための汎用関数。 とりあえずこんなページをどうぞ。 i.loveruby.net/ja/misc/ycombinator.html あと、このスレの Part 9 の 422 から、lambda だけで再帰する方法に ついて議論がある。個人的にはそこがとても参考になった。 そこを見ながら、自分でいろいろコードを書いてみて、Y Combinator が なぜこういう形でなければならないのか、納得できるまで追及した。
- 84 名前:デフォルトの名無しさん mailto:sage [04/08/19 12:44]
- >>82
ツバメの大学ですか? いや,まあ俺も(ry
- 85 名前:デフォルトの名無しさん mailto:sage [04/08/19 16:13]
- >>80 この説明はどうですか?
otoha.dyndns.org/diary/0408.html#19
- 86 名前:デフォルトの名無しさん mailto:sage [04/08/19 23:34]
- (sort lst #'< :key #'car)
で先頭に来るやつが,元の lst の中でどこにあったのか (position) を 知るにはどうしたらいいんでしょう? (position-if #'この中で一番大きい lst) みたいなことをやりたいのです.
- 87 名前:デフォルトの名無しさん mailto:sage [04/08/19 23:44]
- >>86
効率悪いけど、こんな感じじゃダメですか。 (let ((x '(1 2 3 4))) (position (apply #'max x) x))
- 88 名前:86 mailto:sage [04/08/19 23:53]
- >>87
ダメじゃないです.ただ,良く使われそうな操作なので, みなさんなら最も短くて効率の良い方法をご存じかと思ったんです. max が返すものは,元の要素と eq なんですよね.
- 89 名前:デフォルトの名無しさん mailto:sage [04/08/20 00:31]
- (define (hoge x)
(let loop ((max (car x)) (mnum 0) (x (cdr x)) (num 1)) (cond ((null? x) mnum) ((> (car x) max) (loop (car x) num (cdr x) (+ num 1))) (else (loop max mnum (cdr x) (+ num 1))))))
- 90 名前:デフォルトの名無しさん mailto:sage [04/08/20 00:44]
- Schemeですまんが、結局こうするしかないのでは。
(define (position-if pred lis) (if (null? lis) -1 (let loop ((pos 1) (ans-pos 0) (ans-val (car lis)) (lis (cdr lis))) (if (null? lis) ans-pos (if (pred (car lis) ans-val) (loop (+ 1 pos) pos (car lis) (cdr lis)) (loop (+ 1 pos) ans-pos ans-val (cdr lis))))))) (position-if < '(2 9 3 1 4)) => 3 (position-if > '(2 9 3 1 4)) => 1 (position-if < '()) => -1
- 91 名前:90 mailto:sage [04/08/20 00:48]
- 10分以上遅れて結婚とは…orz
- 92 名前:デフォルトの名無しさん [04/08/20 02:21]
- マスターするならCommonLispとSchemeどっちがいい?
- 93 名前:デフォルトの名無しさん mailto:sage [04/08/20 02:34]
- どっちも趣味
- 94 名前:デフォルトの名無しさん mailto:sage [04/08/20 06:53]
- >>93
どっちも優雅で知的で、極めるまでは時間が かかるけど学ぶことそのものが楽しみつつ行 なえる素晴しい言語って意味? それともどっちも金にならないオタク言語で ちょっとした満足感は得られるけど世間では 何の評価も得られなくて非生産的って意味?
- 95 名前:デフォルトの名無しさん [04/08/20 10:29]
- Lisp の実装によくある、car 部のお隣(物理的な隣のメモリ)に
直接 cdr 部を置くことで、(car . cdr) を4+4 = 8バイトで表す技法が理解できません。 確か Guile の中の人に、それの説明らしき文書があったような気がするけど、 今、Guile が手元にないのと、そもそも英語が碌に読めません。 どうしてこんなのでちゃんと動くんですか? 誰か詳しい人教えてください。
- 96 名前:デフォルトの名無しさん mailto:sage [04/08/20 11:16]
- >>95
アドレスのLSBから数ビットをタグに使う
- 97 名前:95 mailto:sage [04/08/20 11:39]
- いや、タグの話ではなくて。。。
例えば、 単純な (1 . 2) というペアだけならば話は分かるが、 (1 2. 3) となった場合とか、((1 .2) 3 4 . 5) となった場合とか、 どうして >>95 で良いのかが分からん。
- 98 名前:デフォルトの名無しさん mailto:sage [04/08/20 11:50]
- どこがダメになりそうだと思うのですか?
- 99 名前:95 mailto:sage [04/08/20 12:30]
- 例えば、ヒープを8バイト(セル2つ分)単位で確保して、
#define CAR(a) (*(a)) #define CDR(a) (*((a)|4)) みたいなマクロが定義されている場合、 仮に car 部がアドレス 0x12345670 に配置されて、 cdr 部がアドレス 0x12345674 に配置されるとして、 その cdr の cdr はどうするのさ?とか、 (#define CDR(a) (*((a)+4)) なら、まだ納得できるけど・・・) つか、上のような8バイト単位でメモリを切り取っていく 意味が良く分かっていないと思う(メモリの圧縮(=節約)の為 だという事ぐらいは分かるのだが)。
- 100 名前:デフォルトの名無しさん mailto:sage [04/08/20 12:33]
- 4バイトがセルへのポインタになったり即値になったりする様子がイメージできないのでは?
- 101 名前:デフォルトの名無しさん mailto:sage [04/08/20 12:48]
- >>96
>>99の例でいうと, car部は 0x5670**** へのポインタとみなされて cdr部は0x5674**** へのポインタとみなされるってことでいい? >>100 即値の場合も即値へのポインタじゃないの?
- 102 名前:デフォルトの名無しさん mailto:sage [04/08/20 12:55]
- 即値は即値ですよ。ふつうヒープ上に配置したりはしません。
- 103 名前:デフォルトの名無しさん mailto:sage [04/08/20 13:01]
- えーと、いわゆるcdr codingの話じゃなくて、consセルを
ポインタ2つ分きっかりで表す話をしてるんだよねぇ? それならどこがどうわからないのかわからないんだけど。 基本はcarもcdrもポインタでそ。 テクニックとしてめんどいのは、ポインタが指しているものが consセルなのかそれ以外のオブジェクトなのかの区別だけど、 それはconsセル以外のヒープアロケートオブジェクトの最初の ワードに即値でもポインタでもないようなタグを持つマークを置いて おけば、区別できる。 (ここで言う即値は、例えば30bit integerを2bitシフトして 下位2bitを01にしてポインタと区別する、というようなやつの ことね >>101 )
- 104 名前:デフォルトの名無しさん mailto:sage [04/08/20 13:03]
- CONSセルの値って全てがポインタだと思っていた。
即値が入ってる場合があるの? www.shiro.dreamhost.com/scheme/trans/icad-j.html > # 動的型付け。Lispでは全ての変数は実質的にポインタだ。変数ではなく > 値の方に型が付いており、代入や束縛は実質的にポインタのコピーで行われ、 > ポインタが指されるものには作用しない。
- 105 名前:104 mailto:sage [04/08/20 13:07]
- おや、すでに解答が>>103に書かれていた。
リロードすればよかった。スマソ。
- 106 名前:95 mailto:sage [04/08/20 13:42]
- >>100
>4バイトがセルへのポインタになったり即値になったりする様子がイメージできないのでは? ん〜、そこら辺は分かっていると思うんだけど。。。 >>103 >consセルをポインタ2つ分きっかりで表す話をしてるんだよねぇ? >それならどこがどうわからないのかわからないんだけど。 >>99 の例で言えば cons + car であるアドレス 0x12345670 の cdr が アドレス 0x12345674 なのは分かるけど、 アドレス 0x12345674 の cdr はどうなってるの?って事。 アドレス 0x12345678 になるならば話は分かるけど、 そうではなさそうだし・・・
- 107 名前:デフォルトの名無しさん mailto:sage [04/08/20 13:44]
- Cのポインタの理解ができていないだけのような気がしないでもない。
- 108 名前:95 mailto:sage [04/08/20 14:06]
- >>107
そうなの? それとついでに、セルを確保する際に、 必ず8バイト(セル2つ分)単位で メモリを切り取っていくという点も。
- 109 名前:デフォルトの名無しさん mailto:sage [04/08/20 14:10]
- >>95
ど素人っぽいけど その辺の話題は過去スレで散々がいしゅつだから、 過去ログさらっと流し読みしてみれば? 幸い全部残ってるし。
- 110 名前:デフォルトの名無しさん mailto:sage [04/08/20 14:13]
- >>106
>アドレス 0x12345678 になるならば話は分かるけど、 なるよ。 そのポインタが下位2ビットは使ってないことわかる? 例えばその2ビットをフラグとみなして識別に使ったりする。
- 111 名前:デフォルトの名無しさん mailto:sage [04/08/20 14:15]
- >>106
あーそうか、ポインタまるで理解してないね。 そういう事知ろうとする前に、C言語でもやったら?
- 112 名前:デフォルトの名無しさん mailto:sage [04/08/20 14:19]
- そもそもこの場合、0x12345674 は cons cell を表わす値としてありえないだろう。
cons cell が 8バイトアラインメントなんだから。 ありえない値の cdr なんて取れるはずがない。
- 113 名前:95 mailto:sage [04/08/20 14:20]
- >>110
>なるよ。 #define CDR(a) (*((a)|4)) ここで + 演算ではなく | 演算をしているでしょ? それではどうやってもならないと思うし、 また >>108 の回答にもなっていない。
- 114 名前:名無しさん@Emacs mailto:sage [04/08/20 14:36]
- 8バイトで align されてるってことは
a % 8 == 0 ってことだ。 この場合は 0<=i<7 の i に対して、a+i == a|i が成り立つ。 だから + でも | でもよい。
- 115 名前:デフォルトの名無しさん mailto:sage [04/08/20 14:42]
- もしかして (1 2 . 3) が
0x12345670 1 0x12345674 2 0x12345678 3 みたいに配置されると思ってるのかな。 0x12345670 1 0x12345674 cons 0x12345678 0x12345678 2 0x1234567c 3 だよ。 cdr-coding だと話は別だけど、今時 cdr-coding なんてやらないし。
- 116 名前:デフォルトの名無しさん mailto:sage [04/08/20 14:45]
- long一発で初期化できるというヨロコビはあるかも。通常の2倍の速さでコンパクションできるとか。
(コンパクションの必要があるかどうかは知らんけど)
- 117 名前:95 mailto:sage [04/08/20 15:18]
- >>115
>0x12345670 1 >0x12345674 cons 0x12345678 > >0x12345678 2 >0x1234567c 3 > >だよ。 あ、なるほど。それで分かりました。 でもそれでは余り8バイト単位で確保する意味が無いですね。 逆にメモリを使いそう・・・ ところで、cdr-coding ってなんですか?
- 118 名前:デフォルトの名無しさん mailto:sage [04/08/20 15:22]
- >>117
>でもそれでは余り8バイト単位で確保する意味が無いですね。 でも高速化の為なら意味があるか。 それだけ為なのかなぁ?
- 119 名前:デフォルトの名無しさん mailto:sage [04/08/20 15:35]
- 何バイト単位が最適だと思ってるの?
- 120 名前:95 mailto:sage [04/08/20 15:41]
- >>119
4バイト
- 121 名前:デフォルトの名無しさん mailto:sage [04/08/20 17:21]
- ポインタに4バイト使うなら、consセルは8ビットいるよ。
- 122 名前:デフォルトの名無しさん mailto:sage [04/08/20 17:22]
- 8ビットじゃなかった。8バイトだ。
- 123 名前:デフォルトの名無しさん mailto:sage [04/08/20 17:27]
- >>120
…まあ落ち着け。 cons セルはバイナリ・ツリー(二分木)のノード(節)だ。 一つの節から生える枝は必ずcar, cdr の 2本だから、 一つの cons セルは2本分の枝のアドレスを保持する必要があるんだよ。 だから 4バイト × 2 で8バイトが必要になる。
- 124 名前:デフォルトの名無しさん mailto:sage [04/08/20 17:35]
- >>120
あとな、この辺の図も見ておけ。 cons セルがどうしてポインタを2つ持つのか、いやおう無しに分かるから。 www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/listproc.html
- 125 名前:デフォルトの名無しさん mailto:sage [04/08/20 17:56]
- >>117
それをみんなずっと言ってたんじゃないかあぁぁぁぁ・・ぁぁぁぁ・・・・・・
- 126 名前:デフォルトの名無しさん mailto:sage [04/08/20 18:05]
- 単にconsセルを理解してないだけだろ。
- 127 名前:95 mailto:sage [04/08/20 18:59]
- いや、どうも。。。
結局のところ cons セルを "ナイーブに" 実装するだけだったら ポインタを2つ積めば良いのは分かっているんだけど、 確か世の中には、それをもう少し圧縮する技法が あったと思ってたので。 例えば >>115 のように、cdr となるセルを (物理的に)隣のメモリに配置することが出来て、 それを cons 表現の(内部的に)特殊な表現として扱えれば、 本来であれば (car . cdr) を表現するためには 3つのセルを使用しなければならないところを、 たった2つのセルで表現できてしまう。 ていうか、セル1つの表現が4バイトあればほぼ事足りてしまう。 (勿論再帰などの問題があるので、通常のポインタ2つ丸々 使用する例外的な表現も許すようにしておけばよい) Lisp で使うセルの大半は cons なので、 こういうのは結構お得な発想だと思っていたけど?
- 128 名前:デフォルトの名無しさん mailto:sage [04/08/20 19:06]
- >>127 それをcdr-codingっていうんだよ。
www-2.cs.cmu.edu/Groups/AI/html/faqs/lang/lisp/part2/faq-doc-9.html
- 129 名前:デフォルトの名無しさん mailto:sage [04/08/20 19:16]
- >結局のところ cons セルを "ナイーブに" 実装するだけだったら
>ポインタを2つ積めば良いのは分かっているんだけど、 >確か世の中には、それをもう少し圧縮する技法が >あったと思ってたので。 そういうことは最初から書いとけよ。 理由付けもなく4バイトとか言われても、理解してないとしか思えないんだよ。
- 130 名前:デフォルトの名無しさん mailto:sage [04/08/20 19:35]
- >>128
へーなるほど。。。 勉強になりました。
- 131 名前:デフォルトの名無しさん mailto:sage [04/08/20 19:37]
- >>127
> 本来であれば (car . cdr) を表現するためには > 3つのセルを使用しなければならないところを、 > たった2つのセルで表現できてしまう。 普通、「セル」といったら「cons cell」のことで、 (A . B) のペアを1つのセルと数えると思うんだが
- 132 名前:デフォルトの名無しさん mailto:sage [04/08/20 20:13]
- >>127
>結局のところ cons セルを "ナイーブに" 実装するだけだったら >ポインタを2つ積めば良いのは分かっているんだけど、 >>117 >あ、なるほど。それで分かりました。 リスト遊びから読み直せ。
- 133 名前:デフォルトの名無しさん mailto:sage [04/08/20 20:24]
- >>131
それだ! >>127 とか、読んでも意味が分からんかったんだけど、 95氏は 変数(ポインタ)一つのことを1つのセルと呼んでいるんだ。 普通はconsセルといえば、二つのポインタのペアのことだとしか思わないよなあ。 あと、95氏は、彼の読んでいるコードは、何らかの最適化がされているということを 前提に考えているみたいだけど、それって思い込みなのじゃないか? 実際は、普通(ナイーブ)に2つのポインタのペアとしてコーディングされてるんじゃ ないのか?>>115-117を見てると、そうとしか思えん。
- 134 名前:デフォルトの名無しさん mailto:sage [04/08/20 20:27]
- ポインタ一つをセルと呼んでるとしても、
>本来であれば (car . cdr) を表現するためには >3つのセルを使用しなければならないところを、 >たった2つのセルで表現できてしまう。 は理解不能。 なんで3つもいるの?
- 135 名前:95 mailto:sage [04/08/20 20:33]
- >133
>95氏は 変数(ポインタ)一つのことを1つのセルと呼んでいるんだ。 Lisp 実行上での言葉と、Lisp 実装上の言葉の違いかなぁ・・・ 「メモリセル」とか言わない? >>133 >実際は、普通(ナイーブ)に2つのポインタのペアとしてコーディングされてるんじゃ >ないのか?>>115-117を見てると、そうとしか思えん。 そう、「それ」が分かったんです。 単なる思い込みで、そのコードが所謂 "CDR-cording" をしていると ばっかり思っていたので・・・
- 136 名前:デフォルトの名無しさん mailto:sage [04/08/20 20:36]
- じゃあ95はポインタを二つ使うconsセルについては理解してるんだな?
- 137 名前:デフォルトの名無しさん mailto:sage [04/08/20 20:55]
- >>135
>「メモリセル」とか言わない? 言うけど、Lispスレではすっごく紛らわしいよ。実装寄りの言葉を使いたいのは 分かるけど、なら「メモリセル一つ(cons セルにあらず)」とか書いて欲しいよ。 でなきゃ素直にポインタと書くとか。 > そう、「それ」が分かったんです。 うー、だったらはっきりそう書いて欲しかった。じゃあもう完全に分かったのね? cdr-codingとかを除いて。 だけど、>>134とか見ると不安なんだけど。何に3つのポインタが必要なの?
- 138 名前:デフォルトの名無しさん mailto:sage [04/08/20 21:04]
- >>127
> 本来であれば (car . cdr) を表現するためには > 3つのセルを使用しなければならないところを、 > たった2つのセルで表現できてしまう。 tag + car + cdr で3つのポインタが必要なところを、 tag をアドレスのビットパターンに埋め込んで2つのポインタで表現できる、ということ? でも、次の行の > ていうか、セル1つの表現が4バイトあればほぼ事足りてしまう。 と合わせるとわけわからん。 「セル」がポインタ1つのことを指しているのなら「4バイトで "ほぼ" 事足りる」の意味が分からんし、 「セル」がconsセルのことを指しているのなら4バイト=ポインタ1つでは足りないし。 一体、ここでいう「セル」は何を指しているんだ?
- 139 名前:95 mailto:sage [04/08/20 21:12]
- >>137
御心配かけて誠にスミマセン。 >>134 では「3つのポインタが必要」と言っているのではなくて、 「3つのセルが必要」と言っているのです。 pair と car と cdr。計3つ。 これでどうでしょ?
- 140 名前:デフォルトの名無しさん mailto:sage [04/08/20 21:15]
- pairってなんだ・・・??
頼むからもうちょっと説明をしてくれ。
- 141 名前:95 mailto:sage [04/08/20 21:22]
- そんなに「セル」って言葉の使い方、変なのかな・・・
>>128 で紹介されていた葱メロンの FAQ でも、 それっぽい使い方をしているみたいだけど。 pair って単語も、ちゃんと >>128 に出ているし。
- 142 名前:デフォルトの名無しさん mailto:sage [04/08/20 21:26]
- 自分用語を使わず、面倒でもまわりくどい言い方で説明してくれyo。
あまりにも言葉足らずで、その単語が本当に本来の意味で使われているのかどうかすら判断できない。
- 143 名前:128 mailto:sage [04/08/20 21:33]
- 用語には文脈ってもんがあるんだからさぁ。
Lisp界では、文脈無しで「セル」って言ったら 「consセル」=「pair」=「carポインタとcdrポインタの対」 と思われるだろう。まあ、>>95 がそう思わないとしてもだ、 ここは曖昧さを避けるために区別できるような言葉を使っては くれまいか。 >>128 で紹介した文書には確かに「CAR cell」「CDR cell」 という言い回しが出てくるが、それはCDR codingの説明の 文脈であるって前提で、しかも最初に「CAR cell」「CDR cell」 と修飾して使ってるから意味が通るんじゃない。 個人的には、「slot」と言った方が混乱が避けられると思うがね。
- 144 名前:デフォルトの名無しさん mailto:sage [04/08/20 21:49]
- >>139
> pair と car と cdr。計3つ。 > これでどうでしょ? 了解。安心しますた。 >>141 > そんなに「セル」って言葉の使い方、変なのかな・・・ いや、変じゃないんだけど、質疑の最初の頃、話がが全然噛み合って なかったから、私はあなたの知識水準を思い切り低く見積もっちゃって、 これは consセルを指しているのだ、あなたが consセルを誤解してるのだ、 と思ってしまったんですよ。まあ、誤解は私のほうでしたね。申し訳ない。 あなたも、聞きたい答えを得るのに、たくさん説明しなきゃならなくて 大変でしたね。お疲れ様。
- 145 名前:95 mailto:sage [04/08/20 21:50]
- >>142
>自分用語を使わず、面倒でもまわりくどい言い方で説明してくれyo。 む〜。難しいですね。とりあえずやってみます。 >>138 >「セル」がポインタ1つのことを指しているのなら「4バイトで "ほぼ" 事足りる」の意味が分からんし、 ここで「ほぼ事足りる」と書いたのは、 >>128 で言う "CDR-NORMAL" のような存在があるからです。 こいつは4バイトじゃ表すことが出来ませんからね。 >「セル」がconsセルのことを指しているのなら4バイト=ポインタ1つでは足りないし。 それを無理やり足りさせてしまう技法を "CDR-cording" と呼ぶそうです。
- 146 名前:デフォルトの名無しさん mailto:sage [04/08/20 21:51]
- >>143
>個人的には、「slot」と言った方が混乱が避けられると思うがね。 なるほど、でも slot というとまた別のイメージが・・・ この手のものをあらわす正式な用語ってないんですか? >>144 いえいえ、どういたしまして。
- 147 名前:デフォルトの名無しさん mailto:sage [04/08/20 22:43]
- で、結局 >>127 の中で用いてる「セル」は「consセル」なの?「メモリセル」なの?どっちなのよ
- 148 名前:デフォルトの名無しさん mailto:sage [04/08/20 23:20]
- もういいだろ
- 149 名前:デフォルトの名無しさん mailto:sage [04/08/20 23:25]
- (gc)
- 150 名前:デフォルトの名無しさん mailto:sage [04/08/20 23:27]
- (exit)
- 151 名前:デフォルトの名無しさん mailto:sage [04/08/20 23:29]
- なんだ
うやむやにして終わりか
- 152 名前:デフォルトの名無しさん mailto:sage [04/08/20 23:39]
- >>147
これはメモリセルと断言できると思うよ。実装の話をしてるわけだし。
|

|