Lisp Scheme Part22
..
232:デフォルトの名無しさん
08/05/31 12:15:11
>>230
(1) ひとつしかないスタックを破壊的に変更しながら使う
(2) いくつかのスタックを破壊的に変更しながら使う
(3-a) スタックを退避したりリストアしたり
(3-b) immutableパターン
233:183
08/05/31 12:52:01
ご心配いただいて申し訳ありませんので現在の状況を報告いたします.
基本的な規則は
・closure が呼び出されれば(たとえそれが末尾再帰呼び出しであっても),
新たな束縛環境が作られ,その環境に視点が切り替えられていく.
・continuation には,自分が生成されたときの束縛環境への参照が保持されている.
・通常処理を続けている間は,末尾再帰呼び出しに伴い次々と生成されて
切り替えられる束縛環境をもとに評価が進められるのだが,
ひとたび continuation が呼び出されると,その continuation 上に保持されていた
束縛環境に視点が切り替えられる.
であり,これらに従って評価を繰り返していけば case-A と case-B の挙動の違いを
説明できるように思います.
みなさんのご説明以上の内容ではありませんが,最初のルールを充分にわかっていなかった
(つまり,末尾再帰呼び出しの場合,同じ束縛環境のまま束縛関係を上書きしてしまうと考えていた)
ことが混乱の原因であったように思います.
まだ理解が不充分だと思いますが,少しだけわかりかけてきた気がします.
234:デフォルトの名無しさん
08/05/31 14:41:09
名古屋名物 名古屋コールチン
235:デフォルトの名無しさん
08/05/31 14:51:28
>>234
本気で面白いと思って書き込んだのでないなら少し反省してもらおうか。
236:デフォルトの名無しさん
08/05/31 15:45:47
俺はちょっと笑ったぞ
237:デフォルトの名無しさん
08/05/31 15:49:47
鳥皮はコルーチンたっぷり
238:デフォルトの名無しさん
08/05/31 18:10:23
>>234-237
もうしばらく静かにしておいてやれYO!
239:デフォルトの名無しさん
08/05/31 21:55:26
(define member?
(lambda (a lat)
(cond
((null? lat) #f)
((eq? a (car lat)) #t)
(else (member? a (cdr lat))))))
(member? 'sardines '(Italian sardines spaghetti parsley))
240:デフォルトの名無しさん
08/05/31 21:56:04
(define intersect
(lambda (set1 set2)
(letrec
((I (lambda (set)
(cond
((null? set) '())
((member? (car set) set2)
(cons (car set)
(I (cdr set))))
(else (I (cdr set)))))))
(I set1))))
(intersect '(tomatoes and macaroni) '(macaroni and cheese))
241:デフォルトの名無しさん
08/05/31 21:57:19
; >>230
; (1) upward onlyの継続 (例外はこれで可能)
(define intersectall
(lambda (lset)
(let/cc hop
(letrec
((A (lambda (lset)
(cond
((null? (car lset))
(hop '()))
((null? (cdr lset))
(car lset))
(else
(intersect (car lset)
(A (cdr lset))))))))
(cond
((null? lset) `())
(else (A lset)))))))
(intersectall '((tomatoes and macaroni) (macaroni and cheese) (tomatoes and cheese)))
242:デフォルトの名無しさん
08/05/31 22:52:40
(define rember-upto-last
(lambda (a lat)
(let/cc skip
(letrec
((R (lambda (lat)
(cond
((null? lat) '())
((eq? (car lat) a)
(skip (R (cdr lat))))
(else (cons (car lat) (R (cdr lat))))))))
(R lat)))))
(rember-upto-last
'cookies
'(cookies chocolate mints caramel delight ginger snaps sesserts chocolate mousse
vanilla ice cream German chocolate cake more cookies gingerbreadman chocolate chip brownies))
243:デフォルトの名無しさん
08/06/01 00:18:03
>>196-197で call-with-current-continuation と書いてたのを
>>241-242ではlet/ccと書いてある。(Seasoned Schemerからの例)
244:デフォルトの名無しさん
08/06/01 00:22:49
>>239-242
「う〜ん、それならこれで十分なんじゃな〜い」ってきっと言われる・・・
(define rember-upto-last
(lambda (a lat)
(let loop ((ans lat) (lst lat))
(cond ((null? lst) ans)
((eq? (car lst) a) (loop (cdr lst) (cdr lst)))
(else (loop ans (cdr lst)))))))
(define intersectall
(lambda (lset)
(fold intersect (car lset) (cdr lset))))
なんか簡潔で説得力のある一級継続の使用例は無いものだろうか・・・
245:デフォルトの名無しさん
08/06/01 00:55:50
継続無しでいくことが主目的ならそれでいいんジャマイカ?>>244
継続の動作の仕組みを調べる材料に使うなら>>239-242は十分な例だと思う。
継続を理解することよりも何かに例えることに力点があるうちは理解できないだろう。
246:デフォルトの名無しさん
08/06/01 01:28:21
((call/cc
(lambda (goto)
(letrec ((start
(lambda ()
(print "start")
(goto next)))
(froz
(lambda ()
(print "froz")
(goto last)))
(next
(lambda ()
(print "next")
(goto froz)))
(last
(lambda ()
(print "last")
(+ 3 4))))
start))))
247:デフォルトの名無しさん
08/06/01 01:29:02
動作を理解しても「こんなのいらね」で終わることもあるからな。良い例が欲しいな。
248:デフォルトの名無しさん
08/06/01 01:29:09
(let* ((yin ((lambda (foo) (newline) foo)
(call/cc (lambda (bar) bar))))
(yang ((lambda (foo) (write-char #\*) foo)
(call/cc (lambda (bar) bar)))))
(yin yang))
249:デフォルトの名無しさん
08/06/01 01:29:33
((call/cc call/cc) (call/cc call/cc))
250:デフォルトの名無しさん
08/06/01 01:30:21
>>247
そのレベルでやってるやつには不要。
251:デフォルトの名無しさん
08/06/01 01:33:52
>>247
クレクレうるせーんだよ。氏ね。
252:デフォルトの名無しさん
08/06/01 01:50:09
乞食が自分で書けば良いんジャマイカ?
253:デフォルトの名無しさん
08/06/01 01:51:23
>>250
「そのレベル」でいいんジャマイカ、と
254:デフォルトの名無しさん
08/06/01 01:54:47
荒れてきたねw
foldで書き直せますって言う暇があったら好例を出すべきだったと思うね。
255:デフォルトの名無しさん
08/06/01 01:57:29
>>253
おまえも馬鹿らしいなw
256:デフォルトの名無しさん
08/06/01 02:04:31
もですね、わかります
257:デフォルトの名無しさん
08/06/01 02:11:52
,;r''"~ ̄^'ヽ,
./ ;ヽ 新憲法で表現の自由規制、裁判官の国民審査権破棄
l _,,,,,,,,_,;;;;i
l l''|~___;;、_y__ lミ;l ネット規制法で検閲、人権擁護法案で報道規制、
゙l;| | `'",;_,i`'"|;i |
,r''i ヽ, '~rーj`c=/ ダウンロード違法、単純所持禁止、..etcetc
,/ ヽ ヽ`ー"/:: `ヽ
/ ゙ヽ  ̄、::::: ゙l, 情報源を潰して日本を中国化だ!フゥハハハーハァー
|;/"⌒ヽ, \ ヽ: _l_ ri ri
l l ヽr‐─ヽ_|_⊂////;`ゞ--―─-r| | / |
゙l゙l, l,|`゙゙゙''―ll___l,,l,|,iノ二二二二│`""""""""""""|二;;二二;;二二二i≡二三三l
| ヽ ヽ _|_ _ "l ̄ ̄ ̄ ̄ ̄ ̄ |二;;二二;;二=''''''''''' ̄ノ
/"ヽ 'j_/ヽヽ, ̄ ,,,/"''''''''''''⊃r‐l'二二二T ̄ ̄ ̄ [i゙''''''''''''''''"゙゙゙ ̄`"
/ ヽ ー─''''''""(;;) `゙,j" | | |
_,,,,,,,,,ヽ、 ,,,,,r-'''''ーー'''| | | |
''" ヽ,,___,,,r‐''''''二__ |__| | |
\'''" / ノ | |
258:デフォルトの名無しさん
08/06/01 02:13:43
>>256
ああいえばこういう。まじ視ね。
259:デフォルトの名無しさん
08/06/01 02:14:33
なんか蛆虫がいっぱいw
260:デフォルトの名無しさん
08/06/01 02:41:53
>>247良い例マダァ?
261:デフォルトの名無しさん
08/06/01 02:47:45
荒れる方向へ誘導するなよ
262:デフォルトの名無しさん
08/06/01 02:51:16
もうおまいら全部まとめて >>7 独習 Scheme 三週間 (Schemeの教科書 ) でも読んで寝ろよ。
定番のコルーチンとバックトラックがちゃんとのってるぞ。
263:デフォルトの名無しさん
08/06/01 03:53:30
>>262
動作を理解しても「こんなのいらね」で終わることもあるからな。良い例が欲しいな。
264:デフォルトの名無しさん
08/06/01 04:16:01
グダグダうるせーんだよ。乞食は氏ね。
265:デフォルトの名無しさん
08/06/01 07:28:43
ambは再帰で書くと分かりにくいが、これならどうだ
(define-syntax amb
(syntax-rules ()
((_ x ...)
(let/cc yield
(let/cc fallthrough
(push! stack fallthrough)
(yield x))
...
((pop! stack))))))
266:デフォルトの名無しさん
08/06/01 09:39:35
>>265
そんな動きもしない中途半端な例より過去スレ嫁。
不思議の国のアリスをやってた連中がambを使ってたハズ。
267:デフォルトの名無しさん
08/06/01 10:51:03
Gauche使ってる奴は独自機能を使って煙に巻きたがるんだよなw
push!とpop!の説明しないのかよ?
268:デフォルトの名無しさん
08/06/01 10:53:39
(define-syntax amb
(syntax-rules ()
((_) (fail))
((_ a) a)
((_ a b ...)
(let ((fail0 fail))
(call/cc
(lambda (cc)
(set! fail
(lambda ()
(set! fail fail0)
(cc (amb b ...))))
(cc a)))))))
(define call/cc call-with-current-continuation)
(define fail #f)
(define (require pred)
(or pred (amb)))
(call/cc
(lambda (cc)
(set! fail
(lambda ()
(cc 'no-choise)))))
269:デフォルトの名無しさん
08/06/01 11:22:04
このスレも人増えてなにより
270:デフォルトの名無しさん
08/06/01 11:49:40
(define call/cc call-with-current-continuation)
(define fail #f)
(call/cc
(lambda (cc)
(set! fail
(lambda ()
(cc 'no-choise)))))
(fail) ; => no-choise
271:デフォルトの名無しさん
08/06/01 12:02:19
>>196-197と比較するとambがやってることがわかると思う。
(amb 1 2 3 4 5) ; => 1
(fail) ; => 2
(fail) ; => 3
(fail) ; => 4
(fail) ; => 5
(fail) ; => no-choise
272:デフォルトの名無しさん
08/06/01 12:07:54
>>246
うほっ、これいいね!
出典があるなら教えて〜
273:デフォルトの名無しさん
08/06/01 12:17:57
>>272
それ前スレにも出てた。有名なのかも。
274:デフォルトの名無しさん
08/06/01 12:41:12
>>272
おそらく出典はGuy Steele御大です。
URLリンク(lib.store.yahoo.net)
275:272
08/06/01 12:41:45
ありがと^^
276:デフォルトの名無しさん
08/06/01 12:54:41
#define d define
#d a include
#a <stdio.h>
#a <string.h>
#a <ctype.h>
#d p char*
#d P ,(p)
#d T(E) !strcmp(E,"()")
#d U return
#d W while
#d X sbrk(199)
#d z atof
#d e isspace
#d D A(_)
#d E S(C(_))
#d B(y) p y(_)p _;{
#d G(y,V) B(y)p i;U sprintf(i=X,"%lf",z(E)V z(S(C(D)))),i;}p sbrk(),*S(),*j(),*O,*H;K,Y,M=14;double z();Q(_)p _;{int V=0;W(e(*_))_++;H=_;W(V|!(e
(*H)|*H==')'||(*H=='('&&H-_)))V+=(*H=='(')-(*H== ')'),H++;U H-_;}B(C)U _++,Y=Q(_),_=strncpy(X,_,Y),_[Y]=0,_;}B(A)_++,_+=Q(_);W(e(*_))_++;U O=X,*O='(',strcpy(
O+1,_),O;}B(Z)U _;}B(c)U C(E);}B(q)U A(E);}B(t)p i=E;U H=S(C (D)),sprintf(O=X,T(H)?"(%s)":"(%s %s",i,H+1),O;}B(F)U S(C(A(T(E)?D:_)));}L(i,s)p
i,*s;{U isdigit(*i)?z(i)!=z(s):strcmp(i,s);}B(b)U L(E,S(C(D)))?"()":"t";}B(R)U E;}B(o)U z(E)<z(S(C(D)))?"t":"()";}G(f,+)G(g,-)G(h,*)p r[4][2]={"function" P R,
"quote"P C,"lambda"P Z,"defun"P j};B(j)U r[M][1]=D,*r[M++]=C(_);}p not[99][2]={"if"P F,"equal"P b,"<"P o,"+"P f,"-"P g,"*"P h,"car"P c,"cdr"P q,
"cons"P t,"t","t"};B(S)int Li,s;p u;if(isdigit(*_)|T(_))U _;for(Y=M;Y--;)if(!strcmp(_,*r[Y]))U r[Y][1];u=E,_=D;if(*u-'(')U(*((p(*)())u))(_);s=Li=M;W(!T(_))r[M][1]=E,*r[M++]
="",_=D;O=C(u);W(!T(O))*r[Li++]=C(O),O=A(O);U O=S(C(A(u))),M=s,O;}main(){H=O=X,Y=0;W(Y|!e(K=getchar()))K==EOF?exit(0):0,Y+=(K=='(')-(K==')'),*H++=K;*H=0,puts(S(O))
,main();{printf("XLISP 4.0\n");}}
277:デフォルトの名無しさん
08/06/01 13:04:34
call/ccが名前つきブロックにもなるletrecを内側に持つとgotoできるのか。
letrecをループに使うのは良くみかけるけどね。
(define (count-chars)
(letrec ((loop (lambda (ch count)
(if (eof-object? ch)
count
(loop (read-char) (+ count 1))))))
(loop (read-char) 0)))
278:デフォルトの名無しさん
08/06/02 20:30:36
好みの問題ですけど
相互再帰じゃない場合はnamed letの方が見やすいですね。
279:デフォルトの名無しさん
08/06/02 21:02:33
>>278
こんなとこで言ってないで国際会議の場でGuy Steeleに意見しろよ。
280:デフォルトの名無しさん
08/06/02 22:18:39
先月caltechのカンファで直接言ったんだけど、Fortressの後始末でそれどころじゃないみたい。
281:デフォルトの名無しさん
08/06/02 22:29:13
この間スペックが出たばかりなのに後始末って何するの?
282:デフォルトの名無しさん
08/06/02 23:06:44
スペックが出ちゃえばあとは後始末だけだな
283:デフォルトの名無しさん
08/06/02 23:22:31
Fortressの教科書書いてくれないのかな。
284:デフォルトの名無しさん
08/06/03 00:23:36
>>280はオトコだが、>>279は根性無しの引きもりと言うことですね。
285:デフォルトの名無しさん
08/06/03 00:57:55
>>284
顔真っ赤にして見苦しいよw
286:デフォルトの名無しさん
08/06/03 01:03:13
>>283
Steele って教科書書いた事あるの?
287:デフォルトの名無しさん
08/06/03 01:19:35
>>286
Cの本、Common Lispの本は?Javaのもあるし、もう1冊The High Performance Fortran Handbookもあるけど。
あと、本じゃないけどジャーゴンファイル。
PDFで結構いろいろなマニュアルも見つかる。
このスレでは "The History of Scheme" が有名かな。
絶対に外せないのがコレかな
URLリンク(dspace.mit.edu)
288:デフォルトの名無しさん
08/06/03 01:35:16
サンクス。もっと入門的な書き物の事だと思ってた。
理論的なペーパーならここにあるのじゃダメかな。
URLリンク(research.sun.com)
289:デフォルトの名無しさん
08/06/03 01:50:15
>>288
d。だめってことはないよ。こちらの勝手な希望なのでw
URLリンク(research.sun.com)
こんな感じで200〜400ページぐらいの分量があると全貌が見えるからいいかなと。
Guy Steeleはマニュアル書くと面白い例を出してくれるから期待したいな。
Cの本なんてすごく良かったのに和訳が絶版になって残念だなぁと思う。
290:デフォルトの名無しさん
08/06/03 02:55:58
>>285が痛すぎる件について。
まぁ不問にしてやろうw
291:デフォルトの名無しさん
08/06/03 05:11:11
くだらないやりとり引っ張る奴が一番見苦しい
292:デフォルトの名無しさん
08/06/03 09:08:32
本当に「この話題を引っ張って欲しくない」人は、見苦しいとか煽って余計終わりにくくしたりしません。
ま、勢いで書き残しちゃった自分の痛いレスに触れて欲しくない>>285が、正論のフリして終結を促したものの、
自意識が邪魔してつい余計な「反撃」をしちゃって、終わらせることにも第三者のフリにも失敗、というとこでしょうかw
293:デフォルトの名無しさん
08/06/03 10:23:26
>>286
ない。
294:デフォルトの名無しさん
08/06/03 10:24:15
AI MEMO は Lambda the Ultimate シリーズもだな
295:デフォルトの名無しさん
08/06/03 18:30:30
URLリンク(library.readscheme.org)
296:デフォルトの名無しさん
08/06/03 20:31:19
parser generator を探してみた。さすがは実験言語。ぞろぞろ出てきますw
URLリンク(www.iro.umontreal.ca)
URLリンク(www.informatik.uni-freiburg.de)
URLリンク(www.cs.cmu.edu)
297:デフォルトの名無しさん
08/06/03 20:35:32
>>292
おまえ等クダスレ逝って喧嘩しろ。邪魔。
298:デフォルトの名無しさん
08/06/03 20:40:48
>>296こんなのあるYO!
URLリンク(www.cs.indiana.edu)
299:デフォルトの名無しさん
08/06/03 20:50:11
>>296
エッセンスが好き。
300:デフォルトの名無しさん
08/06/03 21:03:09
遺伝的プログラミング
URLリンク(codepad.org)
301:デフォルトの名無しさん
08/06/03 21:07:21
essenceってLL(1)のSLLGENと比べて敷居が高そうw
そんなこと無さ気に書いてあるけどさw
302:デフォルトの名無しさん
08/06/03 21:09:05
>>298
激しくd。凄いね。
303:デフォルトの名無しさん
08/06/03 21:41:37
>>301
使うの簡単だよ。
開発は大変だったろうけど。
汎用のパーザの部分計算でパーザを生成するから。
304:デフォルトの名無しさん
08/06/03 21:41:58
>>300
なんじゃそりゃ!
(define (equ x) (* 2 (^ x 4)))
という式の微分を求めてるらしいけど。普通の記号処理と違うのに
(* 8 (^ x 3))
と同じ式がちゃんと求まってるw
305:デフォルトの名無しさん
08/06/03 22:14:37
>>300,>>304
URLリンク(www.genetic-programming.org)
306:デフォルトの名無しさん
08/06/03 22:17:13
遺伝的プログラミングで最適化したコードを吐くパーザとかw
307:デフォルトの名無しさん
08/06/03 22:32:33
essenceはScheme48用のpggというProgram Generator Generatorを使うのね。
作られたessenceはProgram Generatorなんだから、できたスキームはプログラムなわけ。
でもスキーム用のpggというProgram Generator Generatorを使うと・・・
308:デフォルトの名無しさん
08/06/03 22:55:01
>>297
本当にそう思ってる人は、
(ごく一部の、目的の為に衝動を抑えるという人類なら大抵できることができないクズを除いて)
そういう喧嘩腰の追っ払い方を試みません。バレバレですw
309:デフォルトの名無しさん
08/06/03 22:56:11
>>307
その再帰の不動点プログラムはいったいなんなんだ。
310:デフォルトの名無しさん
08/06/03 23:05:10
遺伝的プログラミングで関数が収束しているのは一様収束?
311:デフォルトの名無しさん
08/06/03 23:10:05
>>309
Schemeなんじゃないかな。
312:デフォルトの名無しさん
08/06/03 23:26:01
初めてYコンビネータとかambとかGPを見たとき魔法を使ってるみたいだって思った。
313:デフォルトの名無しさん
08/06/04 00:08:36
>>308
本当にそう思っている人も居るからそろそろ察してね。
314:デフォルトの名無しさん
08/06/04 17:58:16
>>309
不動点として処理系を求めることなんてできるのかな?
>>310
世代を増やしてやれば一様収束に近いかな?
世代数より、使える要素の数に対する候補数や木構造の複雑さの許容範囲の方が
解に対して大きく影響を与えるようだよ。
その辺のパラメータを上手に与えないとGPが正しい解を返してくれない。
理論的なことはよくわからないんだけど。
315:デフォルトの名無しさん
08/06/04 20:28:22
>>312
GPは未だに魔法みたいに見える
Yコンビネータとambは解説読むと目から鱗だった(ガッテンボタンいっぱい押す感じ)
316:デフォルトの名無しさん
08/06/04 20:56:57
つ
∩ヘ〜
317:デフォルトの名無しさん
08/06/04 21:07:13
best score of generationが0.001以下なら安心できる解が得られてるというのを目安に使ってる。
理屈抜きにw
318:デフォルトの名無しさん
08/06/04 21:32:08
URLリンク(codepad.org)
この例だと3番目で0.001以下なので正しいと考える。
伊庭研HPにもそう書いてあるw
319:デフォルトの名無しさん
08/06/04 21:42:20
試しにcos x の微分を解かせてみた。一発回答だった。スゲーw
URLリンク(codepad.org)
320:デフォルトの名無しさん
08/06/05 02:17:01
GPってなんすか?
321:320
08/06/05 02:18:48
>>319を見て解決しました
> ; Genetic Programming with Scheme
322:デフォルトの名無しさん
08/06/05 08:19:19
>>314
表示的意味論では、表示関数は不動点。
323:デフォルトの名無しさん
08/06/05 09:58:56
GP=Graham,Paul
324:デフォルトの名無しさん
08/06/05 15:47:07
Little Schemerって何が言いたいのかよくわからないところが多々あるのですが、
ものまね鳥やSICPやいろいろ読んだらありがたみがわかるようになるの?
325:デフォルトの名無しさん
08/06/05 16:51:54
hogehoge schemerシリーズを買おうと思ったら
近くの本屋だとsicpとsimply schemeしか置いてねぇ・・・
326:デフォルトの名無しさん
08/06/05 16:54:50
>>325
それだけ置いてありゃ立派なもんだよ
327:デフォルトの名無しさん
08/06/05 18:06:39
>>325
都会はええのう。うちの近所じゃエクセル本しかないw
328:デフォルトの名無しさん
08/06/05 18:23:27
>>324
シリーズ3冊読んで初めて意味がわかる。
微積とかの数学を知らない人向けのSICPだったのかと。
だから数学が得意な大学生は最初からSICPでいいと思う。
CSを専攻しようか迷ってるならシリーズ3冊を読んだ後ものまね鳥を読んでみると自分の適性が判断できるよ。
ありがたみっていう意味をどう使ってるかによるけど、CSとはどういうものかを知るという意味ではいい本。
何が言いたいのかわかるというのは、CSとはどんなことがらに興味の対象をもっている分野かを理解すること。
それがわからなくてもプログラムは作れる。
けど、バグが入りこまないような理論的裏づけとか、論理プログラミングが欲しいときがそのうちクルと思う。
そのときが来る前の先行投資と思えば安いもんだと思うよ。
悩んで考える時間は若いときにしか持ち得ないからガンガレ。
329:デフォルトの名無しさん
08/06/05 20:12:01
javascriptしかいじったことのないゆとりがSICP読んでるんですけど、
schemeは無名関数内で再帰呼び出しって出来ないんですか?
lambdaの中でそのlambdaを呼び出すみたいな。
javascriptだと
(function(x){return (x)?x+arguments.callee(x-1):0; })(10);
とかやって使うやつなんですけど…
高階演算のとこで使いたいんですが、調べてもうまく見つからなかったです。
330:デフォルトの名無しさん
08/06/05 20:22:55
>>329
(((lambda (X)
((lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg))))
(lambda (procedure)
(X (lambda (arg) ((procedure procedure) arg))))))
(lambda (func-arg)
(lambda (n)
(if (zero? n)
1
(* n (func-arg (- n 1)))))))
5)
Yコンビネータの雛形が内蔵されている階乗関数になってます。
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 とかを作る?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4744日前に更新/247 KB
担当:undef