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


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

Lisp Scheme Part22



1 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 23:58:40 ]
□過去スレ□
Part21: ttp://pc11.2ch.net/test/read.html/tech/1207300697/
Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/
Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/
Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/
Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/
Part15: ttp://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

656 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:20:29 ]
>>636
でもこんなんなる

(car (scheme:list 1 2 3))
mcar: expects argument of type <mutable-pair>; given (1 2 3)

(scheme:car (list 1 2 3))
car: expects argument of type <pair>; given {1 2 3}

657 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:18:35 ]
>>654
> なぜ馬鹿にされたのか、なぜ伝わらなかったのか
運悪くこのスレに馬鹿が集まっていたからですね。

658 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:12:40 ]
運の悪い奴って何やっても駄目だよな〜

659 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 13:56:49 ]
>>656
list と pair では型が違うと言ってるみたいだね。

660 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:12:29 ]
(scheme:car ((scheme:list 1 2 3))

とか

(car (list 1 2 3))

なら動くんだろ?

661 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 15:33:58 ]
ネタか・・・

662 名前:639 mailto:sage [2008/06/17(火) 17:55:27 ]
具体的にはspvw_memfile.cの1196-1198行目(clisp-2.45の場合)に
READ(&old_fsubr_tab,sizeof(fsubr_tab));
READ(&old_pseudofun_tab,sizeof(pseudofun_tab));
READ(&symbol_tab,sizeof(symbol_tab));
というコードがあるのですが、
3つ目のREADマクロ中のread(2)が失敗し、
i386ならEFAULTが、armならEACCESがerrnoにセットされます。
ところが3つ目のREADマクロの前に
{
int i;
for ( i = 0 ; i < sizeof(symbol_tab) ; i += 4000 /* i386の場合。armの場合は3999 */ )
((char *) &symbol_tab)[ i ] = '!'; /* '!'という値には意味はありません */
}
というコードを挿入すればread(2)は失敗しません。
i386なら4001以上、armなら4000以上のiの増分ではread(2)が失敗します。
symbol_tabというのはマクロで、実体はsymbol_tab_dataを指していますが
old_fsubr_tabとold_pseudofun_tabはbssセクションに置かれているのに対し
symbol_tab_dataはdataセクションに置かれているという違いがあります。

663 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:07:22 ]
>>657-658
運の悪い馬鹿は自己申告しなくて良し。

664 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:13:29 ]
>>663
お前という馬鹿がここにいるのは>>657-658の運のせいではないですよ^^



665 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:23:09 ]
>>664
常駐乙

666 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 18:46:40 ]
運の悪い奴は何やっても駄目、という言葉を実感しつつあるw

667 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:11:46 ]
適当な実感でものを判断する奴も全然駄目だけどねw

668 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:28:43 ]
「情報があるなら教えて欲しい、それだけ」ならじっくり待ってろよ、まったく。

669 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 19:31:29 ]
>>662
そこまで追ったのなら、馬鹿はほっといて、短い(CLISPに依存しない)再現プログラムを
作ってOpenBSDの人たちへ報告するのが良いと思う。

670 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 20:47:23 ]
>>662
その情報、ちゃんとOpenBSDの中の人たちに連絡したら感謝されると思うよ。

671 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:31:58 ]
>>656, >>660
ネタかと思ったけど、R6RSに慣れるまで大変ですねw
PLT Scheme 4.0 では、ペアはimmutable(変更不可)になりました。
mutable(変更可能)なペアは別のデータ型として提供されてるようです。
たぶん>>656, >>660で言ってることがそれだと思います。
手持ちのプログラムを食わせてみたら同様の文句を言われましたw
当面、372のままで行きます orz

672 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:40:50 ]
ようわからんが、C→C++でconstの扱いが変わったような感じなのかな。

673 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:50:10 ]
C++/CLIにポインタが2種類あるような感じだな

674 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:56:59 ]
immutableなconsセルというと後藤英一氏のHLISPが元祖だろうな。



675 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 00:37:18 ]
>>PLT Scheme 4.0 では、ペアはimmutable(変更不可)になりました。
これ、PLTのどっかに「どうなるかわかんないけど、取り合えずやってみるぽ」って感じの文章なかったっけ?
PLTさんお願いです、今回だけで止めてください m(_ _)m

676 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 01:47:56 ]
immutableにして何か利点はあるんですかね?
GPU対応とかconcurrent対応ぐらいしか思いつかない。う〜む。

677 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 02:00:52 ]
こうやって解決しないの?
(define cons mcons)
(define set-car! set-mcar!)
(define set-cdr! set-mcdr!)

678 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 02:15:13 ]
Schemeはペアはimmutableでも良いんじゃないかなあ。
そんなに破壊的操作してるもんかね。

679 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 03:27:38 ]
>>678
Streamを使えば破壊的操作を使うから多いと思う。

680 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 07:39:44 ]
>> 677
(define cons mcons)

define-values: cannot change constant identifier: cons

エラーになります orz

681 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 08:02:56 ]
>>680
マクロは?

682 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 08:21:59 ]
DrSchemeはネタの巣窟ですね
MzSchemeなら問題ないです

683 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 10:03:53 ]
>>675
これ?
blog.plt-scheme.org/2007/11/getting-rid-of-set-car-and-set-cdr.html

684 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 12:35:55 ]
>>683
それだ!サンクス
で、結局やることになっちゃったんだな。4.0でこうなったってことは...
そりゃ自分で書いたコードなら直すのも簡単だけどね orz



685 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 14:26:10 ]
set-car!: name is not defined, not a parameter, and not a primitive name
set-mcar!: name is not defined, not a parameter, and not a primitive name

使えない orz

686 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 15:29:02 ]
>>681
これで一応動く(PrettyBigモードとか)。SICPの学習には不便しないだろう。
(ただしR6RSとは共存出来ない。)

(define-syntax cons
(syntax-rules ()
((_ a b) (mcons a b))))

(define-syntax set-car!
(syntax-rules ()
((_ a b) (set-mcar! a b))))

(define-syntax set-cdr!
(syntax-rules ()
((_ a b) (set-mcdr! a b))))

687 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 15:55:29 ]
;こんな感じ。
;pre.plt-scheme.org/plt/doc/reference/mpairs.html
(require scheme/mpair)

(define-syntax cons
(syntax-rules ()
((_ a b) (mcons a b))))

(define-syntax set-car!
(syntax-rules ()
((_ a b) (set-mcar! a b))))

(define-syntax set-cdr!
(syntax-rules ()
((_ a b) (set-mcdr! a b))))

(define-syntax list
(syntax-rules ()
((_ a ...) (mlist a ...))))

(define Qoo (list 3 4))
(set-car! Qoo '(5 6))
(set-cdr! Qoo '(7 8))
(display Qoo) ; => {(5 6) . (7 8)}

688 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:07:21 ]
>>687
サンクス!
でも、こんどは
(map cons lst1 lst2)
が大破しました... "orz"
それなりの混乱が予想されるのにこうなったって事は何か良い見返りがあるはずだよね...

「隊長!comp.lang.schemeのアナウンスからPLT方面に潜入して偵察を試みてみます。自分が帰ってこないときは英語が解読できなくて玉砕したと思ってください orz」

689 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:10:45 ]
(define Qoo (list ))
(mlist? Qoo) ; => #t
(display Qoo) ; => () なぜか{}にはならない。

690 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:13:11 ]
>>688
pre.plt-scheme.org/plt/doc/reference/mpairs.html
ココの関数はマクロで修正しないとダメポ。
mmapが orz

691 名前:688 mailto:sage [2008/06/18(水) 16:24:41 ]
隊長!自分は現在683より報告のあったBLOGに到着しました。
驚くことにcomp.lang.schemeのアナウンスにはそれらしい情報は例のBLOGにしかありませんでした。
さらに驚くことにBLOGに対するコメントは好意的なものばかりのようです。
もしかして、自分はバカなのでしょうか "orz"



692 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:31:12 ]
Schemeは「破壊的操作の時だけアホになります」って言ってるみたいだ…

cons
せぇっと!
car
りば〜すぅ!
せっとくだー!
eq?

みたいな。

693 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:33:42 ]
(define-syntax map
(syntax-rules ()
((_ a b ...) (mmap a b ...))))

(map display (list 1 2 3 4 5)) ; => 12345{#<void> #<void> #<void> #<void> #<void>}

あれ?うまくいかない?

694 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:36:22 ]
(define-syntax map
(syntax-rules ()
((_ a b ...) (mmap a b ...))))

(map (lambda (x)(* x x)) (list 1 2 3 4)) ; => {1 4 9 16}
大丈夫らしい。



695 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:39:33 ]
正直、Schemeを名乗らないで別の名前を付けてくれと思った。

696 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:40:56 ]
Scheme 2.0 って感じだなw

697 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:45:05 ]
今後は従来のをScheme/NewJerseyとかダッサい呼び方するんだろうかw

