Lisp Scheme Part22
..
331:デフォルトの名無しさん
08/06/05 20:23:00
↑みたいなFAQネタ誰かまとめろ
332:デフォルトの名無しさん
08/06/05 20:29:38
(((lambda (X)
((lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg))))
(lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg))))))
(lambda (func-arg)
(lambda (l)
(if (null? l)
'no-list
(if (null? (cdr l))
(car l)
(max (car l) (func-arg (cdr l))))))))
'(4 5 6 3 4 8 6 2))
333:329
08/06/05 20:29:43
>>330
どうも、ありがとうございます。
なにやら複雑ですね。
>>331
既出でしたか。失礼しましたー
334:デフォルトの名無しさん
08/06/05 20:34:32
(define Y
(lambda (X)
((lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg))))
(lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg)))))))
335:デフォルトの名無しさん
08/06/05 20:35:29
>>330はこう書いてもよい。
(define F*
(lambda (func-arg)
(lambda (n)
(if (zero? n)
1
(* n (func-arg (- n 1)))))))
((Y F*) 5)
336:デフォルトの名無しさん
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のコードだけど。
コンスとリストを混同してるのでは?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4738日前に更新/247 KB
担当:undef