Lisp Scheme Part22at TECH
Lisp Scheme Part22 - 暇つぶし2ch336:デフォルトの名無しさん
08/06/05 20:36:15
>>332はこう書いてもよい。

(define M*
(lambda (func-arg)
(lambda (l)
(if (null? l)
'no-list
(if (null? (cdr l))
(car l)
(max (car l) (func-arg (cdr l))))))))

((Y M*) '(4 5 6 3 4 8 6 2))

337:329
08/06/05 20:42:03
>>332
>>334
>>335
>>336

皆さんありがとうございます。なんかすみません。
どれも微妙に難しいコードですが、がんばって理解します。


338:デフォルトの名無しさん
08/06/06 02:15:18
>>328
丁寧なレスありがとうございます。
multirember&coとかアッカーマン関数とか、totalとpartialがどうしたとか、
これらを導出する事で何を言いたかったのかが今ひとつピンときませんでした。
まあ、でも一応Seasonedまでは読もうかと思っています。

339:デフォルトの名無しさん
08/06/06 06:25:04
>>328
> 微積とかの数学を知らない人向けのSICPだったのかと。
> だから数学が得意な大学生は最初からSICPでいいと思う。

これは嘘。目的が全然違う。

340:デフォルトの名無しさん
08/06/06 18:21:20
>>339
どんな本ですか?

341:デフォルトの名無しさん
08/06/06 20:34:58
SQL> SELECT COUNT(*) FROM SICPが好きな人;
----
  1

(,,゚∇゚) !!

342:デフォルトの名無しさん
08/06/06 21:23:17
(define-syntax swap
(syntax-rules ()
((swap a b) (let ((tmp b))
(set! b a)
(set! a tmp)))))

(define-syntax display-line
(syntax-rules ()
((display-line x)
(begin
(display x)
(newline)))))


(define tmp 5)
(define other 6)

(swap tmp other)

(display-line tmp)
(display-line other)

343:デフォルトの名無しさん
08/06/06 21:35:26
(define-syntax rotate
(syntax-rules ()
((rotate a) (void))
((rotate a b c ...) (begin
(swap a b)
(rotate b c ...)))))

(define x 1)
(define y 2)
(define z 3)
(define w 4)

(rotate x y z w)

(display-line x)
(display-line y)
(display-line z)
(display-line w)

344:デフォルトの名無しさん
08/06/06 21:37:26
(define-syntax rotate2
(syntax-rules ()
((rotate2 a c ...)
(shift-to (c ... a) (a c ...)))))

(define-syntax shift-to
(syntax-rules ()
((shift-to (from0 from ...) (to0 to ...))
(let ((tmp from0))
(set! to from) ...
(set! to0 tmp)) )))


(rotate2 x y z w)

345:デフォルトの名無しさん
08/06/06 23:00:40
(require (lib "time.ss" "srfi/19"))

(date->string (current-date) "~Y/~m/~d(~a) ~H:~M:~S")

346:デフォルトの名無しさん
08/06/07 02:08:30
インデント付きで見る用のアンカー

>>342-345

347:デフォルトの名無しさん
08/06/07 12:50:40
誰か教えてくれ

学校の課題で困った

点(x,y) が 傾き a 、y切片が b である 直線 の 上部にあるか、 下部にあるかを 判断する updown? 定義せよ。

ただし、

上部にあるとき #t
下部にあるとき #f

を値として返すように せよ


348:デフォルトの名無しさん
08/06/07 12:56:50
中学校からやり直せ

349:347
08/06/07 13:03:03
>>348
それは一理ありますね

1次関数の勉強をしなおしてもみましたが、ダメでした

350:デフォルトの名無しさん
08/06/07 13:05:58
>>347
ほらよ。そのまま提出しろよ
(define (updown? a b)
"直線上にあったら何を返せばいいんだよこんなクソ問題だすやつは死ね \
もちろん単位なんていらん")


351:347
08/06/07 13:12:11
>>350
ストレートな回答ありがとうございます

私の説明不足です

直線上は考慮するなとのことでした



352:デフォルトの名無しさん
08/06/07 13:18:15
こんな世界に生まれたことを呪いながら人生をリセットすべし

353:デフォルトの名無しさん
08/06/07 13:25:09
>>351
直線上を考慮しないなんてありえない。一次関数の場合、端点が
常に極値になるのだから、直線上かどうかを調べるのは最も重要なことだ。
そんな教師はそちらから願い下げなさい。

354:デフォルトの名無しさん
08/06/07 13:44:58
まずは「上部」と「下部」のテイギからはじめないとな。

355:デフォルトの名無しさん
08/06/07 14:21:14
プログラムを組めないってんならまだしも、一次関数の定義がわからんてどういうことだ?
既知のxを使って算出できる一次関数の値と対象yの値を比べれば良いってアホでもわかりそうなものだが。


356:デフォルトの名無しさん
08/06/07 14:23:56
傾きとか切片とかの意味が判ってないんじゃね?

357:デフォルトの名無しさん
08/06/07 14:25:29
Schemeの課題ってことは大学生以上だと思うけど、一次関数がわからなくても
最近は大学に入れるんだなあ。日本って本当に滅亡にむかってるのだなあ・・しみじみ。

358:デフォルトの名無しさん
08/06/07 14:31:06
大学の定員って志願者より多いらしいから誰でも入れるんじゃね?w

359:デフォルトの名無しさん
08/06/07 14:35:05
>>354
それは、地図の上と下のテイギを決めるようなもんだw

360:デフォルトの名無しさん
08/06/07 14:37:27
上下(じょうげ、うえした)とは、六方位(六方)の名称の一つで、高さ・深さを指す方位の総称。
一定方向に重力のある環境で、重力場の向かう方向、即ち物体が落ちる方向を下(した)、
その対蹠で物体が登る方向を上(うえ)という。
出典: フリー百科事典『ウィキペディア(Wikipedia)』

361:デフォルトの名無しさん
08/06/07 14:40:43
>>357
中学校の総合の時間だったりしてw

>>351
直線の式にxの値を代入してyの値を比較すればわかるだろ

362:デフォルトの名無しさん
08/06/07 14:41:47
地図の上下なら等高線で見て高いほうが上、低いほうが下ってことだな

363:デフォルトの名無しさん
08/06/07 14:44:27
>>347
 class Point
  attr :x, :y
  def initialize(x, y)
  @x, @y = x, y
  end
 
  def updown?(a, b)
  (@y > a * @x + b) ? "#t" : "#f"
  end
 end
 
 a, b = 1, 5
 p = Point.new(1, 5)
 puts p.updown?(a, b)

364:デフォルトの名無しさん
08/06/07 14:47:30
↑変な言語きたー!w

365:デフォルトの名無しさん
08/06/07 14:52:26
>>363
ちょっと見ないうちにLISPも変わったな

366:デフォルトの名無しさん
08/06/07 14:52:44
見た感じRuby?

367:デフォルトの名無しさん
08/06/07 14:59:39
(define updown? (lambda (a . b) (lambda (x . y) (cond ((> y (let ((k x)) (+ b (* a k)))) a (define t #t) t) (else (not #t))))))
(display "こうですかわかりません")

368:デフォルトの名無しさん
08/06/07 16:30:01
ルビーか。@ とか無けりゃ見やすそうなのになあ。惜しい言語だ。

369:デフォルトの名無しさん
08/06/07 17:53:13
ぐはw
釣りだよ。久々にRuby厨降臨か。

370:347
08/06/07 18:18:41
>>363
Ruby…うちの学校じゃやらないと思います

371:デフォルトの名無しさん
08/06/07 18:43:09
予想以上に'end'がキモすぎる

372:デフォルトの名無しさん
08/06/07 18:45:04
MatzLispがどうかしたか?

373:デフォルトの名無しさん
08/06/07 18:59:28
>>14

374:デフォルトの名無しさん
08/06/07 20:01:04
Ruby叩かれまくっててワロタ。
でも、Schemeで答え書いちゃったら>370の勉強にならんからな。つまらんし。

>>368
最近は継承の問題もあって、@使う人少ないよself.xとするのが主流
>>371
endぐらいなんだよ。お前なあ、fortran9xなんかend do/end if/end program
なんだぜ。それに比べりゃたかが三文字だし、
明示的にブロックの終わりを指定できてうれしいじゃん。

375:デフォルトの名無しさん
08/06/07 20:02:53
>>374
>明示的にブロックの終わりを指定できてうれしいじゃん
GuidoLispに対する挑発行為ですねわかります

376:デフォルトの名無しさん
08/06/07 20:07:11
>>374
あの syntax ならむしろ end class とかのほうが良かった。
なんかアンバランスな感じなんだよ。

377:デフォルトの名無しさん
08/06/07 20:09:09
> 明示的にブロックの終わりを指定できてうれしいじゃん。
君は数式読み上げるときに「カッコ閉じる」って言って快感を得る人かな?

378:デフォルトの名無しさん
08/06/07 20:10:32
endの対としてbeginがないのは確かに気持ち悪い
なくてもわかるけどさw

379:デフォルトの名無しさん
08/06/07 20:11:55
class

ssalc
とか

それはそうとSchemeのbeginはなんとかしてほしい

380:デフォルトの名無しさん
08/06/07 20:16:22
Ruby厨の弁解ウゼー

381:デフォルトの名無しさん
08/06/07 20:19:01
>>378
Wirthキター

ってModula-*もないとこはないよな。> BEGIN

382:デフォルトの名無しさん
08/06/07 20:20:20
Lispもcondの次の((いらねえんじゃね?

383:デフォルトの名無しさん
08/06/07 20:25:36
>>382
Paul Graham乙


384:デフォルトの名無しさん
08/06/07 20:29:09
>>377
>君は数式読み上げるときに「カッコ閉じる」って言って快感を得る人かな?
ハァ? 普通言うだろ。閉じカッコの位置が違ったら意味が変わっちゃうこと
もあるし。演算子優先順位の存在しないLisperはこれだから無頓着で困る。

385:デフォルトの名無しさん
08/06/07 20:30:27
ちなみに、Emacsのruby-modeならendはC-cC-eで自動補完してくれるので
書き手が気にする必要はない・・・・ってなんかどっかで似たような話を
聞いたことがあるようなないような。

386:デフォルトの名無しさん
08/06/07 20:31:43
「カッコ閉じる」は言うな。国家国家言う奴もいたけど。w

387:デフォルトの名無しさん
08/06/07 20:33:24
インデントで優先順位を決めるSchemeの変種を考えるやつが居そう

388:デフォルトの名無しさん
08/06/07 20:35:24
そろそろRuby厨KY

389:デフォルトの名無しさん
08/06/07 20:51:26
>>384
> 演算子優先順位の存在しないLisperはこれだから無頓着で困る。

かなりハズしたねw
)ないと困るのはLispでも一緒

390:デフォルトの名無しさん
08/06/07 21:17:07
演算子優先順位なんてまるで関係ないよなw

391:デフォルトの名無しさん
08/06/07 21:19:23
どうやらrubyさんの思考もendのようですね

392:デフォルトの名無しさん
08/06/07 21:23:13
そこでcommon lispのprognですよ

393:デフォルトの名無しさん
08/06/07 21:31:23
progn = beginなら
prog0 = begi0?

394:デフォルトの名無しさん
08/06/07 22:16:36
ANSI Common Ruby

395:デフォルトの名無しさん
08/06/07 22:43:44
漏れの出た学科では「こっか」と読んだ。)。

396:デフォルトの名無しさん
08/06/07 22:51:06
一呼吸置くだけで無問題。いちいちカッコトジルとか言わんでも分かるやろ。まさにKY

397:デフォルトの名無しさん
08/06/07 22:52:14
オッカッ

398:デフォルトの名無しさん
08/06/07 22:52:14
かっこ閉じるがデフォだったが
学校に1人はこっかと読ませる先生がいてだな

399:デフォルトの名無しさん
08/06/07 22:57:33
こっか? シェルスクリプトみたいだよ
if ....

fi

case ....

esac

400:デフォルトの名無しさん
08/06/07 23:17:51
こういうのはどうだろう?

( : かっ
) : っこ

( + 1 2 )
かっ プラ いち に っこ

401:デフォルトの名無しさん
08/06/07 23:30:58
>>396
Haskellの$みたいなのならそれでもいいけど
全部一気に閉じない場合は?

402:デフォルトの名無しさん
08/06/08 00:39:25
>>398
書籍にもあるから結構メジャーなんだと思ってるが。

403:デフォルトの名無しさん
08/06/08 04:32:00
>>400
Dirac先生まで来た!

404:デフォルトの名無しさん
08/06/08 05:23:10
竹内郁雄先生が「こっか」派だった気がする

405:デフォルトの名無しさん
08/06/08 11:41:42
「ぱー」と「れん」だってJargonか何かにあったような

406:デフォルトの名無しさん
08/06/08 13:04:47
Ex. This is Yet Another CPS. Explain it!

(define M
(lambda (f)
(lambda (ls)
(cond
((null? ls) '())
(else (cons (f (car ls)) ((M f) (cdr ls))))))))

(define (add1x) (+ 1 x))

((M add1) '(1 2 3)) ;=> '(2 3 4)

407:デフォルトの名無しさん
08/06/08 13:16:12
本物のCPSならループの途中で脱出できるはずだ

408:デフォルトの名無しさん
08/06/08 13:19:46
>>405
さすがに海外にはnerapと呼ぶ猛者はいないか。アーカードとかレッドラムみたいな。

409:デフォルトの名無しさん
08/06/08 14:07:48
>>407
人生の敗北者

410:デフォルトの名無しさん
08/06/08 15:26:30
何故そう思う?

411:デフォルトの名無しさん
08/06/08 17:32:49
ErlangでConcurrent Scheme作った人挙手ノシ

412:デフォルトの名無しさん
08/06/08 17:35:11
upyr

413:デフォルトの名無しさん
08/06/09 01:02:50
>>406
あ、出典わかって納得w

414:デフォルトの名無しさん
08/06/09 03:00:01
Gauche民もこのスレに集まるの?

415:デフォルトの名無しさん
08/06/09 07:00:06
難民呼ばわりかよ

416:デフォルトの名無しさん
08/06/09 22:34:40
最近Schemeの勉強はじめたんすけど、再帰が全く理解できない・・・orz
誰か助けてー\(*_*)/

417:デフォルトの名無しさん
08/06/09 22:41:56
再帰の何が理解できないんだてめえコラァ!

418:デフォルトの名無しさん
08/06/09 22:57:53
hogehoge lisperシリーズの出番だな

419:デフォルトの名無しさん
08/06/09 23:09:27
>>416
再帰ではなく、単なる手続き呼び出しだ、と思えば良い。
たまたま自分自身を呼んでいるだけ。

420:デフォルトの名無しさん
08/06/09 23:12:26
構造帰納法を思い出せばいい

421:デフォルトの名無しさん
08/06/09 23:12:46
>>416
他言語で再帰を使った経験は?

422:デフォルトの名無しさん
08/06/09 23:47:57
>>416
(ローカル)変数の寿命とスコープって聞いてスッと頭に入ってくる?
いや、COBOLer とかの、ローカル変数って概念がない人がいたりするので。


423:デフォルトの名無しさん
08/06/09 23:52:45
みんな親切で驚きました
もうちょっとがんばってみようと思います


424:デフォルトの名無しさん
08/06/10 07:07:26
416の人気に嫉妬

425:デフォルトの名無しさん
08/06/10 19:59:03
Gaucheのウィンドウズ版のバイナリって日本語使えない上に、
lambdaもちゃんと動作しないという認識であってますか?

426:デフォルトの名無しさん
08/06/10 20:01:32
んなあほな

427:デフォルトの名無しさん
08/06/10 20:06:56
いやマジっすマジっす
こんな感じで計算してくれない

gosh>(define test (lambda (a b) (*a b)))
gosh>test 1 5
1
5

428:デフォルトの名無しさん
08/06/10 20:20:12
>>427
(test 1 5)


429:デフォルトの名無しさん
08/06/10 20:24:49
これは流石にネタだろw

430:デフォルトの名無しさん
08/06/10 20:35:32
僕もネタに一票w

431:デフォルトの名無しさん
08/06/10 20:35:44
びっくりした

432:デフォルトの名無しさん
08/06/10 21:27:09
(define test (lambda (a b) (*a b)))
test 1 5
=>
#<procedure:test>
1
5

433:デフォルトの名無しさん
08/06/10 21:27:49
次は *a で引っかかるだろうな

434:デフォルトの名無しさん
08/06/10 21:36:34
>>428さんの言うとおりやると

(define test (lambda (a b) (*a b)))
(test 1 5)
=>
reference to undefined identifier: *a

となってしまうでしょう。2段構えの手の込んだネタw

435:427
08/06/10 23:05:55
あwwwwwwwwwwwwwwwww

436:デフォルトの名無しさん
08/06/10 23:17:47
>>435
天然キャラ乙。

437:デフォルトの名無しさん
08/06/10 23:45:38
日本語の方のネタもご披露を

438:427
08/06/10 23:50:19
gosh> (print "hello")
#<undef>
gosh> (print "こんにちは")
*** READ-ERROR: Read error at "(stdin)":line 2: EOF encountered in a string lite
ral: "ツつアツ・
Stack Trace:
_______________________________________
gosh> *** ERROR: unbound variable: ツソツ
Stack Trace:
_______________________________________
gosh> *** READ-ERROR: Read error at "(stdin)":line 2: extra close parenthesis
Stack Trace:
_______________________________________
gosh>

439:デフォルトの名無しさん
08/06/10 23:52:37
>>438
> gosh> (print "hello")
> #<undef>
> gosh>

ちょっと待て

440:デフォルトの名無しさん
08/06/11 00:07:52
ごめん
1~3行目はこうだったw

gosh> (print "hello")
hello
#<undef>


441:デフォルトの名無しさん
08/06/11 00:42:26
Gaucheのネイティブコードと入力したエンコードを言ってみろ。

442:デフォルトの名無しさん
08/06/11 00:50:31
そんなことが判るくらいなら悩まんだろw

443:デフォルトの名無しさん
08/06/11 00:56:14
C:\>gosh -V
Gauche scheme interpreter, version 0.8.13 [utf-8]

入力したエンコードとは!?
コマンドプロンプトにもエンコードとか指定できるんですか
ちなみにテキストファイルにコード書いてShift_JISで保存・実行しても文字化けしました

444:デフォルトの名無しさん
08/06/11 01:25:28
>C:\>gosh -V
>Gauche scheme interpreter, version 0.8.13 [utf-8]

>ちなみにテキストファイルにコード書いてShift_JISで保存・実行しても文字化けしました

>>[utf-8]

445:デフォルトの名無しさん
08/06/11 01:55:19
>>444
UTF-8で保存してみたけどやっぱりダメでした

D:\>gosh test.scm
縺薙s縺ォ縺。縺ッ


あとコマンドプロンプトでそのままコード書いてもやっぱり文字化けですから
これは不具合というか実験中ということで未対応なんでしょうね

446:デフォルトの名無しさん
08/06/11 01:57:39
ちがいます

447:デフォルトの名無しさん
08/06/11 02:07:37
そうですか

448:デフォルトの名無しさん
08/06/11 02:27:03
>>445
どのWindowsを使ってるかは知らないが、コマンドプロンプトで、
UTF-8でエンコードされた日本語が、正常に表示されると思った根拠は?

449:デフォルトの名無しさん
08/06/11 02:48:12
>>445
コマンドプロンプトに、UTF-8でエンコードされた「こんにちは」を出力すると、
そう表示されるな。

(use gauche.charconv)
(print (ces-convert "こんにちは" 'utf-8 'sjis))

お前、ネイティブエンコーディングって何か理解してないだろ?

450:デフォルトの名無しさん
08/06/11 03:29:34
あっ、なるほど
449さんのコードをUTF-8で保存し、実行すると正しく表示されました
Shift_JISで保存し、実行すると文字化けしました

コマンドプロンプトは基本Shift_JISってことですね
(ちなみにVistaもXPも同じ結果になるぽ)

ネイティブエンコーディングってググってもよくわからないですけど、
言語自体の基本となる文字コードのことでしょうか?
Gaucheの場合、UTF-8ですよね

コマンドプロンプトで直接コードを入力するとShift_JISのコードになってしまう
そのコードをGaucheがUTF-8で解釈して(この時点で文字化け)、
得た結果をさらにShift_JISとして出力されるから・・・・
わけわからないことになりますが・・・

451:デフォルトの名無しさん
08/06/11 03:33:43
そこまで判ってて、なぜ「わけわからない」になるのか、わけわからないw

452:デフォルトの名無しさん
08/06/11 03:56:00
>>450
理解したみたいなので、詳しくは書かないけど、
言語自体というか、処理系が内部で使う文字コードのこと。
Gaucheの場合、EUC-JPやUTF-8、ShiftJISなどから選べる。
それで、お前さんの使ってるGaucheはUTF-8でコンパイルされてる。

確かに、Windowsのコマンドプロンプトから使うには不便だろうな。
configureに--enable-multibyte=sjisを指定してコンパイルし直すか、
Emacs経由で使った方がいいと思うぞ。

URLリンク(practical-scheme.net)

453:デフォルトの名無しさん
08/06/11 08:43:32
>>452
UTF-8でビルドした犯人は俺だ。
でもShift_JISでビルドしたものを配布すると他国の人が困るんじゃないかな。
それともGauche-mingw-0.8.13-sjis.exe とかを作る?

454:デフォルトの名無しさん
08/06/11 08:44:57
>>451
毒を出しすぎ。

455:UTF‐8はXML標準…でも日本語「だけ」苦手?(ТΤ
08/06/11 10:18:00
LISPをざっとみた感想です;

「直感的には」わかりにくかったけれど、
「印欧語話者の生成文法で言う言語本能って
 だいたいこんな感じなんじゃないか?」と思った。
(英語で隠れてるが、ドイツ語は剥き出し?)
→この「発想パターン」は何度でも「来る」。

私は参照(接続/冠詞)型主語言語話者でなくて
近傍(焦点‐集合操作)型主語言語(日本語)話者w
集合操作による構文は経路‐直線的間接参照端点:
 「静的・直線的な論理」:印欧語族の構文法とは違う。
(ドジスンの指摘したとおり論理対象空間は本来動的で、
 各所で前提が違う方が普通だから、直線化は不可能。)

=英語的言語感覚でなら「直感的に使える優秀な言語」。

英語(印欧語)センスを鍛えようw ゎぁぃ モレオワタ(AA略)

456:デフォルトの名無しさん
08/06/11 11:30:34
個人的には、Lispは「言語」ではないと思ってる。
図形、地図、表、レゴブロック、そういったもの達のほうにずっと近い。

だから>>455を読んで、日本語の話者だから戸惑うのではなく、
言語に触れるモードで触れるから戸惑うのではないか、みたいなことを感じた。

457:デフォルトの名無しさん
08/06/11 11:52:23
黒板に自然法則とか書く時はそれでいい
プログラマの意図が分かるように書きたいときは、言語っぽくないと困る

458:デフォルトの名無しさん
08/06/11 12:09:57
>>455
日本語もまともに書けないのはよくわかった。

459:デフォルトの名無しさん
08/06/11 12:50:18
>>458
自分の読解力のなさを棚にあげるのはやめようぜ

460:デフォルトの名無しさん
08/06/11 12:56:30
>>455
そんじゃ、印欧語話者の間でPy(ピー)が人気なのは何で?素朴な疑問~


461:デフォルトの名無しさん
08/06/11 13:03:57
というか、国際的にもLisp/Schemeは日本では大人気。

462:デフォルトの名無しさん
08/06/11 13:04:09
>>469
ほう、なら455を日本語で説明してくれんか?
3行目から出てくる括弧の使い方から。
特攻の拓みたいに特殊な言語かと思ったよ。

463:デフォルトの名無しさん
08/06/11 13:04:37
ごめん459だった。

464:デフォルトの名無しさん
08/06/11 13:14:22
「直感的には」わかりにくかったけれど、
→ 直感的には判りにくいけれど、
「印欧語話者の生成文法で言う言語本能ってだいたいこんな感じなんじゃないか?」と思った。
→ 印欧語話者の生成文法で言う「言語本能」って、大体こんな感じなんじゃないか?と思った。


465:デフォルトの名無しさん
08/06/11 13:54:50
>>453
Windowsのことはよく知らないんだけど、入出力コードはカレントロケールに合わせる
みたいなことって難しいの?

466:デフォルトの名無しさん
08/06/11 13:56:52
>>459
俺も>>455が何を言いたいのか理解できなかった。
読解力無いのかなあ。

467:デフォルトの名無しさん
08/06/11 14:05:44
>>464
5行目以降もまるで判らんので、その調子で翻訳お願いしますね。>459
こんな物を読解する能力なら不要だと確信してるけど、
>>456でいきなり会話が成立した(らしい)事が、本当に不思議でしょうがない。


468:デフォルトの名無しさん
08/06/11 14:08:50
LISP使いはスノッブが多いな
GEBとかメタマジックゲーム読んで悦に入ってそう

469:デフォルトの名無しさん
08/06/11 14:23:47
コンプレクッスですか

470:デフォルトの名無しさん
08/06/11 14:24:44
>>455が理解できない一人でーす。

>>461
「国際的にも」「日本では」
国際的なのか、日本だけなのか、はっきりしる!
…みたいな日本語の乱れについての話題なのかな?今は。
外国人が一生懸命コミュニケーションしようとする試み
なのかもしれないけど、漢字ひらがな並べれば良い、って物じゃないんです。
半端に学ばれたままだと相手を不愉快にさせますよ。

471:デフォルトの名無しさん
08/06/11 14:32:23
2ちゃんの定型文だけはしっかり使うガイジンかよw
字は読めないけど日本のマンガには詳しい、みたいな。

472:デフォルトの名無しさん
08/06/11 14:43:03
いまのとこ一方的に文章吐き出す機能しかないみたいだから
受け答えは期待出来ないと思う

473:デフォルトの名無しさん
08/06/11 15:34:47
>>465
このへんに問題点が書かれている。
URLリンク(practical-scheme.net)
これはVC++の話だけどMinGWも同様と思われる。


474:デフォルトの名無しさん
08/06/11 15:37:14
>>462
俺も理解できないんだが、
>>456が回答してるんだから
理解できる文章なんだろ。
俺たちが読解力不足ってだけで。
と思っただけ。

475:デフォルトの名無しさん
08/06/11 15:40:11
文章を理解したのではなく、その他の能力(ESPなど)を用いたのではないかと思う

476:デフォルトの名無しさん
08/06/11 16:06:49
文章はともかく言葉の意味がわからない
言語学用語なのかな?
あるいはLispを齧ったばかりの455さんが戯れに組んだELIZAじゃないだろうなw

477:デフォルトの名無しさん
08/06/11 16:08:45
455、人気者だなw

478:デフォルトの名無しさん
08/06/11 16:19:09
>>450
MS-Windows使わない人なんでハズしている可能性あるが…

この端末エミュレータで解決できんかね?
実行するコマンドの文字コード指定できるみたいだが。
URLリンク(ja.poderosa.org)

Win32のコンソールAPIは最低限の依存で済ませているみたい。
Gaucheもそうだろうから、利用できるんじゃないか。

479:デフォルトの名無しさん
08/06/11 17:02:49
Lispは素晴らしい言語だと思うのですが
Lispが生き残ってるのはEmacsのおかげ
実用には耐えないが一部ハッカーの趣味で使われている
など否定的な意見のみが見られてイマイチ本気になれません
Lispで作られたアプリケーションを教えていただけないでしょうか

480:デフォルトの名無しさん
08/06/11 17:05:39
マルチかよ

481:デフォルトの名無しさん
08/06/11 17:08:28
これは酷い

482:デフォルトの名無しさん
08/06/11 17:29:13
>>455-479の人気に嫉妬


483:デフォルトの名無しさん
08/06/11 17:30:39
【入門】Common Lisp その4【質問よろず】
スレリンク(tech板:860番)

860 名前:入ってしまえば天国なんだね…。[sage] 投稿日:2008/06/11(水) 11:01:38
LISPに最初から挫折しそうになって、あちこち見ています。

使用者例が少なすぎて発想パターンを断言できないけど、
思考‐発想タイミングから言えば基本的に敷居「だけ」が
高い言語のようだし、初心者を甘やかしても良さそう。

ところで、この言語で言えば印欧語族のロシア語みたいな
性格を見て今、ぐぐってみたんだが…ちょw大当たりww
これは…すごいのはキャラが立ってるLISPだなwww

これが、印欧語族の中では英語的なC言語系だと…
ぐぐってみた…ごめん、もう何も言う事ないwwww
(英語は「敬語」を始め、高度習得が困難です。)

対照的すぐる…(もうちょいがんばれば、あるいは…?



484:デフォルトの名無しさん
08/06/11 17:30:42
>>479
無理して本気になる必要ないよ。
好きなことだけ本気でやればいい。
仕事なら話は別だけどね。

485:デフォルトの名無しさん
08/06/11 17:33:54
>>474
おいおい、弁解するのはかまわないけど、
勝手に「俺たち」で括るのはやめてくれよ。
お前みたいな言う事がコロコロ変わる幼稚な奴と
一緒にされたら気分悪いだろ。


486:デフォルトの名無しさん
08/06/11 17:36:15
ブログペットやマルチにいちいちマジレスする必要もないと思うんだ。(´・ω・`)

487:デフォルトの名無しさん
08/06/11 18:04:32
>>479
これはひどいww

488:デフォルトの名無しさん
08/06/11 18:41:12
>>485
必死すぎw

489:デフォルトの名無しさん
08/06/11 18:57:30
>>488
必死だから何だ?
マジで気持ち悪いからな。お前も含めて。
書き逃げばっかりしてないで意見があるなら書けよ。

490:デフォルトの名無しさん
08/06/11 19:32:58
URLリンク(www.inf.hs-zigr.de)

#!C:/Programme/PLT/mzscheme -r

(require (lib "cgi.ss" "net"))

(display "content-type: text/html") (newline)
(newline)

(display "<HTML>")(newline)

(display "<HEAD><TITLE>cgi-script's response</TITLE></HEAD>")(newline)

(display "<BODY>")(newline)

(display "Hello, I'm Mr. ")
(display (extract-binding/single 'surname (get-bindings)))
(display ". <BR>")(newline)
(display "Just call me ")(display (extract-binding/single "firstname" (get-bindings)))
(display ". <BR>")(newline)

(display "</BODY>")(newline)

(display "</HTML>")(newline)

491:デフォルトの名無しさん
08/06/11 20:55:25
(define λlambda)

492:デフォルトの名無しさん
08/06/11 22:51:48
lambdaは構文だからdefine-syntaxやdefine-macroにしたほうがポータブル

493:デフォルトの名無しさん
08/06/12 01:55:43
scheme初心者なんだけどほんとに再帰って難しい
入門書読んでて再帰の便利さはなんとなく伝わったけど・・・

やっぱ上級者になると普通に使えるんですよね
俺ってやっぱりダメな子・・・

         |        |/(-_-)\|
          |        |  ∩ ∩   |
          |           ̄ ̄ ̄ ̄ ̄
        :::, ――、
       ::::/./^^^^^^'vl
     :::::::| | /  \ ||
      :::::::(sl rェ , rェ |') ウツダ
      :::::゙ゝ、 -  ノ
     :::::/ l  ̄ ̄lヽ
     :::::|-|/l⌒l⌒l-|
     :::::\二、_)二ノ _____________
      :::::|||  |:|  |
      /`ー(⌒)(⌒)
     /;;;;;;;;;;;;;;;; ̄;;;;; ̄
   /
 /



494:デフォルトの名無しさん
08/06/12 02:10:18
>493
昔むかし、Pascalの授業の宿題で再帰を使わないと事実上解けない問題を
「再帰呼び出しと言うものを全く知らずに」何とか解こうと悪戦苦闘した
俺よりはマシw。

495:デフォルトの名無しさん
08/06/12 02:14:54
ちなみにその教科書にはその問題が記述されている箇所以前に
再帰呼び出しを説明している部分がほとんど無かった。

今なら考えられない教科書だと思う。

496:デフォルトの名無しさん
08/06/12 02:19:25
極めて教育的な良い教科書だな

497:デフォルトの名無しさん
08/06/12 02:22:45
一行一行その時の値がいくつになるか紙に書いてみたらわかると思う

498:デフォルトの名無しさん
08/06/12 02:23:14
「再帰」という単語をほとんど使わずに
それを記憶に焼き付けさせたのか

499:デフォルトの名無しさん
08/06/12 02:32:13
さらにちなみに俺の場合(Pascalでの再帰の場合)は
見かけ上、同じ名前の変数や関数でもシンタックス(戻り番地など)と
共にスタック上に別もの扱いで次々と積まれて行く事が分かって
ようやく納得が行ったよ。

そこに気づくまでは訳が分からなかった。

500:デフォルトの名無しさん
08/06/12 02:33:08
ゲームコンテストに出しなさい。
URLリンク(www.tohofuhai.com)  豆腐ゲームコンテスト
URLリンク(kirara111.sakura.ne.jp)  星屑きらら杯
URLリンク(3punge.com) 3分ゲーコンテスト(今休止中)



501:デフォルトの名無しさん
08/06/12 02:55:49
>>494
昔pascalとくれば東大の学生だったんだな。

502:デフォルトの名無しさん
08/06/12 03:30:00
Eclipse3.3+Cups使っている人いる?
なんか環境自体が、うまく動いていないような気がするのだが・・・

503:デフォルトの名無しさん
08/06/12 03:48:30
再起で解け、ループで解けない問題はない。

504:デフォルトの名無しさん
08/06/12 04:16:06
それは「問題」という言葉の意味を取り違えてるのでは。
>>494の思い出話に出てくる「問題」は、あくまで宿題なわけで。
たとえば身も蓋も無い例をいえば、「ただし、ループを使ってはいけない」と書かれた「問題」は、
再帰で解けてもループでは解けないよ。

505:デフォルトの名無しさん
08/06/12 08:09:22
>>494 >>499
Pascalの機能として知らなかったのなら話はわかるが、
再帰の概念がわからなかったっていうのは・・・
高校の数学をさぼってたと考えられる。

506:デフォルトの名無しさん
08/06/12 09:30:12
再帰じゃないと解けない問題なんてあるのか?
「再帰を使用せよ」と指定されてないかぎり、なんでもif/gotoで書き直せる
はずなんだが。

507:デフォルトの名無しさん
08/06/12 09:49:54
例:「再帰を使用せよ」って指定された問題

508:デフォルトの名無しさん
08/06/12 09:59:14
Schemeの末尾再帰はむしろgotoに近い機能ですよ
Schemerはgotoを嫌っているわけではないと思います

509:デフォルトの名無しさん
08/06/12 10:26:12
ackermann関数を再帰なしで

510:デフォルトの名無しさん
08/06/12 10:31:17
現在の有限の記憶域の計算機で計算できるものは再帰なしで計算できる。
配列をスタックと看做してループすれば再帰と等価。
たぶん。
無限の記憶域の場合は等価かどうかはわからない。

511:デフォルトの名無しさん
08/06/12 10:44:03
gogo ackermann!!

512:デフォルトの名無しさん
08/06/12 11:21:09
>>510
>配列をスタックと看做してループすれば再帰と等価
それじゃ関数の呼び出し部分を自分で作ってるのと同じじゃないか?

513:デフォルトの名無しさん
08/06/12 11:35:21
>>510 たらい回し関数ってループに展開可能かい?


514:デフォルトの名無しさん
08/06/12 12:01:04
>>512
そう。
端的に言えば再帰を使わずに仮想機械を組む。
その中で仮想言語で再帰的プログラムを組む。
表層言語には再帰は現れず、
データ(仮想言語)に再帰が現れるだけ。
CPUは再帰的ではなく反復的に計算するけど
再帰計算ができるでしょ?
それをソフトウェアでするだけのこと。
再帰的なデータも許さないとなれば
再帰的アルゴリズムが表現できず
チューリング完全でなくなる。

515:デフォルトの名無しさん
08/06/12 12:01:43
Ackもtaraiも可能です。
>>510
無限記憶領域でも等価です。

詳しくは計算理論の入門書で。

516:デフォルトの名無しさん
08/06/12 13:17:31
>>493
上級者になると、ていうより基礎中の基礎。
ドラゴンボールで言えば舞空術。
囲碁で言えばシチョウ。
でもあのポール・グレアムでさえ
プログラムを習いたての頃は反復アルゴリズムしか知らず
再帰を使いたいなどと考えたことはなかったし
(Ansi Common Lisp)
19歳の時には
「たぶんLispを学ぶべきなんだろう。しかしLispはあまりに異質に見える。」
(Lispがそんなにすごいなら ---If Lisp Is So Great---)
などと考えてたんだから
頑張れ!

517:デフォルトの名無しさん
08/06/12 13:17:52
>>503
あたりまえじゃないか。もちろん逆も真。

518:デフォルトの名無しさん
08/06/12 13:30:10
有名な再帰画像

Drosteココア
URLリンク(en.wikipedia.org)
メリーミルク
URLリンク(mognavi.jp)

519:デフォルトの名無しさん
08/06/12 13:34:59
>>493の書き込みを見て、ふと思った。
再帰を見て、わざわざこんなことしなくても・・・と思ってしまう問題が多い。
たまに再帰があって良かったなと思う程度。
僕は、きっとLispに向いてない。


ちなみに、ほとんどLispはできません。

520:デフォルトの名無しさん
08/06/12 13:51:53
>>519だが、連投すまん。
この質問に的確に答えてくれる人がいたら、
みんなの(僕の)ためになるんじゃないかと思って。

たとえば、再帰を使うめっちゃ初歩的な関数lengthがあるよね

(defun length (lst)
(if (null lst)
0
(+ 1 (length (cdr lst)))))

再帰がわからない人って、読むときにlengthって関数の
意味が知りたいのに(わかってないのに)、lengthを使われても
わかるわけないじゃんってことじゃない?

521:デフォルトの名無しさん
08/06/12 13:55:28
その辺について、ANSI Common Lispで言ってたね。
以下、それを引用しているページから引用。

初めのうちは再帰は理解するのが難しいと思う人が多い。
難しいと思ってしまうのは、主に関数に対して誤ったメタファ(比喩)をあてはめていることによる。
人々は関数をマシンの一種ととらえがちである。
原料がパラメータで届き、ほかの関数に下請けに出して処理し、最後に完成品を組み立てて、返り値として出荷する。
関数に対してこのメタファをもっていると、再帰は不可能ということになる。
マシンがどうやって作業を自分自身に下請けに出すのか?
動作中のマシンにはそんな余裕などないじゃないかと思ってしまうことになる。

関数は進行しつつあるプロセスであると見る方が、メタファとしては適当であろう。
再帰はプロセスの中では自然なものである。日常生活でも再帰的なプロセスをよく見る。
たとえば、ヨーロッパ史における人口変化に関心をもっている歴史家を考えてみよう。
資料を調べるプロセスは以下のようなものだろう。

1. 1 つの資料を手に入れる
2. 人口変化に関する情報を探す
3. その資料がほかの役立ちそうな資料に言及していたら、ほかの資料を調べる

このプロセスは理解しやすいものだが、第 3 ステップにより同じプロセスが何度か適用されることがあるので、
再帰的なプロセスになっている。

522:デフォルトの名無しさん
08/06/12 14:00:20
>>520
なるほど、そういう風に悩むのか。

まず、lengthの中のlengthが使われるのはnullでないときだけ、
つまり () に対する length の値は length を使わずに 0 と決まっている。
で、それ以外については length を使うわけだが、だんだん短くなっていつかは 0 が返る。

という具合にステップバイステップで考えていくと判りやすいんじゃないかな。

523:デフォルトの名無しさん
08/06/12 14:02:50
文系の奴は頭だけで理解しようとするからイカン
グダグダ言ってないで手も動かせ

そう言っていた数学の先生がいたとかいないとか
The Little Schemerなんかもそのクチか

524:デフォルトの名無しさん
08/06/12 14:05:57
でもまぁ実際には、理系にとっても「体感」というのは大事だよな。

525:デフォルトの名無しさん
08/06/12 14:20:38
数学的直観って言葉があるくらいだからね。

自分は数列、漸化式が得意で好きだったから、
再帰は何も悩む所がなかった。

実装手法もPコードですぐに理解できた。(東大ではありません>>501)
浮動点による意味づけを知った時には、
漸化式みたいでわくわくした。


526:デフォルトの名無しさん
08/06/12 14:43:07
>>521
名文をありがとう。

>>522
う~ん、自分流に噛み砕くと、
(1)停止することを確認
(2)cdr部分を取って、空リストになるまでは1足し続ける(lengthの場合)
ってことですかね。

>>525
うらやましい。

527:デフォルトの名無しさん
08/06/12 15:00:29
部分問題に分けて、(car, cdr)
部分問題毎に適切な処理、(1, length)
部分問題の解を統合。(+)
部分問題の収束地点の設定。(null, 0)

分割統治法の一番極端な形、一要素とそれ以外に分ける。
後は下請け(再帰的関数呼出し)に任せる

528:デフォルトの名無しさん
08/06/12 16:27:08
いちいちcarとかcdrみたいな「処理」で取り出させるのが前時代的なんだよなー
LISt Processorなのにパターンマッチが標準で無いってどういうことよ

529:デフォルトの名無しさん
08/06/12 16:28:49
>>528
簡単に作れるからでは?

530:デフォルトの名無しさん
08/06/12 16:31:19
>>529
簡単に作れるものほど言語が準備すべきだと俺は思う。
そうでないと人によってそれぞれの実装ができてしまって
言語の「中に」バベルの塔ができちゃうからね(実際Lispはそうなっちゃってるのでは?)

531:デフォルトの名無しさん
08/06/12 16:35:42
パターンマッチこそが言語内言語なんだよね。
汎用のパターンマッチを使うよりも効率的な専用マッチャーが簡単に書けるから、
必要性が低いのだ。正規表現があまり使われないのも、だいたい同じ理由だ。

532:デフォルトの名無しさん
08/06/12 16:40:44
処理系毎の拡張で用意されてるでしょ

533:デフォルトの名無しさん
08/06/12 16:43:07
汎用のPrologインタプリタでさえ、Lispなら100行くらいで書けるからなあ。

534:デフォルトの名無しさん
08/06/12 16:44:27
>>528
君の考える「パターンマッチ」の具体的な仕様と使用例を示してくれると、
より有意義な議論ができると思う。

535:デフォルトの名無しさん
08/06/12 17:51:19
パターンマッチって分岐と分解を同時に行う処理だと思ってる
大抵は分岐の内容に応じてリストを分解するから一度に処理するのは適切な抽象化なはず
下にリストの内容を1だったら2、2だったら5、それ以外だったらそのままにして変換する関数を
書いてみたがどうみてもパターンマッチ版の方がわかりやすい(どうやってパターンマッチを実装するのかは
しらないけど。あとmap使えというのは禁句)
みんなのLispプログラムもみなおしてみたらパターンマッチを使った方がスッキリする部分が多くあるのでは?
このスレにもパターンマッチを「ふわふわしたおまけ」としかみなしてない人が結構多いと思うから
俺のレスがパターンマッチを使うきっかけになってくれれば幸いだ。


(defun (hoge lst)
(cond ((eq (car lst) 1)
(cons 2 (hoge (cdr lst))))
((eq (car lst) 2)
(cons 5 (hoge (cdr lst))))
((and (not (null? lst)) (list? lst))
(cons (car lst) (hoge (cdr lst))))
(else
nil)))

(defun (hoge lst)
(pm lst
((| 1 xr)
(cons 2 (hoge xr)))
((| 2 xr)
(cons 5 (hoge xr)))
((| x xr)
(cons x (hoge xr)))
(else
nil)))

536:デフォルトの名無しさん
08/06/12 17:59:53
>>535
後者が簡潔だが、前者が判りやすい。おそらく効率は前者が勝る。
「ふわふわしたおまけ」とは思わないけど、言語の中に別の言語を導入するような
気持ち悪さは感じる。

まあ好きな人は使えば良いのでは?という程度かなあ。

537:デフォルトの名無しさん
08/06/12 18:20:59
>>535
CL?Scheme?

538:デフォルトの名無しさん
08/06/12 18:27:26
俺パターンマッチ入りの俺Lisp言語だろw

539:デフォルトの名無しさん
08/06/12 20:20:34
パターンマッチはなじむと便利
可読性とかは知らんけど

540:デフォルトの名無しさん
08/06/12 20:22:11
まあ関数型言語だとおなじみ

541:デフォルトの名無しさん
08/06/12 20:25:28
頑張れば CLtL3 に入れてもらえるかもw

542:デフォルトの名無しさん
08/06/12 20:28:51
535のプログラムみて思ったんだけど
Listだけどnilじゃないのを一発で判別する関数ってないんかね

543:デフォルトの名無しさん
08/06/12 21:05:06
consp
pair?

544:デフォルトの名無しさん
08/06/12 21:41:28
来月「Practical Common Lisp」の訳書が出るっぽい
URLリンク(www.bk1.jp)

545:デフォルトの名無しさん
08/06/12 21:47:48
>>544
原著よりも安いのか。
園城さんって、LispUser.netの人ですね。

546:デフォルトの名無しさん
08/06/12 21:54:10
>>543
「List」だけどnilじゃない

547:デフォルトの名無しさん
08/06/12 22:37:44
>>528
いろいろな人が考えたけど、
S式とうまくマッチするのがないってのが現状。
これだけ時間がかかって見つからないからないんだと思う。

define-syntaxは一部カバーしていると思うが。

548:デフォルトの名無しさん
08/06/12 22:57:14
CLOSがパターンマッチみたいなものだと思うのですが

549:デフォルトの名無しさん
08/06/12 23:32:04
>>547
昔から、
(match '(a b . c) '(1 2 3 4 5)) =>((a 1) (b 2) (c (3 4 5)))
(match-let (a b . c) '(1 2 3 4 5) (list a b c)) =>(1 2 (3 4 5))
みたいなのや、prologのunification辺りはほとんどの人間が
自分の物を持ってると思うけどな。
こういうのをマクロにしてパターンを定数で取れば特殊化もできる。
今は組み込みにするのが流行だろうけど、
LISP系ならパターンマッチはライブラリで自然に実装できる範囲だから、
あえて入れなかったのでは。

550:デフォルトの名無しさん
08/06/12 23:39:31
>>546
nilは「List」だけど。
おまいのListの定義がおかしいだけ。

素人増えましたな。

551:デフォルトの名無しさん
08/06/12 23:46:00
Listだけどnilじゃないのを一発で判別する関数
(define (non-nil-list? x)
 (and (not (null? x))
    (list? x)))
が組み込みであるか?てことでしょ。
これはSchemeのコードだけど。
コンスとリストを混同してるのでは?

552:デフォルトの名無しさん
08/06/12 23:55:31
(and (consp x) (listp x))を一発で判別したい

conspだけでいいのでは

よくない

?←今このへん

553:デフォルトの名無しさん
08/06/12 23:56:48
自分で述語用意すればいいじゃん・・。


554:デフォルトの名無しさん
08/06/13 00:04:15
点対神経症だろw

555:デフォルトの名無しさん
08/06/13 00:07:37
CLの listp (点対でも真)とSchemeの list? (点対だと偽)の差が混乱を招いているのでは?

556:デフォルトの名無しさん
08/06/13 00:25:34
>>535みたいなどこかの俺言語で育っちゃった人は
一度まじめにどっちかで矯正した方がいいよ。


557:デフォルトの名無しさん
08/06/13 00:34:25
狼に拾われたがパンダに育てられて観賞用に


558:デフォルトの名無しさん
08/06/13 02:00:34
どっかってどこ?
MITとかUCBあたり??

559:デフォルトの名無しさん
08/06/13 02:02:26
このスレとかでいいんじゃね?w

560:デフォルトの名無しさん
08/06/13 02:07:30
535の脳内のどこか

561:デフォルトの名無しさん
08/06/13 02:30:21
>>556
これから独学でLisp習おうと思ってる。
今までプログラミング言語を真っ当に習ったことはなくUNIXのBシェルスクリプトが
ちょっと使えるくらい。

こんな自分が、あとから矯正の必要がないように正しく学ぶためにはどうすればいいですか?


562:デフォルトの名無しさん
08/06/13 02:35:00
>>561
訳書は見てないけど >>544 なんて良いんじゃないかな。
実用的な例題で勉強できるから飽きないと思うよ。

563:デフォルトの名無しさん
08/06/13 02:37:43
>>561
わたしゃ独学でCLを学んでたけど、
定番の本だけはきっちり抑えておくとそこから、書き方を学ぶことができるよ。
もちろん、本に載ってなくって、知っておいたほうがよい方法やスキルというのも
あるけど、それは実際に勉強会などを通じて人とのコミュニケーションをとっていく
事からだと思うな。

別に俺様言語でもいいけどさ。矯正は必要な場合はあるけど、実際に回りにschemer
がいるかといえば別の問題があるからね。その点は指摘してる>>556というのは
恵まれた環境を持っているといえるね。最近はハブサイトもできつつあるから、
独学者にとってもよい時代がくると思うよ。shiroさんのサイトみたいに人が集まってるとこ
ろは自分から積極的に恵まれた環境を作るきっかけにはなるよ。



564:デフォルトの名無しさん
08/06/13 02:40:26
定番ってのは、ANSI Common LispやPractical Common Lisp, PAIPあたりだけど。
オンラインのみで流れているスタイルに対してのよいドキュメントは
先日g000001さんたちがやっていたNorvig and Pitman 1993 (和訳あり)をよんで
みればいい。

565:デフォルトの名無しさん
08/06/13 02:48:07
URLリンク(www010.upp.so-net.ne.jp)

これね。これはcommon lispの師匠に進められた文章でもあります。テンプレに含めて
もいいと思う。

566:デフォルトの名無しさん
08/06/13 02:51:18
>>544
ktkr

567:デフォルトの名無しさん
08/06/13 07:33:49
>>562-565
thx!

568:デフォルトの名無しさん
08/06/13 07:37:36
>>565
その文章はとてもいいよね。
でもおれdeftype使ったプログラムあんまり見たことないんだけど気のせい?

569:デフォルトの名無しさん
08/06/13 09:50:06
>>568
> でもおれdeftype使ったプログラムあんまり見たことないんだけど気のせい?

たしかにみたことがない。 あまりないのはしかたがないかも。
typecaseで場合分けすることや型宣言前提だろうし。


570:デフォルトの名無しさん
08/06/13 13:55:21
俺は情報隠蔽はpackage, CLOSの仕事と割り切ってる。
だから使ったことない。> deftype


571:デフォルトの名無しさん
08/06/13 14:24:51
>>570
微妙にわかるような、わからないような…。
でも、棲み分けだよね。

572:デフォルトの名無しさん
08/06/13 17:00:48
>>565
この文章は俺もよく参考にさせてもらいました。ちなみに原文(英語)はこちら。
URLリンク(www.cs.umd.edu)

573:546=551
08/06/13 23:36:37
>>555
なるほど。私が不勉強でした。
>>550
失礼しました。

574:デフォルトの名無しさん
08/06/13 23:57:48
で、結局Cuspは使えるのか?!


575:デフォルトの名無しさん
08/06/14 01:09:21
こういうこと?

(list? '(1 . 2)) ;=> #f
(list? '()) ;=> #t

(define (listp x)
 (and (not (null? x))
    (pair? x)))

(listp '(1 . 2)) ;=> #t
(listp '()) ;=> #f

576:デフォルトの名無しさん
08/06/14 01:14:50
(list? '(1 2)) ;=> #t


(listp '(1 2)) ;=> #t

577:デフォルトの名無しさん
08/06/14 05:38:16
まだ理解できてないじゃん
最初からおさらいしたら?

578:デフォルトの名無しさん
08/06/14 11:07:37
(list? '(1 . 2)) ;=> #f
(list? '()) ;=> #t
(list? '(1 2)) ;=> #t

(define (listp x)
 (and (not (null? x))
    (pair? x)))

(listp '(1 . 2)) ;=> #t
(listp '()) ;=> #f
(listp '(1 2)) ;=> #t

(define (non-nil-list? x)
 (and (not (null? x))
    (list? x)))

(non-nil-list? '(1 . 2)) ;=> #f
(non-nil-list? '()) ;=> #f
(non-nil-list? '(1 2)) ;=> #t

579:デフォルトの名無しさん
08/06/14 11:20:00
(define (nil-list? x)
 (not (non-nil-list? x)))

(nil-list? '(1 . 2)) ;=> #f
(nil-list? '()) ;=> #f
(nil-list? '(1 2)) ;=> #t

580:デフォルトの名無しさん
08/06/14 11:21:54
間違えた>>579

(nil-list? '(1 . 2)) ;=> #t
(nil-list? '()) ;=> #t t
(nil-list? '(1 2)) ;=> #f

581:デフォルトの名無しさん
08/06/14 12:11:14
DrScheme ver.4.0キタワ

582:デフォルトの名無しさん
08/06/14 12:24:12
URLリンク(plt-scheme.org)

583:デフォルトの名無しさん
08/06/14 12:58:53
>>578-580
いちいち無意味なもん貼るな。
自由帳はこちら。>>8



584:デフォルトの名無しさん
08/06/14 13:06:37
>>583
初心者に向かって「いちいち」とか書き込んでるオマエの方が「いちいち」ウザイw

585:デフォルトの名無しさん
08/06/14 13:07:38
初心者は放って置けば消えていくJK。

586:デフォルトの名無しさん
08/06/14 13:21:11
「On Lisp」の「第16章 マクロを定義するマクロ」スゲー

587:デフォルトの名無しさん
08/06/14 14:49:14
>>586
その気になれば作れるようになるよ。:-)

588:デフォルトの名無しさん
08/06/14 16:10:43
>>265のambをlet-syntaxするマクロを書いたら、`...' が衝突した
URLリンク(codepad.org)

こうですか?わかりません!
URLリンク(codepad.org)

589:デフォルトの名無しさん
08/06/14 16:53:50
>>588
URLリンク(codepad.org)

590:デフォルトの名無しさん
08/06/14 19:20:05
>>589
おお
PLTの拡張かと思ったがR6RSに書いてあった。thx

591:デフォルトの名無しさん
08/06/14 19:33:58
【産学連携】京大と日本IBM、大規模交通社会シミュレーションシステムを開発[08/06/11]
スレリンク(bizplus板)
URLリンク(pc.watch.impress.co.jp)

このシステムで使われてるシナリオ記述言語Qの説明を見ると、Dr.Scheme版が有る。
URLリンク(www.ai.soc.i.kyoto-u.ac.jp)


592:デフォルトの名無しさん
08/06/14 21:34:24
Dr.Scheme ver.4.0ってset-cdr!が使えないの?

593:デフォルトの名無しさん
08/06/14 23:12:54
>>592
ver372までset-cdr!が使える。
pre399ぐらいでは使えなくなってた。ver4.0は400に相当してるはずで使えないと思う。
正直、不便になった。

594:デフォルトの名無しさん
08/06/14 23:29:46
ということは、実装によってはlist?を定数時間で計算できるな

595:デフォルトの名無しさん
08/06/15 02:10:36
処理系依存の話題で恐縮ですが、Gaucheのオブジェクトシステムについてお聞きしたいです。
スレ違い、または既出だったら申し訳ないです。

用件を言うと、Gaucheのオブジェクトシステムで
スロットに対するアクセス制御は困難でしょうか?
(アクセス制御: C++, Java等にある private / public 的な機構)

現在、「プログラミングGauche」17章のオブジェクトシステムのあたりを読んでます。
自分は、Java->Ruby->(Haskell)->Scheme
とやってきたので、どうもJava的なOOの発想があるようです。
せっかくオブジェクトシステムがあるのだから、
活用しようと思っているのですが、スロットのアクセス制御が無いと不安に思います。
method内だけ参照や変更を許すようなclassを定義したいなぁと思ったのが事の発端です。

「Gauche:スロットアクセス」で検索して出てくるページが参考になったのですが、
マクロとメタオブジェクトプロトコルを駆使してました。

やはり総称関数という機構を取り入れている以上、
単純にスロットをカプセル化はできないですかね?
長文すみませんでした。


596:デフォルトの名無しさん
08/06/15 02:13:54
いわゆるメソッドと違って、総称関数は特定のクラスの所有物じゃないからねえ。
とりあえず、その辺を管理する(指定する)仕掛けがいるわなあ。

597:デフォルトの名無しさん
08/06/15 02:14:38
真面目な長文かけるならこんなゴミ溜めじゃなくてWilikiにでもかきなよ


598:デフォルトの名無しさん
08/06/15 02:18:57
>>595
アクセスコントロールはないです。

599:デフォルトの名無しさん
08/06/15 03:10:07
整備兵 『80%?冗談じゃありません!現状でジオングの性能は100%出せます!!』
シャア  『脚は着いていない』
整備兵 『あんなの飾りです。偉い人にはそれが分からんのですよ!』

600:デフォルトの名無しさん
08/06/15 03:29:04
javaやC++と同じにしたいなら、同じ機構を用意すればいい。
wilikiの連中は、既存のシステムしか使わずに実行時に何かやろうとしてる。
おかしな事になるのは当然。こんなのと付き合う必要はない。
>>595を含め大抵の奴はCLOSモドキなんて望んでない。
javaやC++でコンパイル後に何の情報が残るか考えれば判るはず。
さあ、やるんだ。

601:デフォルトの名無しさん
08/06/15 03:35:07
>>599
元ネタってガンダムなの!?

602:デフォルトの名無しさん
08/06/15 03:47:35
>>600
こうして、アプリケーションと同じ数だけのフレームワークが発明されるのであった。w
(批判ではない。むしろこのあたりがLispの良さであろう。)

603:デフォルトの名無しさん
08/06/15 04:07:38
資産の積み重ねができないわけですね
これも数十年経ってもメジャーになれない理由の一つなのかな?

604:デフォルトの名無しさん
08/06/15 04:15:06
ANSIに規格がある言語はマイナーとは言えないだろう

605:デフォルトの名無しさん
08/06/15 05:03:15
>>595
CLOS系は「そういうもの(アクセス制御は気にしない)」だと思うのが吉。
文化の違い。
隠蔽したいなら、クロージャベースのオブジェクトシステムの方がいいんじゃないかな。


606:デフォルトの名無しさん
08/06/15 07:10:05
>>595
CLOSって、Java/C++系とは文化が違いすぎて、private/public/protectの区別がなくても
さほど問題がないよ。この辺は>>605さんの意見とかぶるね。

あの系統のオブジェクトシステムを作るなら、別に作成したほうがいいけど、できればCLOS
の方を利用するように頭の発想を切り替えたほうがいいよ。CLOSのほうが柔軟な制御が
できるのでね。

607:デフォルトの名無しさん
08/06/15 08:00:04
オブジェクトが必ずその名前のスロットを持っているとassertできる状況なら、
それを隠蔽する必要があるとは思えない。

608:デフォルトの名無しさん
08/06/15 08:16:27
CLOS使えだなんて口が裂けても言えん。

609:デフォルトの名無しさん
08/06/15 11:02:11
CLOSは、例えばアクセスコントロールを持つような
別の標準オブジェクトシステムのカーネルになるための
基本オブジェクトシステムとして考案されたが、
いつの間にか標準のオブジェクトシステムの座に着いている。

なんだ使ってみればCLOSのままでええやんってところか。

610:デフォルトの名無しさん
08/06/15 11:06:40
そこでFlavorsですよ。

611:デフォルトの名無しさん
08/06/15 11:27:16
>>609
この辺の事情はbit別冊のCLOS本に書いてある。
たしか井田さんがMLでの議論をまとめてる。

既存のCommonLoopsかFlovorsのどちらの流儀にするか揉めているところに、
汎用のカーネルを考案できないかとの提案があった。

612:デフォルトの名無しさん
08/06/15 11:30:26
>>597
そうですね。是非、そちらの方も活用させて頂きます。
scheme系は、まだ初めてから日が浅いこともあり、
気が引けてました。

>>600
私の不勉強で、どのようにJavaなどと同じ機構を実現するか分かりませんでした。
出直します。ただ、できるだけ独自の機構は避けたいと考えてました。

>>605-607
クロージャベースのオブジェクトシステムだと内部状態は隠蔽できますね。
ただ、CLOSとの相性・一貫性に不安があり、できればGaucheに標準的にある
オブジェクトシステムだけで解決しようと思ってました.
皆さんのおっしゃるように、発想を切り替えてみようと思います。

>>596-608
最後に。皆さん、レスありがとうございました。とても参考になりました。
CLOSと、Java/C++系とは異なる発想でプログラムを設計するという事ですね。
CLOSを実際にもっと使用して、その発想の違いを考えていきたいと思います。

613:デフォルトの名無しさん
08/06/15 11:47:01
人気の言語を作るには ---Being Popular---
URLリンク(practical-scheme.net)
を読んで妄想した事。
Lispにシステムハッキング機能を追加したら、インスタントLispマシンの出来上がり!!
Lisp Override your Operating System...

614:デフォルトの名無しさん
08/06/15 13:03:12
>>613
つmovitz

615:デフォルトの名無しさん
08/06/15 13:51:43
>>592-593
LanguageをSwindleに設定したらset-cdr!が使えました。

616:デフォルトの名無しさん
08/06/15 16:13:16
>>615
ver4.0ってR6RSに対応したんだっけ?

617:デフォルトの名無しさん
08/06/15 16:47:57
setq 説得

set-cdr! 説得だああああ!

618:デフォルトの名無しさん
08/06/15 16:54:30
お~い、山田く~ん
617の座布団全部とれ!

619:デフォルトの名無しさん
08/06/15 17:34:39
>>616
ほぼR6RSを満たすSchemeや、独自のPLT Schemeなど複数の言語が選べる。
そして、異なる言語で書かれたモジュールをインポートできる。

620:デフォルトの名無しさん
08/06/15 17:41:42
>>616
>ほぼR6RSを満たすSchemeや

まだR6RSに対応できてないの?言語選択はR5RSのままだし。

621:デフォルトの名無しさん
08/06/15 18:12:48
>>620
言語選択は一番上の ``Module'' を選ぶ。
ソース (DrSchemeのウィンドウの上半分) の最初の行に
#!r6rs
次の行に
(import (rnrs))
それ以降の行に定義を書いて
Runのボタンを押す。

622:デフォルトの名無しさん
08/06/15 19:12:34
r6rsモードだと#lang schemeの組み込み関数とかsrfiとか使えなくね?

623:デフォルトの名無しさん
08/06/15 19:48:02
R6RSになって「R5RS用のSRFI」は使えてるの?

624:デフォルトの名無しさん
08/06/15 19:59:04
Revised6 Report on the Algorithmic Language Scheme
URLリンク(www.r6rs.org)

Revised6 Report on the Algorithmic Language Scheme ― Standard Libraries
URLリンク(www.r6rs.org)

Revised6 Report on the Algorithmic Language Scheme ― Non-Normative Appendices
URLリンク(www.r6rs.org)

Revised6 Report on the Algorithmic Language Scheme ― Rationale
URLリンク(www.r6rs.org)

基本的には上2つがユーザーに重要な情報。
#次のテンプレに入れてください。

625:デフォルトの名無しさん
08/06/15 20:05:05
ちょっと聞きにくい質問なんですが、
R6RSってR5RSとかと比べてどうなんでしょうか。
まだ出たばかりで実装は少ないと思いますが、
今後、多くの処理系で実装が進むのか、
また、ユーザとしてもR6RSへの移行を意識しておくべきなのか、
そういったことです。
ちょっと漠然とした質問でうまくまとめられなくてすみません。

626:デフォルトの名無しさん
08/06/15 20:10:00
>>621
(import (rnrs))
↓↑
(import (rnrs (6)))

どっち?

627:デフォルトの名無しさん
08/06/15 20:14:27
>>621
補足
特殊トークン #!r6rs はソースがR6RS準拠であることを示す。コメント扱い。

628:デフォルトの名無しさん
08/06/15 20:19:16
(import (rms)) かとおもった。

629:デフォルトの名無しさん
08/06/15 20:25:35
slibはちゃんと使える?

630:デフォルトの名無しさん
08/06/15 20:44:36
>>625
R6RS決定時からPLT Scheme、Chez Scheme、Scheme48は近いうちにR6RSを採用すると言われていました。
今回、PLT Schemeが出してきたので、先行していたScheme48に続いて2つ目の実装かな。
Chez Scheme v7.4は部分的にR6RSのプリミティブが使えるようになってますが「will soon support R6RS standard.」となってるので、
次のアップデートで完全対応だと思います。

自分も含めたユーザーは実装が出揃って、ある程度比較記事などを見たうえで行動してもいいと思います。
今後、色々な問題点が表面化するでしょうから。
うまくいけばR6RS対応の色々な処理系に対するポータビリティは高くなる「ハズ」ですがw

631:デフォルトの名無しさん
08/06/15 21:19:15
>>628
Join us now and share the software;
You'll be free, hackers, you'll be free.
って超音痴で歌うのか!

632:デフォルトの名無しさん
08/06/15 21:20:10
Scheme48ってR6RSにもう対応してましたっけ?

633:デフォルトの名無しさん
08/06/15 21:22:20
Fmmm..... なぜあなたは超音痴だと確信したのですか?

634:デフォルトの名無しさん
08/06/15 21:32:05
>>633
一度聴いた事あるです orz


635:デフォルトの名無しさん
08/06/15 21:43:46
>>631
>Join us now and share the software;
>You'll be free, hackers, you'll be free.
これか…… URLリンク(jp.youtube.com)

636:デフォルトの名無しさん
08/06/15 22:09:42
>>622
(import
(rnrs)
(prefix (scheme base) scheme:))

637:デフォルトの名無しさん
08/06/16 19:19:10
Gauche-gl入りバージョンをリリースしました。(Gauchebox-0.8.13-box2.exe)
URLリンク(sourceforge.net)


638:デフォルトの名無しさん
08/06/16 19:20:02
ガウチェ(・∀・)

639:デフォルトの名無しさん
08/06/16 20:56:24
OpenBSDでClispをビルドすると
なぜか実行ファイル作成機能が壊れてしまうので
ソースを追ってみたのですが
とても不思議な現象に遭遇しました。
実行ファイルを指すファイルディスクリプタから
readで読み込む部分の前に
読み込み先メモリが一度は少なくとも4000バイト間隔で先頭から末尾までアクセスされてないと
EFAULTが起こります。
読み込み先メモリに4000バイト間隔で1バイトの読み込みOR書き込みを行ってから
readすれば正常に動作します。
なぜでしょう?
ちなみに4000バイト・EFAULTというのはi386プロセッサの場合で
armプロセッサの場合はそれぞれ3999バイト・EACCESになります。

640:デフォルトの名無しさん
08/06/16 22:57:20
>639
まぁとりあえずスレ鯛みておちつけ

641:デフォルトの名無しさん
08/06/16 23:13:55
CLispのビルドの問題なのでスレ違いじゃないと思ったのですが…

642:デフォルトの名無しさん
08/06/16 23:16:41
つか、もし本当なら OS のバグ(つまりスレチ)じゃね?

643:デフォルトの名無しさん
08/06/16 23:22:38
CLispならCommon Lispスレ行って聞いてみたらどう?
スレリンク(tech板)

644:デフォルトの名無しさん
08/06/16 23:29:25
別にすれ違いだとは思わないよ。ただし、それにコメントができる人はほとんどいなさそう。

645:デフォルトの名無しさん
08/06/16 23:36:41
>>644
>ただし、それにコメントができる人はほとんどいなさそう。
あら、そう。

646:デフォルトの名無しさん
08/06/16 23:39:10
>>644
氏ね

647:デフォルトの名無しさん
08/06/16 23:40:37
わかってるくせにwww

648:デフォルトの名無しさん
08/06/16 23:42:01
OpenBSDのスレで聞けや、クズ

649:デフォルトの名無しさん
08/06/16 23:44:43
いや、質問っていうよりは、報告したかったんじゃないのかなw

650:デフォルトの名無しさん
08/06/16 23:57:29
言葉の使い方もシランガキが集まってきたな。


651:デフォルトの名無しさん
08/06/16 23:58:43
>>639
>readで読み込む部分の前に
>読み込み先メモリが一度は少なくとも4000バイト間隔で先頭から末尾までアクセスされてないと
>EFAULTが起こります。

部分の前に
一度は少なくとも

はどういう意味でしょうか? 文章を読みこなせません。

652:デフォルトの名無しさん
08/06/17 00:18:00
仮割り当て状態のページに I/O するとエラーになるというんだろ。
本当なら OpenBSD のバグなので、そちら方面で報告すべし。

653:デフォルトの名無しさん
08/06/17 01:37:10
別にすれ違いだとは思わないよ。
第一、そんなことも知らないと見下されてるわけか。バカにされたもんだな。
そういうことを聞いてるんじゃないってことがなぜ伝わらないのか。
情報があるなら教えて欲しい、それだけだ。

654:デフォルトの名無しさん
08/06/17 01:54:56
>>65
最初の3行は不要
なぜ馬鹿にされたのか、なぜ伝わらなかったのかを考えたほうがいい

655:デフォルトの名無しさん
08/06/17 01:55:27
>>654>>653

656:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/17 04:18:35
>>654
> なぜ馬鹿にされたのか、なぜ伝わらなかったのか
運悪くこのスレに馬鹿が集まっていたからですね。

658:デフォルトの名無しさん
08/06/17 11:12:40
運の悪い奴って何やっても駄目だよな~

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

660:デフォルトの名無しさん
08/06/17 14:12:29
(scheme:car ((scheme:list 1 2 3))

とか

(car (list 1 2 3))

なら動くんだろ?

661:デフォルトの名無しさん
08/06/17 15:33:58
ネタか・・・

662:639
08/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:デフォルトの名無しさん
08/06/17 18:07:22
>>657-658
運の悪い馬鹿は自己申告しなくて良し。

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

665:デフォルトの名無しさん
08/06/17 18:23:09
>>664
常駐乙

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

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

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

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

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

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

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

673:デフォルトの名無しさん
08/06/17 23:50:10
C++/CLIにポインタが2種類あるような感じだな

674:デフォルトの名無しさん
08/06/17 23:56:59
immutableなconsセルというと後藤英一氏のHLISPが元祖だろうな。

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

676:デフォルトの名無しさん
08/06/18 01:47:56
immutableにして何か利点はあるんですかね?
GPU対応とかconcurrent対応ぐらいしか思いつかない。う~む。

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

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

679:デフォルトの名無しさん
08/06/18 03:27:38
>>678
Streamを使えば破壊的操作を使うから多いと思う。

680:デフォルトの名無しさん
08/06/18 07:39:44
>> 677
(define cons mcons)

define-values: cannot change constant identifier: cons

エラーになります orz

681:デフォルトの名無しさん
08/06/18 08:02:56
>>680
マクロは?

682:デフォルトの名無しさん
08/06/18 08:21:59
DrSchemeはネタの巣窟ですね
MzSchemeなら問題ないです

683:デフォルトの名無しさん
08/06/18 10:03:53
>>675
これ?
URLリンク(blog.plt-scheme.org)

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

685:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/18 15:55:29
;こんな感じ。
;URLリンク(pre.plt-scheme.org)
(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:デフォルトの名無しさん
08/06/18 16:07:21
>>687
サンクス!
でも、こんどは
(map cons lst1 lst2)
が大破しました... "orz"
それなりの混乱が予想されるのにこうなったって事は何か良い見返りがあるはずだよね...

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

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

690:デフォルトの名無しさん
08/06/18 16:13:11
>>688
URLリンク(pre.plt-scheme.org)
ココの関数はマクロで修正しないとダメポ。
mmapが orz

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



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

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

みたいな。

693:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/18 16:39:33
正直、Schemeを名乗らないで別の名前を付けてくれと思った。

696:デフォルトの名無しさん
08/06/18 16:40:56
Scheme 2.0 って感じだなw

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

698:デフォルトの名無しさん
08/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
08/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:デフォルトの名無しさん
08/06/18 16:54:50
>>698
㌧。俺が馬鹿だったw

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

702:デフォルトの名無しさん
08/06/18 17:00:02
Immutive Schemeって評判いいの?

703:デフォルトの名無しさん
08/06/18 17:02:15
>>698>>699
それはmapの安全性の問題では?

704:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/18 17:13:16
(define-syntax car
(syntax-rules ()
((_ a) (mcar a))))

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

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

708:デフォルトの名無しさん
08/06/18 17:40:54
(define-syntax pair?
(syntax-rules ()
((_ a ) (mpair? a ))))

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

710:デフォルトの名無しさん
08/06/18 17:58:15
目的に合った処理系を。

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

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

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

714:デフォルトの名無しさん
08/06/18 18:35:24
>>713
なわけないw

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

716:デフォルトの名無しさん
08/06/18 18:37:16
新しいDrSchemeってドキュメントにThreadの項目が増えたの?

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

718:デフォルトの名無しさん
08/06/18 18:38:18
SICPならMIT-Schemeを使うとか

最近のMITはMzSchemeらしいけど

719:デフォルトの名無しさん
08/06/18 18:42:44
>>718
つまりDrSchemeのMzSchemeモードと中身は同じ。

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

721:デフォルトの名無しさん
08/06/18 20:15:24
最近のMITのSchemeはPythonじゃないの?

722:デフォルトの名無しさん
08/06/18 20:46:58
最近のMITのSchemeがPythonだとは初耳だw

723:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/18 23:45:37
>>723
継続はトップレベルをまたげない処理系が多い。(実装依存)
そういう意味ではトップレベルは特別。

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

726:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/19 00:13:30
>がうちぇ
セロ弾きの「ごーしゅ」じゃなかった?

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

729:デフォルトの名無しさん
08/06/19 00:19:59
がうちぇのがしっくりくるのは間違いない

730:デフォルトの名無しさん
08/06/19 00:25:26
がうちぇの方が美味しそう

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

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

733:デフォルトの名無しさん
08/06/19 00:50:00
>>724
R6RSでは明確に決まってなかったっけ?

734:723
08/06/19 02:12:50
>>732
両方無限ループならわかるけど無限ループらないのはわからないwwww
アリガト!

735:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/19 10:47:48
>>735
ありがとう。
つまりbegin構文を、Gaucheは合成構文として実装してるけど、
DrSchemeは原始構文として実装してるということみたいですね。

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

738:デフォルトの名無しさん
08/06/19 14:26:32
>>735>>736
R5RSの「原始構文」って何よ?

739:デフォルトの名無しさん
08/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
08/06/19 22:01:45
>>735
ふおおなんか説明してくれてありがとうなんだけど何言ってるかわっかんねw

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

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

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

743:デフォルトの名無しさん
08/06/19 22:17:17
typo
呼んでいく→読んでいく

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

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

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

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

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

749:デフォルトの名無しさん
08/06/20 03:39:10
どうしてshort codingしたいの?

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

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

752:デフォルトの名無しさん
08/06/20 09:38:42
大きなletrecの下で

753:デフォルトの名無しさん
08/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と打ち込んで実行しましょう。

URLリンク(www.mingw.org)
URLリンク(nchc.dl.sourceforge.net)
URLリンク(nchc.dl.sourceforge.net)

754:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/20 13:14:41
(原始式のうち構文キーワードで始まるリスト)と定義、ならよろしいか?

756:デフォルトの名無しさん
08/06/20 13:33:57
追加:R5RSにおける

757:デフォルトの名無しさん
08/06/20 13:34:34
R5RSでは内部表現を「リスト」と限定していません。
また意味論もリスト上で定義されていません。

758:デフォルトの名無しさん
08/06/20 13:37:42
そういう根源的なところで Scheme って本質的に Lisp ではないんだよな
(茶々すまん)

759:デフォルトの名無しさん
08/06/20 13:45:19
少なくとも形式的構文上はリストとして定義されてませんか?(R5RS 7.1)
意味論上はともかく。


760:デフォルトの名無しさん
08/06/20 13:51:32
解釈改憲より新しく書き直したほうが建設的だと思うけどな
実装を書き直す人は腐るほどいるが

761:デフォルトの名無しさん
08/06/20 14:02:24
>>759
仕様もR6RSでやったところ。

762:デフォルトの名無しさん
08/06/20 14:02:46
間違えた>>760へのレス

763:デフォルトの名無しさん
08/06/20 16:11:45
>>759
(f a b)が(f . (a b))と同じとは文法には書いてない。
印字表現が似ているだけなのでは?

そもそも「構文上リストとして定義」とはどういう意味なのでしょうか?


764:デフォルトの名無しさん
08/06/20 16:21:32
<lambda expression> --> (lambda <formals> <body>)
<quotation> --> '<datum> | (quote <datum>)
<assignment> --> (set! <variable> <expression>)
<conditional> --> (if <test> <consequent> <alternate>)
<definition> --> (define <variable> <expression>)
      | (define (<variable> <def formals>) <body>)
      | (begin <definition>*)


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch