Lisp Scheme Part19
..
413:デフォルトの名無しさん
08/02/01 17:32:32
arc> (fn (for) (for))
Error: "#<procedure>: expects at least 3 arguments, given 0"
何か変だと思ったら束縛するより先にマクロ展開してる
マクロと同じ名前の局所変数がマクロを隠すことがない
逆にマクロが変数を隠す問題はfuncallに相当するものを使って回避できる
(リストの先頭に来なければマクロに間違われることもないから)
414:デフォルトの名無しさん
08/02/02 01:56:42
URLリンク(blog.livedoor.jp)
415:デフォルトの名無しさん
08/02/02 06:13:13
>>385
その本もってるが、定理と証明ばっかりでさっぱり判らん。
1章はともかく、2章辺りから終始論理式と、「〜を仮定すると
〜を満たす〜があるとき〜は〜の〜という」みたいな口調で
うんざりした。だから何、と。書き方が数学屋さん向け。
時代的に無理だろうけど「はじめに」でLISPの基礎理論だ
とか言うなら、それで書いてくれた方が良い。
プログラマの心理は、手段みたいなものは最初どうでもよくて、
結果や効果からの興味で中身がどうなってるか、と関心が
向いてくと思うんだけど、そういうのを期待できる本じゃない。
416:デフォルトの名無しさん
08/02/02 09:19:47
Lispの本質はマクロです
SICP読んだだけの人にはわからんのです
417:デフォルトの名無しさん
08/02/02 12:46:00
>>413
schemeのスコープで評価してないだけじゃないかと。
schemeだと
((lambda (list) (list)) (lambda () 'うんこ))
=>うんこ
ちゃんとうんこが出てきます。
418:デフォルトの名無しさん
08/02/02 15:31:12
URLリンク(d3.jpn.org)
419:デフォルトの名無しさん
08/02/02 17:16:18
未完成の俺様Lispでポールが爆釣
420:ポール@アークヒルズ
08/02/02 17:24:44
沢山釣れた(@wぷ
421:デフォルトの名無しさん
08/02/02 18:05:26
アークヒルズってどのポールだよ?
422:デフォルトの名無しさん
08/02/02 19:38:25
arc いいんじゃない。なんか、こう、こざっぱりした感じで。
へ〜、イイ感じじゃん。
423:デフォルトの名無しさん
08/02/02 19:43:34
>>417
これで便秘解消ですね!
424:デフォルトの名無しさん
08/02/02 19:46:12
平方根があるのに三角関数がない?複素数はいいみたい。
arc> (sqrt 2)
1.4142135623730951
arc> (sin 3.14)
Error: "reference to undefined identifier: _sin"
arc> (acos -1)
Error: "reference to undefined identifier: _acos"
arc>
arc> (* 1+1i 1+1i)
0+2i
arc>
425:デフォルトの名無しさん
08/02/02 20:09:55
高階関数はSchemeと同じみたい。ファーストクラス、λと同じ。
(def sum (f n)
(if (is n 0)
0
(+ (f n) (sum f (- n 1)))))
arc> (sum sqrt 10)
22.4682781862041
arc>
426:デフォルトの名無しさん
08/02/02 20:38:53
スピードを比較するのは酷かもしれんけど...
arc> (def tak (x y z)
(if (> x y)
(tak (tak (- x 1) y z)
(tak (- y 1) z x)
(tak (- z 1) x y))
y))
#<procedure: tak>
arc> (tak 12 6 0)
12
arc> time
#3(tagged mac #<procedure>)
arc> (time (tak 12 6 0))
time: 18047 msec.
12
arc>
Schemeで書かれていることを考えれば悪くはない。
427:デフォルトの名無しさん
08/02/02 20:51:27
CommonLisp = ベンツ
Scheme = ポルシェ
Arc = アルファロメオ
428:デフォルトの名無しさん
08/02/02 21:10:43
なんだすぐ錆びるのか Arc
429:デフォルトの名無しさん
08/02/02 22:19:26
また遅れるみたいですね... orz
URLリンク(xach.livejournal.com)
430:デフォルトの名無しさん
08/02/03 00:56:48
きっと初心者がarcやったら混乱する
ポールは結局、前置記法に嫌気が差しただけに見える
pythonやMLみたいなのを設計した方が受けが良いと思う
頭に括弧がある限り、ただのLISP方言だよ
431:デフォルトの名無しさん
08/02/03 01:25:45
煽りでも荒らしでも喧嘩腰でもないレスに1行も同意できないのは珍しい。
432:デフォルトの名無しさん
08/02/03 02:04:24
Arcは予想通りというか、「Perlがこだわっているもの」を取り込んできた感じ(小飼氏の見方は半分くらい受け付けないけど)。
PaulにとってLispの価値は「美しいこと」より「現実的に強いこと」のほうにあって、
「スケッチ的に手を動かして、試行錯誤で形を作っていける力」「同じことを短く書く力」は
特に大きなウェイトを占めるから、かの言語にある程度近づくのは読めたことだろう。
ただしPerlと違うのは、Lispの構文(あるいは構文の無さ)の範疇でそれをやっているからこそ、
Perlの「しっかり覚えてもなお読みにくいという難しさ」は遠ざけることができているところかな。
「覚えなきゃ手が出せない替わりに、覚えれば物凄い速度で書き下ろせるし、混乱無く読めもする」
という所に着地するために、ArcはLispであることと、LispっぽくないことをPaul流に融合させてると思う。
>>430は「Lispである部分」を4行目、「Lispっぽくない部分」を1行目でネガティブに捉えているのだと思う。
でも、俺にはどちらも一つのヴィジョンのもとに選択され、良くまとまっているように思える・・・・・・のは多分、
俺がPaulの文章を読んでLispの世界に足を踏み入れた人間で、頭がまだちゃんと独り立ちしてないからかもしれないw
433:デフォルトの名無しさん
08/02/03 03:27:48
arcのfnは構造化代入が使える?のね。
srv.arcに
(with ((i o ip) (socket-accept s)) 〜)
みたいな使われ方があって、withの機能かと思ったら、
with自体はarc.arcに
(mac with (parms . body)
`((fn ,(map1 car (pair parms))
,@body)
,@(map1 cadr (pair parms))))
とだけ書いてあった。つまり最初のを展開するとfnにたらい回しされる。
((fn ((i o ip)) 〜) (socket-accept s))
socket-acceptは多値相当をリストで返すんかな?
こういうのは便利のような気もするけど、つい効率の方を気にしてしまう。
名前付き引数ってわけじゃないのか。
434:デフォルトの名無しさん
08/02/03 04:18:26
ac.scmに追加したら数学関数も動いた。
;;数学関数追加
(xdef 'sin sin)
(xdef 'cos cos)
(xdef 'tan tan)
(xdef 'asin asin)
(xdef 'acos acos)
(xdef 'atan atan)
arc> (cos 1)
0.5403023058681398
arc> (= pi (acos -1))
3.141592653589793
arc> pi
3.141592653589793
arc>
435:デフォルトの名無しさん
08/02/03 05:16:13
文字列の扱いが楽だね。
arc> (+ "abc" "def")
"abcdef"
そういうのアリ!
arc> ("abc" 2)
#\c
あ、いいかも。
lambdaが無いのは寂しいけど
arc> ((fn (x) (* x x x)) 3)
27
arc>
さっぱりして気持ちいいな。
よし、Arc 気に入った。
436:デフォルトの名無しさん
08/02/03 06:17:56
文字列を掛けるとどうなるん?
引き算すると??
437:デフォルトの名無しさん
08/02/03 06:19:04
(* "a" 5)
=>"aaaaa"
(- "abcde" "bcd")
=>"ae"
な、わけねーだろ
438:デフォルトの名無しさん
08/02/03 14:31:39
型推論によって
整数が期待されている所では
(+ "abc" "defgh" "ij") -> 10
文字列が期待されている所では
(+ "abc" "defgh" "ij") -> "abcdefghij"
リストが期待されている所では
(+ "abc" "defgh" "ij") -> ("abc" "defgh" "ij")
になるとか?
439:デフォルトの名無しさん
08/02/03 14:35:20
>>437
俺Lispはかなり初期からそれやってるw
440:デフォルトの名無しさん
08/02/03 16:42:47
Arcって文字列とリストを同じような感覚で操作できるみたいだ。
arc> (+ '(a b) '(c d))
(a b c d)
arc> (+ '(a b) '(c d))
(a b c d)
arc> (+ "ab" "cd")
"abcd"
arc> (rem 'b '(a b c d))
(a c d)
arc> (rem #\b "abcd")
"acd"
arc>
remはremoveかね。
441:デフォルトの名無しさん
08/02/03 16:45:05
マッカーシー博士がLispを開発した時の気分しだいではこうだったのかもしれない。
(def test (n)
(if (> n 90) 'AA
(> n 80) 'A
(> n 70) 'B
(> n 60) 'C
'D))
シンプルなcond節でifだけで用が足りるからいいかも
442:デフォルトの名無しさん
08/02/03 16:54:15
エディタの自動インデント規則もArc用をちゃんと作りたくなるな。
if とか with とか、2個単位でインデントしたくなる。
(if
c1
e1
c2
e2)
443:デフォルトの名無しさん
08/02/03 17:37:41
なんかキモ系のAAにしか見えねえw
444:デフォルトの名無しさん
08/02/03 17:40:58
ラムダ算法とかYコンピネータとかの概念を全く知らない
状態でLittle SchemerとかでSchemeを勉強しても
理解できますか?
445:デフォルトの名無しさん
08/02/03 17:43:17
知らないことを開き直るべきではないけど、
とりあえず「知らなきゃどこにも進めない」ってものではないよ。
446:デフォルトの名無しさん
08/02/03 17:51:47
>>>444
全く問題ないよ。
Schemerになりなさい。
447:デフォルトの名無しさん
08/02/03 17:57:42
>>444
読めるよ。全10章中、Yコンビネータが出てくるのは第9章だけ。
これを理解するのに "To Mock A Mockingbird" が巻末で推奨されている。
"Litle Schemer" は習うより慣れろの精神で書かれているので読みやすい。
448:デフォルトの名無しさん
08/02/03 18:02:35
Yコンビネータなんて見りゃどういう事か直感で判るだろ
449:デフォルトの名無しさん
08/02/03 18:03:57
Arcはハッシュが標準装備か。連想リストを使わないでこれもいいかも。
arc> (= var (table))
#hash()
arc> var
#hash()
arc> (= (var 'x) 'x1)
x1
arc> (= (var 'y) 'y1)
y1
arc> var
#hash((y . y1) (x . x1))
arc> (var 'x)
x1
arc>
450:デフォルトの名無しさん
08/02/03 18:11:41
この辺りはCommonLisp風なんだね。
arc> (cdr '())
nil
arc> (car '())
nil
arc> (is '() nil)
t
arc>
451:デフォルトの名無しさん
08/02/03 18:14:59
こんなのもあるんだ〜。
arc> (type "a")
string
arc> (type 1)
int
arc> (type 0.1)
num
arc> (type 'a)
sym
arc> (type '(a))
cons
arc> (type 1+1i)
num
arc>
452:デフォルトの名無しさん
08/02/03 18:19:04
>>445
>>446
>>447
>>448
アドバイスありがとうございます。
C++ばかりやっていて数学的基礎もあまりなく
どうかと思ってたのですが、まずはSchemerシリーズ
3冊を一読してから考えます。
453:デフォルトの名無しさん
08/02/04 00:54:10
一言語を学び始めるのに入門書を3冊読む?気軽にやれよ
454:デフォルトの名無しさん
08/02/04 04:14:49
The Little 〜
URLリンク(www.crockford.com)
455:デフォルトの名無しさん
08/02/04 12:54:21
Arcのリストと文字列って?
arc> (subst 'a '(b) '(a b c))
"aac"
arc> (subst "a" "b" "abc")
"aac"
arc>
456:デフォルトの名無しさん
08/02/04 13:26:47
【普通のやつらの】 Arc Language 0 【上を行け】
スレリンク(tech板)
ついカッとして立ててみた。悪気はなかった。たとえスレが寂れても
後悔するつもりはない。
457:デフォルトの名無しさん
08/02/05 15:07:50
正直サブタイトルは要らなかったと思う
458:デフォルトの名無しさん
08/02/05 15:15:24
荒し呼んでるようなもんだもんなw
459:デフォルトの名無しさん
08/02/05 16:24:01
ま、スレが盛り上がるのを期待してるよ。おれたちの期待の
斜め上を行ってくれ。w
460:デフォルトの名無しさん
08/02/05 18:29:14
アルファブロガー隔離スレだろ
461:デフォルトの名無しさん
08/02/05 18:55:28
たとえ荒氏でも廃れるよりはマシということかw
Arc自体、ちゃんとしたモノになるまでまだ何年かは時間が掛かるだろう。
462:デフォルトの名無しさん
08/02/05 19:06:57
現役処理系で動く3-Lispの系統の実装ってありますか?
3-Schemeとか、3-Arcでもいいです。
; Smithの元の実装はMacLISPでした。
463:デフォルトの名無しさん
08/02/05 19:12:07
HtDP (How to Design Programs) って読んだ人いる?
URLリンク(www.htdp.org)
これどんなもんなんかな?
464:デフォルトの名無しさん
08/02/05 21:45:46
>>463
お前が読めばいいだろ。
465:デフォルトの名無しさん
08/02/06 09:32:49
>>464
そんないじわるな事言わないで><
466:デフォルトの名無しさん
08/02/06 10:17:02
何かと思ったら全部オンラインで読めるじゃん
読むぐらい自分でしろよ
467:デフォルトの名無しさん
08/02/06 10:20:38
つーか読みもしないで損得勘定してるのが気に入らんな。
消え失せろ。
468:デフォルトの名無しさん
08/02/06 12:18:18
>>467
偉そうな事言わないで><
ネットで吠える事しかできない低能くん。
469:デフォルトの名無しさん
08/02/06 12:30:13
自爆かよ
470:デフォルトの名無しさん
08/02/06 15:22:53
>< ←これがきもい
471:デフォルトの名無しさん
08/02/06 15:34:42
468 デフォルトの名無しさん [sage] Date:2008/02/06(水) 12:18:18 ID: Be:
>>468
偉そうな事言わないで><
ネットで吠える事しかできない低能くん。
472:デフォルトの名無しさん
08/02/06 19:30:38
>>463
以前ざっと読んだよ。
いきあたりばったりでしかプログラム書いたことのない無能向け教科書。
473:デフォルトの名無しさん
08/02/06 20:25:59
>472
つまりごく当たり前の事しか書いてないと言いたいわけか。
474:デフォルトの名無しさん
08/02/06 21:07:29
>>473
思考の段取りもつけられないようなバカも
少なからず存在しているのが世の中なわけで。
プログラミング上の概念については何がとりあげられているかは
目次見ればわかる。あとはデザイン・レシピの部分を拾って
ざっと流せば自分にとって読む必要のあるなしは判断できるだろう。
475:デフォルトの名無しさん
08/02/06 22:03:52
>>474
> 思考の段取りもつけられないようなバカも
> 少なからず存在しているのが世の中なわけで。
ちゃいます!!!
"少なからず"ではなく, 彼らの方が多数なんです, 現場に行けば...
476:デフォルトの名無しさん
08/02/06 22:31:14
現場に恵まれていませんね
477:デフォルトの名無しさん
08/02/06 23:02:29
... まあええやん。次いこ。
478:デフォルトの名無しさん
08/02/07 00:23:25
>>474
絡む気は毛頭ないですが、
ざっと読むだけで必要、不必要が分かるってのは
言い過ぎな気がします
ざっと見た人が不必要だと思ったものでも、じっくり
読めばありな部分とかはないもんですかね?
基本的に安いものじゃないんで本はじっくり見る派です。
479:デフォルトの名無しさん
08/02/07 02:41:50
関数型言語マニアのための論文紹介3:FelleisenとSICPとHTDP
URLリンク(d.hatena.ne.jp)
SICP目次
URLリンク(d.hatena.ne.jp)
HtDP目次
URLリンク(d.hatena.ne.jp)
HtDPはSICPより易しいです。
でも「計算機プログラムの構造と解釈」を読み通す根性がないなら
英語アレルギーを乗り越えてHtDPを読むのはなおさら無理です。
素直に「計算機プログラムの構造と解釈」を買って熟読しましょう。
480:デフォルトの名無しさん
08/02/07 05:48:04
どこかのスレにあった紹介だと思うが、
よほどの超絶英語コンプレックスだったんだな、それ書いたやつ。
481:デフォルトの名無しさん
08/02/07 07:51:12
>>478
ママに読んでもらえバカ。
482:デフォルトの名無しさん
08/02/07 08:00:49
じゃあ僕はコンピューターおばあちゃんに読んでもらいます。
483:デフォルトの名無しさん
08/02/07 12:51:51
guileはutf-8で日本語は使えないのでしょうか?
484:デフォルトの名無しさん
08/02/07 20:44:33
>>483
> guileはutf-8で日本語は使えないのでしょうか?
guile> (let ((s "日本語表示テストです."))
(string? s))
#t
guile>
485:デフォルトの名無しさん
08/02/07 20:51:57
日本語が使えるが何を意味してるかによる
486:デフォルトの名無しさん
08/02/07 21:12:09
まあ、日本語なんてこっちじゃ乞食でも気違いでも使ってるからね
487:デフォルトの名無しさん
08/02/07 22:59:39
gosh> (define (日本語が使えますか?) #t)
日本語が使えますか?
gosh> (日本語が使えますか?)
#t
488:デフォルトの名無しさん
08/02/07 23:27:38
日本語schemeキタコレ
489:デフォルトの名無しさん
08/02/08 00:20:27
全角カッコのあつかいはどうなるのでしょうか
490:デフォルトの名無しさん
08/02/08 01:27:27
全角なんてありませんよw
491:デフォルトの名無しさん
08/02/08 01:34:32
lispとかschemeとかやってるとチョコレートもらえないって
先輩が言ったんですけど、ほんまですか?
492:デフォルトの名無しさん
08/02/08 01:36:14
あ、それは本当です。でも人に喋っちゃ駄目だよ。
493:デフォルトの名無しさん
08/02/08 01:38:25
いつもの倍でお得になります。
494:デフォルトの名無しさん
08/02/08 01:47:57
チョコレートもらえないからlispとかschemeとかやって
せつないきもちをまぎらわすんだよ
495:デフォルトの名無しさん
08/02/08 06:09:52
チョコレートなんてLispで書けばいいだろ。
496:デフォルトの名無しさん
08/02/08 08:51:30
((lambda (choco) (choco choco)) (lambda (choco) (choco choco)))
497:デフォルトの名無しさん
08/02/08 10:33:35
guileでUTF-8で
guile> (define hoge "ほげほげ")
guile> hoge
"?\x81??\x81\x92?\x81??\x81\x92"
guile> (string-length hoge)
12
となってしまうけど、4にはならないの?
498:デフォルトの名無しさん
08/02/08 15:26:02
>>497
guileではcharacterは8bitだったはず
(integer->char 256)はエラー
バイナリデータと文字が混在するファイルを扱う場合は
こっちのほうが割り切って使えるからいい
499:デフォルトの名無しさん
08/02/08 16:31:45
ちょうどいいからお前らにUTF-8の文字数を数える
プログラムでも書いてもらおうかな。
【問題】上のGuileのような文字列のバイト列を
UTF-8とみなし、その文字数を返す関数を書け。
500:デフォルトの名無しさん
08/02/08 16:44:49
宿題スレでLispの質問しちゃいけないわけじゃないでしょ?
501:デフォルトの名無しさん
08/02/08 17:15:55
(define (utf8len str)
__(begin (define (follow-char? c)
____________(char<=? #\200 c #\277)))
__(and (string? str)
_______(let ((strlen (string-length str)))
_________(let loop ((acc 0)
____________________(i 0))
___________(cond ((= i strlen) acc)
_________________((char<=? #\0
___________________________(string-ref str i)
___________________________#\177)
__________________(loop (+ acc 1) (+ i 1)))
_________________((and (< (+ i 1) strlen)
_______________________(char<=? #\300
________________________________(string-ref str i)
________________________________#\337)
_______________________(follow-char? (string-ref str (+ i 1))))
502:デフォルトの名無しさん
08/02/08 17:19:21
続きが書き込めない
503:デフォルトの名無しさん
08/02/08 17:52:54
;; SICP挫折中の見習いです
(define (utf8-string-length s)
(define (first-byte->length b)
(define byte (char->integer b))
(cond ((<= #x00 byte #xbf) 1)
((<= #xc0 byte #xdf) 2)
((<= #xe0 byte #xef) 3)
((<= #xf0 byte #xf7) 4)
((<= #xf8 byte #xfb) 5)
((<= #xfc byte #xfd) 6)))
(define strlen (string-length s))
(define (strlen-iter index len)
(if (<= strlen index) len
(strlen-iter (+ index (first-byte->length (string-ref s index)))
(+ len 1))))
(strlen-iter 0 0))
504:デフォルトの名無しさん
08/02/08 17:53:58
__(loop (+ acc 1) (+ i 2)))
_((and (< (+ i 2) strlen)
_______(char<=? #\340
________(string-ref str i)
________________#\357)
_______(follow-char? (string-ref str (+ i 1)))
_______(follow-char? (string-ref str (+ i 2))))
__(loop (+ acc 1) (+ i 3)))
_((and (< (+ i 3) strlen)
_______(char<=? #\360
________________(string-ref str i)
________________#\367)
_______(follow-char? (string-ref str (+ i 1)))
_______(follow-char? (string-ref str (+ i 2)))
_______(follow-char? (string-ref str (+ i 3))))
__(loop (+ acc 1) (+ i 4)))
_(else #f))))))
これならどうだ
505:デフォルトの名無しさん
08/02/09 21:41:09
Windows Vistaなんだけど、
SBCL1.0.13よりLarcenyのほうが圧倒的に速いんだけど
こんなものなの?
506:デフォルトの名無しさん
08/02/09 21:52:43
コンパイルした?
507:デフォルトの名無しさん
08/02/09 22:12:21
>>462
3-Schemeと言っていい、Brownと後継Bloodはみつからず、
その代わり米澤研のRScheme, Blackが見つかりました。
RSchemeは論文に全コードが、Blackは米澤研のWebサーバ:/pub/black
508:デフォルトの名無しさん
08/02/09 23:38:58
ウィンドウスxpで使えて最初から
hspみたいなライブラリがついてる実装って無い?
509:デフォルトの名無しさん
08/02/10 01:03:55
>>505
測定したプログラムや測定方法を書いてくれたら追試してくれる人が居るかもよ
510:デフォルトの名無しさん
08/02/10 01:06:52
Larcenyのほうが設計が10年以上新しいんだし、そんなもんじゃね。
>>508はPLT Schemeとかどうよ。
511:デフォルトの名無しさん
08/02/10 03:04:12
scsh という Scheme シェルを入れてみた。未だ起動もしてないけど。
URLリンク(www.scsh.net)
それだけ。
512:デフォルトの名無しさん
08/02/10 08:43:08
>>508
つ URLリンク(community.schemewiki.org)
つ URLリンク(community.schemewiki.org)
513:デフォルトの名無しさん
08/02/10 11:47:46
>>510
見てみます
ありがとうございました
514:デフォルトの名無しさん
08/02/10 22:14:31
>>505
Larceny めちゃくちゃ速いんで驚いたよ。
主要開発メンバーってLight Ship MacScheme 作ってた人でしょ。
この処理系、かなり期待。
515:デフォルトの名無しさん
08/02/10 22:31:00
いやだからコンパイラで比べてるのかインタプリタで比べてるのかくらい晒してくれよ
516:デフォルトの名無しさん
08/02/10 22:47:46
> (time (tak 12 6 0))
Words allocated: 0
Words reclaimed: 0
Elapsed time...: 156 ms (User: 156 ms; System: 0 ms)
Elapsed GC time: 0 ms (CPU: 0 in 0 collections.)
12
compile-file にしてもしなくても同じ結果。読み込んだ時点で
コンパイル済みなんじゃないかな。
記憶違いかもしれないけどアセンブラがどうとかってHPにあったような。
かなり最適化をしているのかも。
517:デフォルトの名無しさん
08/02/10 23:00:19
現在のLisp処理系のコンパイラってどんな仕組みになってんの?
Lisp1.5の時代はLAPを使ってたけど、今はVMなんかね?
Arcのコード読みでああいう簡単なのはおおよそわかったけど、
本格的なのってどういう仕組みをとってるんだろう。
518:デフォルトの名無しさん
08/02/10 23:05:01
ネイティブ吐くのもいるし、
独自じゃなくて、JVMをターゲットにするのもある。
519:デフォルトの名無しさん
08/02/10 23:58:11
最近ではC言語のソースを吐くってのは流行らんのかね?
あれ、良いと思うんだけどな。
520:デフォルトの名無しさん
08/02/11 00:03:19
C言語のソースを吐かれても人間が可読でなければ意味がない。
521:デフォルトの名無しさん
08/02/11 00:04:18
yaccとかlexの立場がないな
522:デフォルトの名無しさん
08/02/11 00:04:51
いや、新しいCPUの最適化とかをC言語コンパイラに任す事ができるw。
523:デフォルトの名無しさん
08/02/11 00:30:25
SBCLのManualページを見たけどよくわからない
・・・俺が馬鹿なのは知ってるから。
SBCLのコンパイルから実行までの手順をご教授願いたい。
正直言って
初めてLISPをインストールして
「どんなのかなあ?使ってみようかなあ」と思っても
CやJAVAのように簡単に入口の手順が調べられないんですよ。
「そんな厨はLISP使うな!」は無しでお願いします。
524:デフォルトの名無しさん
08/02/11 00:44:41
「SBCLをコンパイルする」のか「SBCLでコンパイルする」のかで、話が変わると思うよ
525:デフォルトの名無しさん
08/02/11 00:47:36
>523
で、プラットフォームは何?
Mac,Linux,Windows?
初めてでWindows上ならxyzzy上のLispなんかの方が手近だと思うが。
Meadowだ、slimeだ、Emacsだとかは面倒くさいでしょ?
526:デフォルトの名無しさん
08/02/11 01:01:22
xyzzyは独自仕様だからお勧めしにくいな。俺のお薦めはCLISP。
527:デフォルトの名無しさん
08/02/11 01:08:39
1. LispWorks Personal Edition をダウンロードする
2. インストールする
3. New File でファイルを編集
4. コンパイルボタンを押す
5. REPL から呼び出す
528:デフォルトの名無しさん
08/02/11 01:09:31
って言うか、何のために「SBCLのコンパイルから実行」したいの?
それによっても答えが変わると思う
529:デフォルトの名無しさん
08/02/11 01:13:14
i386とpowerpc以外のCPU
LinuxとFreeBSDとMacOSX以外のUnixLikeOSで動かせて
Gauche並の軽さ&速さとは言わないけど
Pythonくらいの軽さ&速さはあるCL処理系ってありますか?
SchemeでもGaucheより速い処理系も軽い処理系もあるけど
速さと軽さのバランスが一番いいのはやはりGauche
コンパイルすればCLのがチョッ速だと思うけど重い処理系が多いように思えます
530:デフォルトの名無しさん
08/02/11 01:16:48
>CやJAVAのように簡単に入口の手順が調べられない
と書いてあるから、SBCL 自体のコンパイルをしたい訳ではないと予想。
cc や javac を使う様な感じで、コンパイル済みファイル(fasl?)を作成して
それをロード→実行する方法を聞いているんじゃないかしら。
すまんが俺は最近 SBCL を触っていないので、やり方が分からん。
531:デフォルトの名無しさん
08/02/11 01:18:32
>>529
CLISP
532:デフォルトの名無しさん
08/02/11 01:22:00
わざわざ答えて頂いたのに申し訳ないのですが
CLISPの最近のverはi386-OpenBSDでも動かないのです
(ビルドは出来るけどsaveinitmem:executable Tとか動かない)
それにちょっと遅すぎます
ECLのほうが速いくらいです
533:デフォルトの名無しさん
08/02/11 01:23:15
>524、525
すみません説明不足で
要するに先に出てた、SBCL VS Larceny を
Tak関数を使ってやりたいのです。
OS:Windows Vista
LISP:SBCL1.0.13
でTak関数がtak.clというファイル名であるとして
(compile-file "tak.cl")
とすれば、tak.fasl ファイルができるのですが・・・
ここから先が・・・orz
でもコンパイルしたとしても
実行時にSBCL起動して
(time (tak 12 6 0))
なんてすると意味の無いような気がするし、
"(time)"の部分も当初の tak.cl に入れて
コンパイルすればいいのでしょうが、
そこまで頭が回らないので助けていただこうかと。
534:デフォルトの名無しさん
08/02/11 01:23:53
そんな無理して CL 使わんでも…。
今度は CLISP より ○○ のほうが優れているように思えます!! とか言いそうだな…。
無理せず Gauche 使えばいいじゃん。
535:デフォルトの名無しさん
08/02/11 01:25:40
>>532
そういう事は先に書かないと駄目だよ
ECL はネイティブコンパイルするから CLISP よりも速くて当然なんじゃないの?
536:デフォルトの名無しさん
08/02/11 01:27:38
ECLは速さはまあ及第点なのですが
重すぎるのが難点
KCLファミリーでありながらCLtl2な所とか
長所もいろいろあるのですが
(*package*がCOMMON-LISP-USERだからCLtl2とみなしてもいいんですよね?)
537:デフォルトの名無しさん
08/02/11 01:29:18
Larceny が勝利!!よって Scheme >>> CL !!! とかやりだしそうだな…。
まぁ、10年以上後発なんだし結果は見えているような。
538:デフォルトの名無しさん
08/02/11 01:31:25
元気な奴だな。マニュアルも読まれずに評価されるCLコンパイラがちょっとだけ気の毒
539:529=532=536
08/02/11 01:43:40
普段はSchemerですが
CLにも敬意を表してちゃんと使えるようになりたいと考えております
多分に主観的ですが
エレガントさはSchemeに分が
それ以外の大部分はCLに分があると思っています
LuaみたいにAnsiCさえあれば動くぜ!みたいな処理系がCLにもSchemeにもほしいものです
540:デフォルトの名無しさん
08/02/11 02:09:14
>>539
GC等のことを考えると速度的なペナルティ無しに完全にANSI-Cの範囲で記述するのは難しい
んじゃないかな。遅い処理系なら作れると思うけど、速くするには何かズルしないと。w
541:デフォルトの名無しさん
08/02/11 02:09:25
(define (valentine choco)
(if (zero? choco)
(display "お前は既に死んでいる")
(display "カエルchokochoko3chokochoko/n合わせてchokochoko6chokochoko")))
542:デフォルトの名無しさん
08/02/11 02:11:41
>>533
(load "tak.fasl")
543:デフォルトの名無しさん
08/02/11 02:37:04
Gaucheの本ってまだぁ?チンチン
544:デフォルトの名無しさん
08/02/11 04:26:33
Common Lispに敬意を払いたいといいつつ
takを選んでしかも最適化宣言無し…意図が無いとしたら天才かもしれん。
haskell使えば?
545:デフォルトの名無しさん
08/02/11 04:46:57
tak の人とは別人じゃないかな?
俺も Schemer が余興でやるなら CL より Haskell が良いと思う
546:デフォルトの名無しさん
08/02/11 17:38:54
URLリンク(lispuser.net)
これを参考にしてSchemeでScheme処理系を書いている。
↑これはわかりやすくて短くていいわ。
それと「Schemeによる記号処理入門」森北出版
547:デフォルトの名無しさん
08/02/11 18:03:40
そこのサイトって誰が書いてるのかわからんし。
結局LISPユーザー向けじゃなくてACLユーザー向けのサイトじゃん。
読んでいて ム カ つ く んですよね。
548:デフォルトの名無しさん
08/02/11 18:06:07
そこはCで書いてくれ
549:デフォルトの名無しさん
08/02/11 18:06:35
またバストダンジョンか
550:546
08/02/11 19:40:01
>>547
そこってなんかヤバイんかい?
しっかりしたまともな内容だと思うけど...
551:デフォルトの名無しさん
08/02/11 19:47:46
>>550
ごめんかんちがいかも。
でもなんか気色悪いわ。
552:デフォルトの名無しさん
08/02/11 19:49:08
>>547 は別のサイトと勘違いしてるっぽい感じがするけど
553:デフォルトの名無しさん
08/02/11 19:52:38
>>547
俺には一部のACL向けの記事があるだけのように思うが。
ちゅうか中の人はCLISPの開発者なんだし、誤解のような気もするけど。
554:547
08/02/11 20:55:01
>>553
そうなんだ?完全に勘違いですね。ごめんなさい>>All
555:デフォルトの名無しさん
08/02/11 21:08:43
日本語で PLT Scheme を説明してるサイトってどっかにありませんかね?
556:デフォルトの名無しさん
08/02/11 21:46:32
>>>555
Shiroさんとこのwilikiにある↓をいつも参考にしてるよ。
URLリンク(practical-scheme.net)
557:デフォルトの名無しさん
08/02/11 21:48:00
あ、まちがえた。MzじゃなくてDRの方だよね。
558:デフォルトの名無しさん
08/02/11 23:00:04
Drに入ってる言語のオプションがよくわからないんです><
559:555
08/02/11 23:13:00
>>557
PLT Scheme で GUI を作りたいと考えています。
560:デフォルトの名無しさん
08/02/11 23:27:19
>>559
Drは使ったことがないのでよくわからないけど
MrEDと連携してグラフィクスなんかできたんじゃ
なかったっけ。
561:デフォルトの名無しさん
08/02/12 19:14:40
HaskellにはLispのような優秀なマクロがないので埋め込み言語を実装しにくいって本当かね?
562:デフォルトの名無しさん
08/02/12 19:45:30
マクロよりS式の方が大きいでしょ。
S式はDSLのプロトタイプに最適だもん。
Lisp1.5の時代から、俺eval、俺apply作れたんだから。
563:デフォルトの名無しさん
08/02/12 19:47:36
一方、しっかりした仕様のある言語なら、
pugsの例を見るまでもなくHaskellも結構いける。
宣言型のコード書きやすいから。
Prologはどっか行っちゃった。
564:デフォルトの名無しさん
08/02/14 08:57:01
第2回gauche.nightチケット売り切れました。
本当にありがとうございました。
565:デフォルトの名無しさん
08/02/14 12:31:55
どういたしまして
566:デフォルトの名無しさん
08/02/15 00:50:36
>>564
本も売り切れるといいね。
567:デフォルトの名無しさん
08/02/15 01:05:33
初心者です.マクロについて質問させてください.
以前に出ていた日本語のScheme本から(一部抜粋)
(define-syntax Cond (syntax-rules (else =>)
;; #0
((Cond (else result1 result2 ...)) (begin result1 result2 ...))
;; #1
((Cond (test => result)) (let ((temp test)) (if temp (result temp))))
;; #2
((Cond (test => result) clause1 clause2 ...)
(let ((temp test)) (if temp (result temp) (Cond clause1 clause2 ...))))
;; #3
((Cond (test)) test)
;; #4
((Cond (test) clause1 clause2 ...) (or test (Cond clause1 clause2 ...)))
;; #5
((Cond (test result1 result2 ...)) (if test (begin result1 result2 ...)))
;; #6
((Cond (test result1 result2 ...) clause1 clause2 ...)
(if test (begin result1 result2 ...) (Cond clause1 clause2 ...)))))
(let ((=> #f)) (Cond (#t => 'ok)))
scmだと本の解説通り ok と表示されるのですが, scm ではないある処理系に
読み込ませたところ,'ok がprocedureではない,というエラーになりました.
どうやら「=>」に#fが束縛されておらず keywordである「=>」として扱われたようです.
正しくは,すべてのsymbolの束縛関係が解決されてから syntaxに渡され
(て,最終的にokとな)ると考えて良いのでしょうか.
568:567
08/02/15 01:32:22
もしそうだとすると,その束縛関係が参照されるのは,
syntax定義の時点でしょうか,それとも
syntax呼び出しの時点でしょうか.
569:567
08/02/15 01:57:21
>>568 の質問の形を変えます.
syntax定義時と呼び出し時とで異なる値に束縛されたsymbolは
どちらの値に置き換えられて評価されるのでしょうか.
単純なscopeの優先度からすると,syntax呼び出し時の値が使われそうですが,
closureやsyntaxが制作者の意図通り動くことを保証するためには
syntax定義時の値が使われるべきなのではないかと思うのです.
closureだとclosure定義時の環境が参照されると理解しています.
570:デフォルトの名無しさん
08/02/15 02:48:34
そこまで確信してるなら「scm ではないある処理系」の製作者に直接言えば?
571:デフォルトの名無しさん
08/02/15 08:29:51
どちらが正しいかを決めるルールが存在するとは限らない。
572:567
08/02/15 08:52:11
混乱していましたが一晩寝たら少し整理できたように思います.
本の説明とscmの実装が正しいとして,束縛関係の優先順位が
1.syntax定義時
2.syntax呼び出し時
であれば納得できそうです.
573:デフォルトの名無しさん
08/02/15 12:51:51
R5RSに於いては
マクロに於けるリテラル識別子(この場合はelseと=>)がマッチするのは
マクロ定義とマクロ使用でともに同じ束縛を持つか
ともに束縛を持たない場合のみだから
その「scm ではないある処理系」の挙動は正しくない。
マクロのパターンマッチに束縛情報が使われることから
束縛関係を解決してから展開されるという解釈は正しいと思う。
ただしSchemeの場合は値ではなく場所に束縛される。
だから
(define foo 100)
(let ((foo foo)) foo)
ではトップレベルのfooとlet式中のfooは同じ値で違う束縛である。
(さらに細かく言えば束縛されるのはSymbolではなくidentifierである。)
このCondの例は定義時に=>が束縛を持たなかったのに(あるいは定義時の字句的束縛を持っていたのに)
使用時に=>がローカルな束縛を持っていたから#1にマッチしなかっただけである。
同じ束縛を持っていた場合は変数参照式として値が使われることはなく、リテラル識別子として#1にマッチする。
また、マクロ使用において束縛関係の優先順位が
1. 定義時
2. 使用時
というのは逆。
マクロ使用式の識別子の束縛は使用される式の位置に於ける字句的束縛である。
だからマクロ名である構文キーワード(この場合はCond)はローカル変数束縛に隠蔽されうる。
ただし展開され、挿入された式は定義に於ける字句的束縛を持つ。
犬飼大氏はscmやSLIBはR5RSに準拠してると仰ってるけれども
scmや派生処理系のGNU guileはマクロ周りを含め準拠していない部分も結構あるから
R5RSの学習には不向きだと思われる。
574:567
08/02/15 13:04:47
>>573
要を得ない質問の意図をくみ取ってくださり
的確なご解説をいただきましてありがとうございます.
>>573を読み返して考えてみます.
575:デフォルトの名無しさん
08/02/15 14:10:32
C言語風に言い換えれば束縛という名詞は変数のアドレス。
(define x 100)
(define y 1000)
(define-syntax foo (syntax-rules () ((foo y) (+ x y))))
;パターン(foo y)に現れていなくてテンプレート(+ x y)に現れている識別子は+とx
;さらに自由識別子だから
;+とxは挿入された場所の字句的束縛ではなく
;マクロ定義された場所の字句的束縛を持つ
;yはマクロに於ける仮引数だからマクロ使用の式の値になる
(let ((x 10))
(foo y))
-> 1100
(let ((x 10))
(foo x))
-> 110
(let ((y 1))
(foo x))
-> 200
(let ((y 1))
(foo y))
-> 101
(let ((+ -))
(foo 10000))
-> 10100
576:デフォルトの名無しさん
08/02/15 14:10:53
R5RS保健的マクロの束縛識別子は処理系によって解釈が分かれてるから使わない方が吉かも。
束縛識別子とは(let ((x 10)) ...)とか(define x 100)に於けるxのことで
変数捕獲を防ぐ為にリネームされるハズなんだけど
リネームしてくれないscm系
必要最小限にリネームするGauche系
必ずリネームするScheme48系があって
それぞれ挙動が違う。
577:567
08/02/15 14:16:58
>>573
ありがとうございます.ようやく理解できました.
マクロ使用における束縛関係の優先順位も,使用時の束縛関係が
定義時の束縛関係に優先するとしたほうが自然であると納得できました.
私の混乱の原因のひとつに,マクロのtemplate上のsymbol「=>」と,
マクロを適用するユーザコード上のsymbol「=>」とを混同していたことが
ありました.これらを明確に区別すべきでした.
なお,>>567に書きました非scmの処理系はbigloo(ver.3.0c)です.
また,guileはdefine-syntaxやsyntax-rules自体を実装していないようです.
578:デフォルトの名無しさん
08/02/15 14:18:31
guileは(use-syntax (ice-9 syncase))をすると
syntax-caseとsyntax-rulesが使えるようになります
579:デフォルトの名無しさん
08/02/15 14:22:37
束縛識別子でもlet系の場合はどの処理系もリネームしてくれるんだった。
defineは使わない方が吉、の間違い。
scm系はリネームせずにdefineします。
Gaucheは(多分)set!として働く場合はリネームしませんがそれ以外はリネームします。
Scheme48系は常にリネームします。
なのでマクロテンプレート以外から参照できません。
580:デフォルトの名無しさん
08/02/15 14:28:19
ああさらに間違い。
Gaucheはトップレベルdefineはリネームせず、内部defineのみリネームするようです。
581:デフォルトの名無しさん
08/02/15 14:36:22
また少しだけ衛生的マクロが嫌いになりました
582:567
08/02/15 14:36:34
>>575 - >>580
みなさま情報ありがとうございます
>>578 の方法でguileでも>>567のコードを正しく評価できました
583:デフォルトの名無しさん
08/02/15 14:38:29
>>577
マクロテンプレート(例えば(let ((temp test)) (if temp (result temp))))中の(この例では現れていませんが)=>は
マクロ定義された場所で可視だった束縛を参照します。
マクロパターン(例えば(Cond (test => result)))中の=>は
マクロ使用式(Cond (#t => 'ok))中の識別子=>とのマッチングに使われます。
マクロ使用式の=>とマクロ定義の=>がともに未束縛であるか
或いは同じ束縛(例えばトップレベル変数)を持つ場合にのみマッチする訳です。
584:デフォルトの名無しさん
08/02/15 14:59:43
テンプレート(foo X Y)に於いてfooという識別子に意味はありません。
最初の識別子はマッチングに利用されません。
なので(_ X Y)等と書くこともあります。
XとYはいわばメタ仮引数。マクロ使用式の同じ位置の式にマッチします。
そしてテンプレート中ではマクロ使用式の同じ位置の式が挿入されます。
(syntax-rules (hoge funi) ...)に於いてhogeとfuniはリテラル識別子となります。
パターンに現れる場合はマッチングにのみ利用されます。
マッチングは同じ識別子で且つ同じ束縛である場合にのみ成功します。
テンプレート中に現れる識別子のうち、パターンの中にリテラル識別子以外で現れた識別子以外は
マクロ定義された場所で可視だった束縛を参照します。
ただし束縛コンストラクタで作られる場所に束縛される場合は実質的に改名されます。
なのでテンプレート中に=>が出現してたらそれはマクロ定義された場所の束縛を参照します。
(define bar 100)
(define-syntax foo (syntax-rules (bar)
((foo bar) bar))
(foo bar)
-> 100
(let ((bar 10000))
(foo bar))
=> ERROR! ;パターンマッチングに失敗
585:デフォルトの名無しさん
08/02/15 15:00:33
最初の単語から間違えたorz
パターン(foo X Y)の間違い
586:デフォルトの名無しさん
08/02/15 15:36:36
リテラル識別子ってsyntax-rulesのところで束縛されているように見えるけど
本当に束縛してしまうと絶対にマッチしないパターンになるのか
紛らわしいな
587:デフォルトの名無しさん
08/02/15 15:54:38
なんか長々と分かりにくい書き方だったな
リテラル識別子はパターン部分で特別扱いするだけ
でもリテラルといいながら変数と看做したときの束縛までマッチングに利用するのは少し変な気がする。
パターン変数:任意の式にマッチする。テンプレート中ではマッチした式として挿入される。
リテラル識別子:同じ束縛を持つ同じ識別子とだけマッチする。テンプレート中ではパターン変数以外の識別子と同じ扱い。
パターン変数以外の識別子:テンプレート中の変数参照はマクロ定義された位置での束縛の参照が挿入される。
テンプレート中の束縛コンストラクタで新たに束縛される場合はその参照と共に改名される。
これの方がいいかな
588:デフォルトの名無しさん
08/02/15 16:01:42
URLリンク(www.r6rs.org)
>A literal identifier matches an input subform if and only if
>the input subform is an identifier and
>either both its occurrence in the input expression and
>its occurrence in the list of literals have the same lexical binding, or
>the two identifiers have the same name and both have no lexical binding.
589:デフォルトの名無しさん
08/02/15 16:55:31
R5RSの3.1によれば
構文の型の名前は全て構文に束縛されていて構文キーワードである
変数とは構文キーワードでない任意の識別子である(elseと=>も構文キーワードだから変数でない)
またR5RSの4・5章によれば
defineは
(define <変数> <式>)
(define (<変数> <仮引数部>) <本体>)
(define (<変数> . <仮引数>) <本体>)
のいずれか
set!は
(set! <変数> <式>)
lambdaは
(lambda <仮引数部> <本体>) 但し<仮引数部>は(<変数1> ...)、<変数>、(<変数1> ... <変数n> . <変数n+1>)のいずれか
てことは構文キーワードをを隠蔽するローカル変数あるいはトップレベル変数をdefine、set!、lambda、let、let*、letrec、doで作る事はR5RS外だったんだ
構文キーワードの変数参照がR5RS外って事は知ってたけどこの事は知らなかった
だけど4.3にはローカル変数束縛がキーワード束縛を隠蔽しても良いって書いてあるけど
どうすれば構文キーワードを隠蔽できるローカル変数束縛ができるの?
他方、構文束縛は変数でなく識別子に対して行われるからローカル構文束縛で隠蔽されることはあり得る。
7.2.1の抽象構文に於いては変数と識別子が同一されているから<変数>の解釈が2パターンあるってオチなんだろうけど
590:デフォルトの名無しさん
08/02/15 16:56:06
typo
同一されている->同一視されている
591:デフォルトの名無しさん
08/02/15 18:14:38
Gauche0.8.13がリリースされてたのか!
気付かなかった
592:デフォルトの名無しさん
08/02/15 18:15:03
Schemeのconsを少し勉強していたら以前さっぱりだったC++の
再帰のメタプログラムがわかるようになってきた。
両方勉強しようと思う。
593:デフォルトの名無しさん
08/02/16 01:49:25
すみませんが、質問です。
DrSchemeのGUI環境で、選択できる言語の一つに、遅延評価のLazy Schemeとい
うのがあるのですが、これで tarai を回して, time関数で時間を計ろうとすると、
tarai関数は実行されず、promiseオブジェクトが返ってきてしまいます。
> (time (tarai 200 100 0))
cpu time: 0 real time: 0 gc time: 0
#<promise:?>
どこかにforceを書けばいいのかと思ったのですが、いろいろやってもうまく行
きません。
> (time (force (tarai 200 100 0)))
cpu time: 0 real time: 0 gc time: 0
#<promise:?>
どなたか見当のつく方、アドバイスをいただけないでしょうか?
594:デフォルトの名無しさん
08/02/16 02:12:54
forceしろ
595:デフォルトの名無しさん
08/02/16 08:50:34
timeがpromiseを返してるのでは?
596:デフォルトの名無しさん
08/02/16 12:06:33
DrSchemeを触らずに595を書いたけど
見当はずれだったみたい
ごめんなさい
とりあえず
(force (delay (time (tarai 200 100 0))))
したら計算できた
syntaxにおけるimplicit forcingがうまく働いてないのかも
forceはprocedureだから引数がimplicit forceされてforceしようとした値がpromiseじゃなくなってるとか
implicit delayとdelayが違う物みたいだし
doc読んでないので見当違いかもしれないけど
597:デフォルトの名無しさん
08/02/16 12:08:30
あ、((lambda (x) x) (time (tarai 200 100 0)))でもいいみたい
598:デフォルトの名無しさん
08/02/16 12:11:48
>>596
> (force (delay (time (tarai 200 100 0))))
delayいらないんじゃね?
599:デフォルトの名無しさん
08/02/16 12:12:56
(time (tarai 200 100 0))が関数に渡されたときはちゃんと200が返るけど
マクロを含めsyntaxに渡されたときは#<promise:?>が返る
600:デフォルトの名無しさん
08/02/16 12:14:05
>>598
(force (time (tarai 200 100 0)))だとforceに200が渡されてエラー
forceは関数だからだと思われる
明示的にdelayしてないとimplicit forceされる
601:デフォルトの名無しさん
08/02/16 12:23:37
implicit delayされた物はimplicit forceされる
explicit delayされた物はexplicit forceしなくてはいけない
implicit delayされた物をexplicit forceすることはできない
explicit delayされた物はimplicit forceされない
implicit forceされるのは値を受け取る継続が関数の場合のみ
timeはsyntaxであるから#<struct:promise>でなく#<promise:?>が返される
ってことかな?
602:デフォルトの名無しさん
08/02/16 12:34:26
implicit promiseはimplicit forceされると最早implicit promiseでなくなる
他方、explicit promiseはexplicit forceされてもexplicit promiseのまま
(define x (call/cc (lambda (return) (delay (return 'value)))))
x
-> #<struct:promise>
(promise? x)
-> #t
(force x)
(promise? x)
-> #f
x
-> 'value
こんな感じなのかな
603:デフォルトの名無しさん
08/02/16 12:42:06
> (time 1)
cpu time: 0 real time: 0 gc time: 0
1
> (time (+ 1 1))
cpu time: 0 real time: 0 gc time: 0
#<struct:promise>
だなあ。
604:デフォルトの名無しさん
08/02/16 13:16:33
v372@PPCmacだと
ようこそ DrScheme, バージョン 372 [3m].
言語: Lazy Scheme.
> (time 1)
cpu time: 0 real time: 1 gc time: 0
1
> (time (+ 1 1))
cpu time: 0 real time: 0 gc time: 0
#<promise:?>
になりますね
とにかく構文に渡されたimplicit promiseはimplicit forceされないので
implicit forceされた物を構文に渡さないといけないみたい
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5384日前に更新/210 KB
担当:undef