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


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

CommonLisp Scheme Part11



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あたり


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
これはメモリセルと断言できると思うよ。実装の話をしてるわけだし。

153 名前:デフォルトの名無しさん mailto:sage [04/08/20 23:50]
(1 . 2) を表現するために必要なメモリセルは二つだと思うんだけどなんか間違ってる?

154 名前:デフォルトの名無しさん mailto:sage [04/08/21 00:08]
>>153
実装次第。


155 名前:デフォルトの名無しさん mailto:sage [04/08/21 00:27]
>>154
や、CDR-cording とやらを使わない普通の実装でもよ。
普通の実装の場合でもアトムならポインタ使わないでしょ。リストの時だけ使う。
常にポインタ使う実装もあるのかもしれないけどさ。

156 名前:デフォルトの名無しさん mailto:sage [04/08/21 00:38]
(1 . 2) をあらわす即値を用意すればいいのでは。

157 名前:デフォルトの名無しさん mailto:sage [04/08/21 00:42]
>>156
それには何バイトいるの?

158 名前:デフォルトの名無しさん mailto:sage [04/08/21 00:44]
>>157
実装次第。

159 名前:デフォルトの名無しさん mailto:sage [04/08/21 00:51]
>>158
156のテクニックは必要な領域を減らすことができるの?

160 名前:デフォルトの名無しさん mailto:sage [04/08/21 01:19]
もういいだろ!



161 名前:デフォルトの名無しさん mailto:sage [04/08/21 01:26]
(gc!)

162 名前:デフォルトの名無しさん mailto:sage [04/08/21 01:35]
釣られすぎー


163 名前:デフォルトの名無しさん [04/08/21 03:09]
xyzzy とかで lisp-interaction-mode だと
自動的にLispのインデントをしてくれますよね?
でも、*.l を開いた後、自動インデントにならないのです
*.l のときは、Lisp用のインデントをしてくれるように
設定したいのですが、方法をご存知の方いませんか?
ググって調べたいのですが、何で調べたらよいのかも
よくわからないのです。

164 名前:デフォルトの名無しさん mailto:sage [04/08/21 03:15]
describe *auto-mode-alist*

165 名前:デフォルトの名無しさん mailto:sage [04/08/21 03:16]
妙に書き込みがあると思ったら…

95は>>63を彷彿とさせるなぁ…

166 名前:デフォルトの名無しさん mailto:sage [04/08/21 04:02]
>>165
そうか?95 はちゃんとした人だと思うが。
当初の勘違いのせいもあって、コミュニケーションがうまく
行かなかっただけじゃないのか?

167 名前:デフォルトの名無しさん mailto:sage [04/08/21 04:06]
ところで、Lisp スレも現在 Part11 に至っているわけだが、
その間、スレの参加者は増えたのだろうか?
URLのパラメータがUNIX時間なので、その差分を取ってみた。

(define x '(1091456033
       1075630259
       1069594582
       1058263391
       1042167213
       1031560687
       1023091882
       1016211619
       1008220265
       1002584344
       987169286))

(let loop ((x x))
 (if (null? (cdr x))
   '()
   (cons (/ (- (car x) (cadr x)) 86400.0)
      (loop (cdr x)))))

結論:全く傾向なし。いや、増減なしと見るべきか?
Lisp 人口は生きた化石のごとく変わらないのであろうか?

168 名前:デフォルトの名無しさん mailto:sage [04/08/21 04:33]
>>146
ワード?


169 名前:デフォルトの名無しさん mailto:sage [04/08/21 05:01]
レベルは下がり続けているな。

170 名前:デフォルトの名無しさん mailto:sage [04/08/21 05:54]
未踏の lego 用 XS lisp って本当にいじってみた人いる?
Google で「面白そう」って意見は結構見るんだけど
おれは Lisp 入門者だけど実装側の勉強にもなるかな?




171 名前:80 mailto:sage [04/08/21 10:35]
>>83 >>85
情報サンクス。
λ計算の理論から導出される公式として覚えておけば良いものみたいですね。
情報数学知らなかったので助かりました。


172 名前:デフォルトの名無しさん [04/08/21 19:06]
>>164
サンクス

173 名前:デフォルトの名無しさん mailto:sage [04/08/21 22:33]
気付いたら>>95のヴォケのおかげで無駄レスが・・

174 名前:デフォルトの名無しさん mailto:sage [04/08/23 02:51]
陸上の末続選手はちょっと Shiro さんに似てると思った

175 名前:デフォルトの名無しさん mailto:sage [04/08/23 14:55]
>>174
ぜ、全然似てない…!!!
images.google.co.jp/images?hl=ja&lr=&ie=UTF-8&c2coff=1&q=%E6%9C%AB%E7%B6%9A

176 名前:デフォルトの名無しさん mailto:sage [04/08/23 23:02]
>>174 馬鹿だな、親戚だから似てて当たり前


177 名前:デフォルトの名無しさん mailto:sage [04/08/24 13:01]
>>71
マクロを使ったプログラムの互換性を保障したいためでしょ。
デファクトなんだし、仕様に取り込んでもいいと思うのだが。
Schemeマクロを実装するよりも、ずっと手軽に実装できるしな。

178 名前:デフォルトの名無しさん mailto:sage [04/08/24 19:39]
>>177
legacyマクロでプログラムの互換性を保障するのは難しいよ。
バッチコンパイルする処理系だと、マクロから呼んでる関数が
マクロ展開時にはまだ無いってことがあり得る。
え、eval-whenですか? それはちょっと…


179 名前:デフォルトの名無しさん mailto:sage [04/08/24 21:11]
eval-whenは必須でしょ

180 名前:デフォルトの名無しさん mailto:sage [04/08/24 21:38]
そんなマクロはうちの子じゃありません



181 名前:デフォルトの名無しさん mailto:sage [04/08/24 22:28]
eval-whenてなに?

182 名前:デフォルトの名無しさん mailto:sage [04/08/25 00:53]
>>181
黒魔術。






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

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

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