698 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:49:23 ]
隊長!
BLOGにはimmutableなpairでないと

(define l (list 1 2 3 4 5))
(map (lambda (x) (set-cdr! (cddr l) 5)) l)

が変になるって書いてあるから試してみました。

Gauche(R5RS)
(#<undef> #<undef> #<undef>)
たしかにちょっと変。

Petite Chez(R5RS)
(#<void> #<void> #<void> #<void> #<void>)
たしかにちょっと変。

Guile(R5RS)
(#<unspecified> #<unspecified> #<unspecified>)
たしかにちょっと変。


699 名前:698 mailto:sage [2008/06/18(水) 16:50:09 ]
でもR6RSな処理系ではちゃんとエラーになっております。

Ikarus(R6RS)
Unhandled exception
Condition components:
1. &assertion
2. &who: map
3. &message: "list was altered"

Larceny(R6RS)
Error: car: 5 is not a pair.

Ypsilon(R6RS)
error in car: expected pair, but got 5

immutableなpairってやつはR6RSで必要になったから導入したわけじゃないのでしょうか?
自分はちょっと混乱しています "orz"


700 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:54:50 ]
>>698
d。俺が馬鹿だったw

701 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 16:57:25 ]
安全側に改良された感じだな。互換性無視については確信犯だろう。w

702 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:00:02 ]
Immutive Schemeって評判いいの?

703 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:02:15 ]
>>698>>699
それはmapの安全性の問題では?

704 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:05:25 ]
>>698のGaucheは、

gosh> (map (lambda (x) x) '(1 2 3 . 5))
(1 2 3)

と整合。set-cdr!の結果が#<undef>

Guile 1.8.3は、
> standard input:1:1: In procedure map in expression (map (lambda # x) (quote #)):
> standard input:1:1: Wrong type argument in position 2: (1 2 3 . 5)
> ABORT: (wrong-type-arg)
でエラー。




705 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:10:32 ]
immutable list相手なら、
(define (map f x)
(cond ((not (pair x)) (error "not pair"))
((null? x) ())
(#t (cons (f (car x)) (map f (cdr x))))))
の最初のチェックが不要になることが静的に分かるケースがあるわけですね。

706 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:13:16 ]
(define-syntax car
(syntax-rules ()
((_ a) (mcar a))))

(define-syntax cdr
(syntax-rules ()
((_ a) (mcdr a))))

707 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:19:18 ]
あまり抵抗せずに郷に入れば郷に従うのが良いのでは?
昔の教科書を一字一句変えずに動かしたいという理由が判らん。

708 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:40:54 ]
(define-syntax pair?
(syntax-rules ()
((_ a ) (mpair? a ))))

709 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:48:02 ]
お言葉ですが >>707 さん、自分がDrSchemeを使うのは「昔の教科書を一字一句変えずに動かしたい」からなのです><
バカと呼んでもらってかまいません...
やはりv372への「戦略的な撤退」でしょうか "orz"

710 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 17:58:15 ]
目的に合った処理系を。

711 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:02:27 ]
>>710
そうだよね。勉強が目的なのにそれ以外にエネルギー使うの無駄が多すぎる。
読み終わってから試行錯誤したほうがいいんじゃない?

712 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:31:53 ]
R"5"RSの教科書的実装ならばScheme48がいいかも
近々R6RS準拠になる予定だし

713 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:32:07 ]
immutableにした理由って、webアプリのインジェクション対策?

714 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:35:24 ]
>>713
なわけないw



715 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:36:15 ]
>>712
SICPはR5RSやR6RSってわけじゃないんだ。
DrScheme v372以前のPrettyBig modeが一番そのままで書けると思う。
他の処理系だとbegin使えとか言われる表記が満載>SICP

716 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:37:16 ]
新しいDrSchemeってドキュメントにThreadの項目が増えたの?

717 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:38:07 ]
>>710 >>711 >>712 >>715
みなさんご親切にありがとうございます m(_ _)m
どうやら「メジャーバージョンアップ!」しかも「R6RSに触れられる!」とあって舞い上がってしまったようです...
でも、今の自分はDrSchemeのマクロステッパーなしでは生きられません "orz"
耐え難きを耐え、しばらくの間4.0は封印しておきます><

718 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:38:18 ]
SICPならMIT-Schemeを使うとか

最近のMITはMzSchemeらしいけど

719 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:42:44 ]
>>718
つまりDrSchemeのMzSchemeモードと中身は同じ。

720 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 18:43:01 ]
>>718
ありがとうございます。MIT-Scheme使ってみたいんですが...
以前試した時はバイナリーが動かなくて、ビルドもできなくてあきらめてました (orz)
カーネルも新しくなったからもう一回挑戦してみようかと思います><b

721 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:15:24 ]
最近のMITのSchemeはPythonじゃないの?

722 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:46:58 ]
最近のMITのSchemeがPythonだとは初耳だw

723 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:37:58 ]
Scheme初心者の俺が通りますよ
質問なんだけど、トップレベルってなんか特別なの?

(define cc #f)

;A
(display (call/cc (lambda (c) (set! cc c) (cc 'hoge))))
(display 'fuga)
(cc 'moga)

;B
(begin
(display (call/cc (lambda (c) (set! cc c) (cc 'hoge))))
(display 'fuga)
(cc 'moga)
)

トップレベルでこーやったとき、Aが無限ループにならないのにBが無限ループになるのが理解できないの...

724 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:45:37 ]
>>723
継続はトップレベルをまたげない処理系が多い。(実装依存)
そういう意味ではトップレベルは特別。



725 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:50:50 ]
>>724
そーなのかーありがとー
実装依存か 処理系もかかないかんかったね がうちぇです もう一度いいます がうちぇです

726 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:51:51 ]
あれてきたときにスルーするをCommon Lispでどうかくのか?

(progn
 (loop for i in '(>>657 >>658 >>663 >>664 >>665 >>666 >>667 >>668) do
   (unintern i))
 (gc)
 'Done)

727 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:13:30 ]
>がうちぇ
セロ弾きの「ごーしゅ」じゃなかった?

728 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:19:17 ]
ガウチェ(・∀・)
の方がなんとなく小気味良い気がして

729 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:19:59 ]
がうちぇのがしっくりくるのは間違いない

730 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:25:26 ]
がうちぇの方が美味しそう

731 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:28:04 ]
ガウチェ(・∀・)
のほうがかわいいことは確か。

732 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:40:36 ]
>>723-725
DScheme v372 では両方ともhogefugamogaが返ってきた。一応、報告のみ。
理由は説明できないw

733 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:50:00 ]
>>724
R6RSでは明確に決まってなかったっけ?

734 名前:723 mailto:sage [2008/06/19(木) 02:12:50 ]
>>732
両方無限ループならわかるけど無限ループらないのはわからないwwww
アリガト!



735 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 09:55:33 ]
プログラムのトップレベルでの(begin <表現形式1> ...)は、beginのボディを形成する連続する式、定義、構文定義に等しい。(R5RS 5.1)

(display (call/cc (lambda (c) (set! cc c) (cc 'hoge))))
(display 'fuga)
(cc 'moga)
においてcall/ccが返し、ccに記憶される継続は
(lambda (x)
 (print (display x))
 (loop (print (eval (read) (interactive-environment)))))
と看做せるから無限ループに陥らない。
他方、
(let ()
 (display (call/cc (lmabda (c) (set! cc c) (cc 'hoge))))
 (display 'fuga)
 (cc 'moga))
においてcall/ccが返し、ccに記憶される継続は
(lambda (x)
 (display x)
 (display 'fuga)
 (cc 'moga))
と看做せるから無限ループに陥る。
(ccの末尾再帰呼出し)
beginをR5RS巻末のように合成構文として実装すると後者になるが
原始構文として規格通りに実装すると前者となる。

736 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 10:47:48 ]
>>735
ありがとう。
つまりbegin構文を、Gaucheは合成構文として実装してるけど、
DrSchemeは原始構文として実装してるということみたいですね。

737 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 13:21:59 ]
>>735-736
質問です。原始構文として実装してるということは、ifやletのような特殊形式ということなんでしょうか。
初心者なので特殊形式を知ったばかりですが、SICPにnew-ifという例があったのと似てると思いました。

738 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 14:26:32 ]
>>735>>736
R5RSの「原始構文」って何よ?

739 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 14:37:01 ]
Schemeのプリミティヴ構文はif、quote、lambda、define、set!であり、
letやcondなどは導出構文という事になってます。
(但しbeginやdefine-syntax、let-syntaxはマクロでは導出できない)
Common Lispでは特殊形式とマクロという区別がありましたが
Schemeでは両方構文として扱われます。

どうもbeginはトップレベルでは「beginがない式と同等に扱われる」のは表面上であり、継続は
(lambda (x)
 (begin (display x)
     (display 'fuga)
     (cc 'moga))))   ;; beginは冗長
として扱う処理系が多いようですね。

原始構文という言葉はプリミティブ式のうち構文であるものを指すつもりで使いました。

740 名前:723 mailto:sage [2008/06/19(木) 22:01:45 ]
>>735
ふおおなんか説明してくれてありがとうなんだけど何言ってるかわっかんねw

>beginのボディを形成する連続する式、定義、構文定義に等しい。
って、つまりbeginで囲ってないのと同じ意味になるぜよってこと?

741 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:09:48 ]
>>740
つまりR5RSの定義ではbeginのトップレベルにおいてDrSchemeのような挙動が期待されてる。
Gaucheを含めた他の処理系の挙動はR5RSとしてはおかしい。R6RS対応だからというわけでもないし。
これは>>724で言ってた処理系の実装依存の問題というより、うまく実装できていない処理系が多いということだと思う。

742 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:15:45 ]
それがR5RSの仕様に反する事をしないScheme48でも無限ループになるんですよ。
トップレベルのbeginはローカルスコープを作りませんよ〜くらいの意味にも取れますから
無限ループになってもR5RSに反するとは言い切れませんね。
R5RSは細かく呼んでいくと解釈の分かれる部分が多々ありますし。

743 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:17:17 ]
typo
呼んでいく→読んでいく

744 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:20:12 ]
Scheme48でも無限ループになるからR5RSではトップレベルのbeginで無限ループを作ることが仕様に盛り込まれてると?
Gaucheのバグだと思うなぁ



745 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:31:28 ]
いや、R5RSを読む限りでは無限ループになるのもそうでないのも
どちらも規格に反しない、という事だと思います。

746 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:44:07 ]
初心者の俺様からすれば無限ループになってくれたほうが理解しやすくて幸せだぞ

747 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:49:58 ]
仕様というのは、それに従って作ればバグが無いものが作れるとは限らない。
だけど、バグが無いものを作るべきだと思うよ。

748 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 03:08:58 ]
Schemeってどやってshort codingするの?
CならハッカーのたのしみやShort Coding等の本があるのに情報不足でしょ?

749 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 03:39:10 ]
どうしてshort codingしたいの?

750 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 07:10:41 ]
ChickenってWindowsBinaryのヤツ使えばexe吐けるの?
とりあえずインスコしてやってみてもうまく出来ないし公式サイトにもWindowsでexe作る方法書いてないっぽいし困ってしまったよ!
教えて!エロい人!

751 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 09:20:26 ]
クイックソートをcps変換したときappendってタイプするのがめんどくなって
(define ++ append)
ってしたけどこれはshort codingに入りますか

752 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 09:38:42 ]
大きなletrecの下で

753 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 11:40:49 ]
exeなんて飾りです。エロい人にはそれがわからんのですよ。

mingwとmsysをまずインストールしましょう。
そしてchickenのwindows用binaryをCドライブ直下に解凍しましょう。
msys.batを起動しましょう。
export PATH=/c/chicken/bin:$PATHと打ち込んでPATHを設定しましょう。
作られる実行ファイルはlibchicken.dll等に依存するのでPATHを設定しないと起動しません。
vi foo.scmと打ち込んでSchemeソースを作成しましょう。
csc foo.scmと打ち込んでコンパイルしましょう。
./foo.exeと打ち込んで実行しましょう。

ttp://www.mingw.org/
ttp://nchc.dl.sourceforge.net/sourceforge/mingw/MinGW-5.1.4.exe
ttp://nchc.dl.sourceforge.net/sourceforge/mingw/MSYS-1.0.10.exe

754 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 12:43:26 ]
>>739
> 原始構文という言葉はプリミティブ式のうち構文であるものを指すつもりで使いました。

かなり細部に渡る話をしているので、言葉は厳密に使った方がいいと思います。
特に今ではR6RSがあるので、何を指していっているのか分からなくなります。
R6RSには"primitive syntax"(9)というのがあって、

> Schemeのプリミティヴ構文はif、quote、lambda、define、set!であり、

とは違うものです。R5RSには"primitive syntax"という用語は出てきません。
またこれら(if, quote, ...)を使ったformは、R6RSの"primitive syntax"(9)の一部である
primitive expression types(9.1)にも含まれません。
R5RSでは含まれていた(4.1)のですけれど。




755 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:14:41 ]
(原始式のうち構文キーワードで始まるリスト)と定義、ならよろしいか?

756 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:33:57 ]
追加:R5RSにおける






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

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

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