Common Lisp、SchemeをはじめとするLisp族全般のスレです
■前スレ
Lisp Scheme Part39
http://peace.2ch.net/test/read.cgi/tech/1408017352/
■テンプレ
ttp://wiki.fdiary.net/lisp/
■関連スレ
【入門】Common Lisp その11【質問よろず】
http://peace.2ch.net/test/read.cgi/tech/1411307361/
【Scheme】Schemeインタプリタ Mosh Part1【Lisp】
http://peace.2ch.net/test/read.cgi/tech/1272469779/
【Lisp】プログラミング言語 Clojure #3【JVM】
http://peace.2ch.net/test/read.cgi/tech/1380333808/
【魔法】リリカル☆Lisp【言語】
http://peace.2ch.net/test/read.cgi/tech/1183396621/
探検
Lisp Scheme Part40 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2015/03/16(月) 13:45:52.92ID:EEYZoZ1i
189デフォルトの名無しさん
2015/08/01(土) 10:30:34.72ID:c0YSrVc+ javascriptのように通信が頻繁に行われる環境で継続なんか入れたときに、例えば途中でブラウザを切ったときの継続がどうなってるのか考えるとワケ分からなくなる
schemeの継続ですら、資源を使いまくってるサーバが落ちたときにリソースのclose操作とかきちんと行われるのか不安になる
schemeの継続ですら、資源を使いまくってるサーバが落ちたときにリソースのclose操作とかきちんと行われるのか不安になる
190デフォルトの名無しさん
2015/08/02(日) 01:56:02.37ID:MF9TQU9s191デフォルトの名無しさん
2015/08/03(月) 18:40:37.91ID:zmSfrGKJ >>190
CSP?
CSP?
192デフォルトの名無しさん
2015/08/03(月) 23:15:17.18ID:TaloxJI9 継続渡しはCPS
セントラル警備保障はCSP
セントラル警備保障はCSP
193SCHEME餃子 ◆8X2XSCHEME
2015/08/04(火) 03:41:56.42ID:T8IrycSA JavaScript 処理系の Rhino は第一級継続を持ってる。 実在する以上、言語処理系レベルでは可能ってことだろ。
だけど、 Scheme 処理系でも外部のライブラリ (バインディングとか) を通過したところで継続が途切れてしまう制限を持っているものがあることからもわかるように、
継続が処理系の外の世界をまたぐのは難しいんだわ。
(※参考 Gauche のドキュメント http://practical-scheme.net/gauche/man/?l=jp&p=call/cc )
JavaScript はアプリケーションに組込んで使うタイプの言語だから、当然、外の世界とのやり取りはあたりまえで、
そこに第一級継続を持ち込んでも途切れまくりであんまり役に立たんのじゃないか?
Gauche のドキュメントには限定継続の利用を勧めるようなことも書いてあるけど、
フル継続で途切れてしまうところを越えられるって意味ではなくて、
継続の範囲を明確に書けるから変なところをまたがないように注意しやすいって意味だと思う。
だけど、 Scheme 処理系でも外部のライブラリ (バインディングとか) を通過したところで継続が途切れてしまう制限を持っているものがあることからもわかるように、
継続が処理系の外の世界をまたぐのは難しいんだわ。
(※参考 Gauche のドキュメント http://practical-scheme.net/gauche/man/?l=jp&p=call/cc )
JavaScript はアプリケーションに組込んで使うタイプの言語だから、当然、外の世界とのやり取りはあたりまえで、
そこに第一級継続を持ち込んでも途切れまくりであんまり役に立たんのじゃないか?
Gauche のドキュメントには限定継続の利用を勧めるようなことも書いてあるけど、
フル継続で途切れてしまうところを越えられるって意味ではなくて、
継続の範囲を明確に書けるから変なところをまたがないように注意しやすいって意味だと思う。
194デフォルトの名無しさん
2015/08/05(水) 21:47:02.17ID:PeKQT7A5 プログラミングGauche第2版マダー
195デフォルトの名無しさん
2015/08/05(水) 22:50:49.33ID:Vg22nrpW そういやGNU標準言語?だかのはずのguileって使われてるんだろうか
196デフォルトの名無しさん
2015/08/06(木) 08:01:11.84ID:e5V4W5I+ 待ちguile
197デフォルトの名無しさん
2015/08/06(木) 22:25:04.23ID:JI2t4Gst GNU自体微妙な団体だし
そんな団体の標準になられても気持ち悪い
そんな団体の標準になられても気持ち悪い
198デフォルトの名無しさん
2015/08/06(木) 23:00:12.98ID:lTjoYGg1 などとにわかschemerが申しております
199デフォルトの名無しさん
2015/08/06(木) 23:14:11.05ID:oTKkGTU7 guile って死んでると思ったけど、
結構頑張ってんよ
結構頑張ってんよ
200デフォルトの名無しさん
2015/08/06(木) 23:18:25.94ID:FMimP/gx unicodeサポートが微妙だったのはもう昔の話なのかな?なんかそれで使うのやめた事がある
201はちみつ餃子 ◆8X2XSCHEME
2015/08/07(金) 01:10:45.06ID:p6pvn2Md アプリケーションに組込むなら小さい実装の方がいいよな。 Guile は豪華すぎると思う。
かといってリッチな実装というカテゴリだと Racket が強いから Guile は微妙ということに……。
Guile の強みって何?
かといってリッチな実装というカテゴリだと Racket が強いから Guile は微妙ということに……。
Guile の強みって何?
202デフォルトの名無しさん
2015/08/07(金) 01:54:27.51ID:JnTUt1UO javascriptでscheme組もうと思う
クロージャあるし継続なしで末尾再帰ぐらいなら結構楽勝かな
クロージャあるし継続なしで末尾再帰ぐらいなら結構楽勝かな
203デフォルトの名無しさん
2015/08/11(火) 14:35:52.92ID:3YusrhQW204デフォルトの名無しさん
2015/08/11(火) 16:13:30.65ID:XEwrhpMG >>203
ワラタ
ワラタ
205デフォルトの名無しさん
2015/08/12(水) 16:29:28.90ID:lGV/dlKr racket で raco を使って exe 化したらやたらサイズがデカいのが出来たんだけど、
もっと小さくできないものなん?
もっと小さくできないものなん?
206デフォルトの名無しさん
2015/08/12(水) 23:13:39.90ID:G8qcToBK 自作処理系だと4KBセクタに収まるようにできる
512バイトブロック単位だが
けどschemeコアも含めたりすると結局数十KBにはなる
イメージまるごとexeにするタイプなら
参照切りまくれば小さくなるんじゃないの
512バイトブロック単位だが
けどschemeコアも含めたりすると結局数十KBにはなる
イメージまるごとexeにするタイプなら
参照切りまくれば小さくなるんじゃないの
207デフォルトの名無しさん
2015/08/16(日) 22:04:26.74ID:AZvBPnTZ Biglooの生成するcコードは恐ろしくシンプル
208デフォルトの名無しさん
2015/08/22(土) 09:25:17.20ID:F2lrgiaF そっかー。
209デフォルトの名無しさん
2015/08/25(火) 18:08:56.22ID:8WHoFpvi 初めまして。
早速ですが教えて下さい。
下のcall/ccの定義を解説できますか?
(define call/cc
(lambda (k f)
(f k (lambda (dummy-k result)
(k result)))))
早速ですが教えて下さい。
下のcall/ccの定義を解説できますか?
(define call/cc
(lambda (k f)
(f k (lambda (dummy-k result)
(k result)))))
210はちみつ餃子 ◆8X2XSCHEME
2015/09/05(土) 21:46:57.65ID:H6CjR/B1 例えば RnRS の call/cc を使ってこういうのを書いたとする。
(define (foo x)
(+ 3
(call/cc
(lambda(cc)
(if (> x 3) (cc (+ x 1)) x)))))
(display (foo 1)) (display (foo 5))
継続とは何かというのを綺麗に説明するのは難しいけど、
「残りの計算」という言葉で説明するのが一般的だね。
この例でいえば call/cc を呼出された後にするはずの計算、
すなわち「 (+ 3 」が変数 cc に入っている継続。
call/cc を呼出している外側全てと言い換えてもいいかもしれない。
(字句上の外側ではなくて実行時の外側。)
で、 >>209 の言うところの call/cc (名前がまぎらわしいから
ここでは call/cc* と変える) は残りの計算を陽に引数として
渡すバージョンということだと思う。
最初の例を call/cc* で書き直すと
(define (foo* x)
(call/cc*
(lambda(x)(+ 3 x))
(lambda(cc f)
(if (> x 3) (cc (+ x 1)) (f cc x)))))
(display (foo* 1)) (display (foo* 5))
となる。
「(+ 3」の計算を (lambda(x)(+ 3 x)) というクロージャにして渡しているのが
わかるかな。
(define (foo x)
(+ 3
(call/cc
(lambda(cc)
(if (> x 3) (cc (+ x 1)) x)))))
(display (foo 1)) (display (foo 5))
継続とは何かというのを綺麗に説明するのは難しいけど、
「残りの計算」という言葉で説明するのが一般的だね。
この例でいえば call/cc を呼出された後にするはずの計算、
すなわち「 (+ 3 」が変数 cc に入っている継続。
call/cc を呼出している外側全てと言い換えてもいいかもしれない。
(字句上の外側ではなくて実行時の外側。)
で、 >>209 の言うところの call/cc (名前がまぎらわしいから
ここでは call/cc* と変える) は残りの計算を陽に引数として
渡すバージョンということだと思う。
最初の例を call/cc* で書き直すと
(define (foo* x)
(call/cc*
(lambda(x)(+ 3 x))
(lambda(cc f)
(if (> x 3) (cc (+ x 1)) (f cc x)))))
(display (foo* 1)) (display (foo* 5))
となる。
「(+ 3」の計算を (lambda(x)(+ 3 x)) というクロージャにして渡しているのが
わかるかな。
211デフォルトの名無しさん
2015/09/05(土) 22:53:19.39ID:6dKeptfV >(+ 3 (call/ccc
式中の副作用(call/cc)は評価順序不定の罠が
判ってると思うけど一応
式中の副作用(call/cc)は評価順序不定の罠が
判ってると思うけど一応
212デフォルトの名無しさん
2015/09/05(土) 23:07:18.97ID:6dKeptfV ついでにこの式の評価順序ってR6RS以降で何か変わったのかなーと思って調べたら変わってないっぽいね
式を多用するlisp族ではついつい書いてしまうからどっちかに決めた方がいいと思うんだけどな
継続は一見副作用に見えなかったりするからややこしい
そういや評価順の問題ってトップレベルにもあったなあ
式を多用するlisp族ではついつい書いてしまうからどっちかに決めた方がいいと思うんだけどな
継続は一見副作用に見えなかったりするからややこしい
そういや評価順の問題ってトップレベルにもあったなあ
213デフォルトの名無しさん
2015/09/06(日) 07:10:29.28ID:dcG52JSd 横から初心者が何だけど、
>>209の定義のdummy-kって別に無くてもよさそうなんだけど、何か必要な理由って有るのかな?
>>209の定義のdummy-kって別に無くてもよさそうなんだけど、何か必要な理由って有るのかな?
214デフォルトの名無しさん
2015/09/06(日) 11:19:24.63ID:EuTLUxQt >>210
その例だと継続使っても使わなくても結果が変わらないので微妙。
fを適用する先も間違ってるし。
こんな感じでどうでしょう。
(define (foo x)
(call/cc
(lambda(cc)
(+ 3
(if (> x 3) (cc (+ x 1)) x)))))
(define (foo* x)
(call/cc*
(lambda (x) x)
(lambda (cc f)
(let ((ncc (lambda (x) (cc (+ 3 x)))))
(if (> x 3) (f ncc (+ x 1)) (ncc x))))))
その例だと継続使っても使わなくても結果が変わらないので微妙。
fを適用する先も間違ってるし。
こんな感じでどうでしょう。
(define (foo x)
(call/cc
(lambda(cc)
(+ 3
(if (> x 3) (cc (+ x 1)) x)))))
(define (foo* x)
(call/cc*
(lambda (x) x)
(lambda (cc f)
(let ((ncc (lambda (x) (cc (+ 3 x)))))
(if (> x 3) (f ncc (+ x 1)) (ncc x))))))
215デフォルトの名無しさん
2015/09/06(日) 11:26:17.13ID:EuTLUxQt 連投すまぬ。
引数の名前がきちんと対応していなかったのでfoo*を書きなおした。
(define (foo* x)
(call/cc*
(lambda (x) x)
(lambda (f cc)
(let ((g (lambda (x) (f (+ 3 x)))))
(if (> x 3) (cc g (+ x 1)) (g x))))))
引数の名前がきちんと対応していなかったのでfoo*を書きなおした。
(define (foo* x)
(call/cc*
(lambda (x) x)
(lambda (f cc)
(let ((g (lambda (x) (f (+ 3 x)))))
(if (> x 3) (cc g (+ x 1)) (g x))))))
216デフォルトの名無しさん
2015/09/06(日) 17:16:35.78ID:AiMOxC1Q >>215なら素直に理解できた
要するに、これは継続渡しのスタイルの中で使えるcall/ccってことか
あと、さっきの例をちょっといじって
(define (foo& x k)
(call/cc*
k
(lambda (f cc)
(let ((g (lambda (x) (f (+ 3 x)))))
(if (> x 3) (cc g x) (g x))))))
(foo& 1 (lambda (x) (display x)))
としたほうがわかりやすいかもしれない
要するに、これは継続渡しのスタイルの中で使えるcall/ccってことか
あと、さっきの例をちょっといじって
(define (foo& x k)
(call/cc*
k
(lambda (f cc)
(let ((g (lambda (x) (f (+ 3 x)))))
(if (> x 3) (cc g x) (g x))))))
(foo& 1 (lambda (x) (display x)))
としたほうがわかりやすいかもしれない
217デフォルトの名無しさん
2015/09/28(月) 20:36:46.42ID:uH2NkENy LFE(lisp flavor erlang)使ったことあるかたいますか?
どの辺が問題なんでしょうか。
バックエンドがerlangというのは大きいメリットだと考えるんですが。
どの辺が問題なんでしょうか。
バックエンドがerlangというのは大きいメリットだと考えるんですが。
218デフォルトの名無しさん
2015/09/29(火) 00:25:57.14ID:jGfSnnbY >>217
使われない理由っていうことでいうと、↓のような感じかな。
読み直したら全面的にdisってるが、おもちゃとしては面白いと思ってる
・開発リソースが少ないのでおもちゃの域を出ない
特に、Common LispもしくはClojureを置き換えるほどのライブラリ・
成熟度・勢いは無い。
・そんなに速くない
・Erlang/BEAM自体の需要が少ない
Erlangスレでも書いたことがあるんだが、開発の現場でErlangを本当に必要とする
場面というのは少ない。良くも悪くもフォーカスを絞った言語だから。
エラー処理が楽とかいう人も多いが、乗り換えるほど大きなメリットでは無い
また、現実問題として、システム全部をBEAM上に載せる必要は無い。
一部だけErlangで書けば良いし、そのために
微妙な成熟度の微妙なLisp方言を入れる必要性ってあんまり感じられない
なお、Elixirで騒いでいる人たちも、Erlang系だからってよりはRubyっぽい
関数型言語っていう表面的な特徴で一時的に騒いでいる人の方が多い
・名前がダサい。これは馬鹿にできない
使われない理由っていうことでいうと、↓のような感じかな。
読み直したら全面的にdisってるが、おもちゃとしては面白いと思ってる
・開発リソースが少ないのでおもちゃの域を出ない
特に、Common LispもしくはClojureを置き換えるほどのライブラリ・
成熟度・勢いは無い。
・そんなに速くない
・Erlang/BEAM自体の需要が少ない
Erlangスレでも書いたことがあるんだが、開発の現場でErlangを本当に必要とする
場面というのは少ない。良くも悪くもフォーカスを絞った言語だから。
エラー処理が楽とかいう人も多いが、乗り換えるほど大きなメリットでは無い
また、現実問題として、システム全部をBEAM上に載せる必要は無い。
一部だけErlangで書けば良いし、そのために
微妙な成熟度の微妙なLisp方言を入れる必要性ってあんまり感じられない
なお、Elixirで騒いでいる人たちも、Erlang系だからってよりはRubyっぽい
関数型言語っていう表面的な特徴で一時的に騒いでいる人の方が多い
・名前がダサい。これは馬鹿にできない
219デフォルトの名無しさん
2015/09/29(火) 06:19:23.89ID:nAejDDAX >・そんなに速くない
これはBEAM特有の問題なんだよね、数値計算がちょっとでもはいるととても遅い
非同期IO処理だけさせるような所だとElixir含めてErlang系はものすごく便利だけど読める人が少ないし
これはBEAM特有の問題なんだよね、数値計算がちょっとでもはいるととても遅い
非同期IO処理だけさせるような所だとElixir含めてErlang系はものすごく便利だけど読める人が少ないし
220217
2015/09/30(水) 12:49:12.74ID:dQB3jeSs221デフォルトの名無しさん
2015/10/06(火) 06:05:05.21ID:fg1OrsOi haskellのlhs2texみたいなのって
LispやSchemeにはないの?
LispやSchemeにはないの?
222デフォルトの名無しさん
2015/10/11(日) 20:09:11.90ID:03dbVZHf あかんなぁ
俺、馬鹿になってきた
年ってやつかなぁ
Common Lisp始めたけど、あれこれの関数名をすぐ忘れる。
駿馬も老いては駄馬なんとかか
俺、馬鹿になってきた
年ってやつかなぁ
Common Lisp始めたけど、あれこれの関数名をすぐ忘れる。
駿馬も老いては駄馬なんとかか
223デフォルトの名無しさん
2015/10/11(日) 20:09:38.43ID:03dbVZHf 因みにことし還暦な
224デフォルトの名無しさん
2015/10/12(月) 12:06:44.75ID:traP+X+b >>223
不惑や知命でもぼける人はぼけちゃうからねぇ
不惑や知命でもぼける人はぼけちゃうからねぇ
225デフォルトの名無しさん
2015/10/13(火) 07:25:53.71ID:g15eXpvx Schemeでsyntax-case使うとき、マッチングの第一要素にkって名前をよく見るし使うけどこのネーミングになんか由来とか理由とかあります?
なんで?って聞かれて答えられないんですが
なんで?って聞かれて答えられないんですが
226はちみつ餃子 ◆8X2XSCHEME
2015/10/13(火) 08:36:38.14ID:4fZWo+Bs ソースがあるわけじゃないが自分は keyword の k だと思ってた。
仕様の中にある例でも k 使ってるからほとんどの人はそれに倣ってるだけだろうけど。
仕様の中にある例でも k 使ってるからほとんどの人はそれに倣ってるだけだろうけど。
227デフォルトの名無しさん
2015/10/13(火) 09:30:22.70ID:3mL35rpK i と j じゃ整数の印象が強いんで、次の k を使ってるだけかと思った
228はちみつ餃子 ◆8X2XSCHEME
2015/10/13(火) 10:41:06.68ID:4fZWo+Bs このあたりの例で使ってる i はたぶん identifier の i じゃないかと思う。
http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-13.html#node_sec_12.7
t は疑問の余地なく temporary だな。 p は pattern で e は expression ってところか。
http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-13.html#node_sec_12.7
t は疑問の余地なく temporary だな。 p は pattern で e は expression ってところか。
229デフォルトの名無しさん
2015/10/13(火) 20:14:54.52ID:gIZRbrc0 >>228
scheme限定のイディオムなんかね
clojureだと
(defn hoge [coll] (brabrabra))
coll(collection)をわたすんだぞーってイディオムになってるみたいな?
scheme限定のイディオムなんかね
clojureだと
(defn hoge [coll] (brabrabra))
coll(collection)をわたすんだぞーってイディオムになってるみたいな?
230はちみつ餃子 ◆8X2XSCHEME
2015/10/13(火) 21:10:40.41ID:4fZWo+Bs パターン変数には全部頭に ? を付けるとかいう流儀もあるし、
そんなに確立したものではないと思うけどね。
そんなに確立したものではないと思うけどね。
231デフォルトの名無しさん
2015/10/23(金) 16:08:32.51ID:vFqEchXB マクロの空をつらぬいて
232デフォルトの名無しさん
2015/10/23(金) 18:13:51.87ID:vFqEchXB 継続にkを使う人達もいる
233デフォルトの名無しさん
2015/10/23(金) 19:54:46.64ID:PxOWJO4j >>232
constantな値にkFoo,kBarってつける習慣もあるからcontinuationにkプレフィックスはそんなに違和感持たないなぁ
class指向な処理系で classって名前使えないからClass klass = someObject.class って書くようなものかと思うのであるよ。
;;; 実は歌の続き?としばらく悩んだ
constantな値にkFoo,kBarってつける習慣もあるからcontinuationにkプレフィックスはそんなに違和感持たないなぁ
class指向な処理系で classって名前使えないからClass klass = someObject.class って書くようなものかと思うのであるよ。
;;; 実は歌の続き?としばらく悩んだ
234デフォルトの名無しさん
2015/11/01(日) 09:01:12.26ID:FL14q5P6 理解重視でオレオレlisp処理系をhaskellで書いててこれを改良しようとしてます
環境は[(名前,値)]というわかりやすい実装でラムダ式本体部を引用するとこんなのです
let env' = (zip param args) ++ closure ++ env in
last $ map (eval env') body
これって開発言語のスタックを使った実装になりますよね?
このコードはapplyの一部で、evalとapplyの相互再起の中の1コマなのですが
よく末尾再帰とかいいますがああいうのはどうやって判定するのですか?
環境は[(名前,値)]というわかりやすい実装でラムダ式本体部を引用するとこんなのです
let env' = (zip param args) ++ closure ++ env in
last $ map (eval env') body
これって開発言語のスタックを使った実装になりますよね?
このコードはapplyの一部で、evalとapplyの相互再起の中の1コマなのですが
よく末尾再帰とかいいますがああいうのはどうやって判定するのですか?
235デフォルトの名無しさん
2015/11/06(金) 12:34:46.91ID:R0CwBCQp そろそろ何か書き込みないとスレが落ちる?
236デフォルトの名無しさん
2015/11/06(金) 15:41:26.45ID:vgByJdCj それは大変だ
237デフォルトの名無しさん
2015/11/06(金) 19:56:44.02ID:FxVaFUyP238デフォルトの名無しさん
2015/11/06(金) 22:19:04.69ID:dYcAh74V schemeはいい線行ってたと思う
不幸なのはほとんどの機能がjavascriptで足りてしまったこと
大多数の人は末尾再帰すらないjavascriptでいいと言う
繰り返し処理と言えばループしか脳から出てこないんだから
再帰はおろか末尾再帰なんか知らないだろう
再帰処理もスタック構造のコンテナとループで同じことができるんだから
実際知らなくても困らない
不幸なのはほとんどの機能がjavascriptで足りてしまったこと
大多数の人は末尾再帰すらないjavascriptでいいと言う
繰り返し処理と言えばループしか脳から出てこないんだから
再帰はおろか末尾再帰なんか知らないだろう
再帰処理もスタック構造のコンテナとループで同じことができるんだから
実際知らなくても困らない
239デフォルトの名無しさん
2015/11/07(土) 00:27:31.67ID:iMLfUYTc JavaScriptの末尾再帰はもうすぐ実装されるし高階関数もずいぶん前からあるが
240はちみつ餃子 ◆8X2XSCHEME
2015/11/07(土) 01:25:53.28ID:OLp/9/w8 WebAssembly が一般的になったら JavaScript の勢力は (クライアントサイドでは) 過去の資産を除いてフェードアウトしそう。
そのときこそ Scheme の復権が狙えるかもしれないぞ。
そのときこそ Scheme の復権が狙えるかもしれないぞ。
241デフォルトの名無しさん
2015/11/07(土) 11:42:14.37ID:Lam93S6q >>234
末尾コンテキストを判定する
末尾コンテキストの実行時はフレームで確保したスタックは使われない
よってその直前で削除してしまえるから関数呼び出し等でもループに置き換えられる
(define a (lambda (x y) (b x y) (a x y)))
の最後の(a x y)は末尾コンテキスト
最後のa呼び出し前のx yの引数の積み上げが完了した時点でaのフレームは削除できる
削除した後aを呼び出すとまた同じフレームレベルでaの処理が開始する
末尾コンテキストを判定する
末尾コンテキストの実行時はフレームで確保したスタックは使われない
よってその直前で削除してしまえるから関数呼び出し等でもループに置き換えられる
(define a (lambda (x y) (b x y) (a x y)))
の最後の(a x y)は末尾コンテキスト
最後のa呼び出し前のx yの引数の積み上げが完了した時点でaのフレームは削除できる
削除した後aを呼び出すとまた同じフレームレベルでaの処理が開始する
242デフォルトの名無しさん
2015/11/07(土) 12:03:06.20ID:Lam93S6q 末尾コンテキストの伝播
tを末尾コンテキストとする
(lambda ()・・・t)
(if test t t)
(begin ・・・t)
(lambda()・・・・t))
組み合わせると次のように末尾コンテキストが伝播する
(lambda ()・・(begin ・・・×)・・・(begin ・・・(if test t t)))
×は親が末尾コンテキストでの実行でなければ子も末尾コンテキストにはならない事を示す
tを末尾コンテキストとする
(lambda ()・・・t)
(if test t t)
(begin ・・・t)
(lambda()・・・・t))
組み合わせると次のように末尾コンテキストが伝播する
(lambda ()・・(begin ・・・×)・・・(begin ・・・(if test t t)))
×は親が末尾コンテキストでの実行でなければ子も末尾コンテキストにはならない事を示す
243デフォルトの名無しさん
2015/11/07(土) 12:15:41.27ID:Lam93S6q 関数適用の末尾コンテキスト
上で(a x y)を末尾コンテキストと書いたが
より正確にはtの呼び出し時点が末尾コンテキストとなる
表記的には(t 引数)となるがt自身がいつ評価されるかはschemeでは規定されていない
よって処理系の都合順にt x yを評価した後、tの呼び出し前に末尾コンテキスト処理(フレーム削除等)が発生する
上で(a x y)を末尾コンテキストと書いたが
より正確にはtの呼び出し時点が末尾コンテキストとなる
表記的には(t 引数)となるがt自身がいつ評価されるかはschemeでは規定されていない
よって処理系の都合順にt x yを評価した後、tの呼び出し前に末尾コンテキスト処理(フレーム削除等)が発生する
244デフォルトの名無しさん
2015/11/07(土) 12:37:03.29ID:Lam93S6q 末尾コンテキストが移動する構文
(set! var exp)
(while test body)
set!はvarがフレーム内変数ならexpの評価、フレーム外変数ならvarをexpの結果で破壊した時点が末尾コンテキストになる
whileはtestで偽になった時点かbody内からbreak等で抜けた時点だが、
そもそもschemeでのループ構文は末尾再帰の構文糖衣として定義されることが多く、この限りではない
継続呼び出しの末尾コンテキスト
継続呼び出しは継続を保存した位置に移動すると共に環境も入れ替わるため
末尾コンテキストの対象外となる(考慮しなくて良い)
(set! var exp)
(while test body)
set!はvarがフレーム内変数ならexpの評価、フレーム外変数ならvarをexpの結果で破壊した時点が末尾コンテキストになる
whileはtestで偽になった時点かbody内からbreak等で抜けた時点だが、
そもそもschemeでのループ構文は末尾再帰の構文糖衣として定義されることが多く、この限りではない
継続呼び出しの末尾コンテキスト
継続呼び出しは継続を保存した位置に移動すると共に環境も入れ替わるため
末尾コンテキストの対象外となる(考慮しなくて良い)
245デフォルトの名無しさん
2015/11/09(月) 10:47:59.41ID:zOMtLBxM http://tech.grammarly.com/blog/posts/Running-Lisp-in-Production.html
割と知られている英文法チェッカーがCommon Lispだった
割と知られている英文法チェッカーがCommon Lispだった
246デフォルトの名無しさん
2015/11/09(月) 15:11:05.97ID:nI2VMo2q ドクじゃん
247234
2015/11/09(月) 20:47:58.44ID:uBSPw/8w >>241-244 素晴らしいIDですね
末尾コンテキストの伝播については理解できたと思います
ifは末尾コンテキストが2つに増えるので
もしif文が末尾に連なってたら末尾コンテキストがたくさんになるわけですね
これを使って末尾コンテキスト判定をするis-tailrecみたいなのを作れば
考え方として、関数fの定義でもしis-tailrecが真となる箇所以外でfが
呼ばれていれば末尾再帰でないと判定すればいいですよね
set!の部分がちょっとまだ理解できてませんが考えてみます
末尾コンテキストの伝播については理解できたと思います
ifは末尾コンテキストが2つに増えるので
もしif文が末尾に連なってたら末尾コンテキストがたくさんになるわけですね
これを使って末尾コンテキスト判定をするis-tailrecみたいなのを作れば
考え方として、関数fの定義でもしis-tailrecが真となる箇所以外でfが
呼ばれていれば末尾再帰でないと判定すればいいですよね
set!の部分がちょっとまだ理解できてませんが考えてみます
2015/11/10(火) 21:05:11.25ID:HCVWy2wR
249デフォルトの名無しさん
2015/11/11(水) 14:40:05.71ID:oQgebZ0I Haskellのclassとinstanceに相当する型演算をSchemeで擬似的に作る方法ないのだろうか
250はちみつ餃子 ◆8X2XSCHEME
2015/11/11(水) 17:14:51.88ID:ECN7vnC1 Picrin にはそんな感じのオブジェクトシステムが入ってるよ。
作者による紹介記事がある。
http://wasabiz.hatenablog.com/entry/2015/01/12/170025
クラスじゃなくてプロトコルという名前になってるけど、やってることはほぼ同じ。
実装はこのあたり。 意外に小さい。
https://github.com/picrin-scheme/picrin/blob/master/contrib/50.class/piclib/picrin/class.scm
https://github.com/picrin-scheme/picrin/blob/master/contrib/80.protocol/piclib/picrin/protocol.scm
作者による紹介記事がある。
http://wasabiz.hatenablog.com/entry/2015/01/12/170025
クラスじゃなくてプロトコルという名前になってるけど、やってることはほぼ同じ。
実装はこのあたり。 意外に小さい。
https://github.com/picrin-scheme/picrin/blob/master/contrib/50.class/piclib/picrin/class.scm
https://github.com/picrin-scheme/picrin/blob/master/contrib/80.protocol/piclib/picrin/protocol.scm
251デフォルトの名無しさん
2015/11/11(水) 18:24:03.85ID:hvXzryLw ピクミンかと思ったらピクリン
252デフォルトの名無しさん
2015/11/17(火) 21:41:10.87ID:j2zk6VQe253デフォルトの名無しさん
2015/11/18(水) 02:32:25.06ID:3JxuKBB4 うーん、、、、
254デフォルトの名無しさん
2015/11/18(水) 06:45:07.50ID:D8xoadz9255デフォルトの名無しさん
2015/11/18(水) 13:46:02.89ID:mDzX1/ZQ >>252
これ読んでいるだけでも、すごく勉強になるよな
これ読んでいるだけでも、すごく勉強になるよな
256デフォルトの名無しさん
2015/11/19(木) 00:09:30.94ID:d0YkbYhs なるよな?
同意を求めないで欲しい
気持ち悪いbot作ったなーとしか…
同意を求めないで欲しい
気持ち悪いbot作ったなーとしか…
257はちみつ餃子 ◆8X2XSCHEME
2015/11/19(木) 00:38:47.15ID:cuUnetrq SICP は専門書なわけで、どこの 140 文字を抜き出したって勉強になるってほどの情報量ないよ。
258デフォルトの名無しさん
2015/11/19(木) 00:46:43.61ID:dXEAV4H+ 情報量うんぬん以前に
何言ってんのかわからない
日本語なのか
これは
何言ってんのかわからない
日本語なのか
これは
259デフォルトの名無しさん
2015/11/19(木) 00:51:29.41ID:dXEAV4H+ ワードサラダにしか見えん
260デフォルトの名無しさん
2015/11/19(木) 01:04:54.84ID:H4K8uZul 変な翻訳を抜き出して笑うためのbotだと思うんですけど
SICPで翻訳と言えば例の翻訳炎上のはてブ勢の気持ち悪いこと気持ち悪いこと
SICPで翻訳と言えば例の翻訳炎上のはてブ勢の気持ち悪いこと気持ち悪いこと
261デフォルトの名無しさん
2015/11/19(木) 02:17:36.76ID:sAMKa/4u アスぺの人、和田訳を執拗に擁護するのはなんなんだろうな
専門知識で足りない英語力を補っているから、minghai訳よりはマシって程度なのに
専門知識で足りない英語力を補っているから、minghai訳よりはマシって程度なのに
263デフォルトの名無しさん
2015/11/20(金) 01:28:32.20ID:sUCS+w9M 和田訳こそ英文が読めなくて、日本語を適当にでっちあげた
真鍋のいうところの腐臭のする糞訳なのに、
どういうわけか擁護するんだよな
真鍋のいうところの腐臭のする糞訳なのに、
どういうわけか擁護するんだよな
264デフォルトの名無しさん
2015/11/20(金) 21:27:40.60ID:ph+B6Bvv 擁護とか一体何と戦ってるんだこのおっさん
265デフォルトの名無しさん
2015/11/20(金) 22:14:38.36ID:qdgYLPrR 照り輝くbotはもともと糞訳をまとめたおもしろbotだろ
そもそも照り輝く自体相当前からネタにされてるし
そもそも照り輝く自体相当前からネタにされてるし
266デフォルトの名無しさん
2015/11/21(土) 00:58:11.83ID:ACMxKEDN 糞約とはいえ他人の著作物云々の問題はクリアしてるのか?
267デフォルトの名無しさん
2015/11/21(土) 01:23:42.79ID:ksFSpKOf268デフォルトの名無しさん
2015/11/21(土) 02:17:10.09ID:kXonXFHs269デフォルトの名無しさん
2015/11/21(土) 03:16:47.47ID://2/HV1n 推奨NGワード: illmnt
270デフォルトの名無しさん
2015/11/21(土) 04:49:29.21ID:pdN059iT 機械翻訳みたいな変な訳ばっかり
こういうのダメ出しするのも出版社の仕事だろ
アメリカの教科書はリーダブルじゃなきゃならないと聞くが
悪文で書いた教科書なんてのはそれこそ日本の悪文化だよ
ましてMITの教科書を改悪、悪文化するのはおかしいゾ
こういうのダメ出しするのも出版社の仕事だろ
アメリカの教科書はリーダブルじゃなきゃならないと聞くが
悪文で書いた教科書なんてのはそれこそ日本の悪文化だよ
ましてMITの教科書を改悪、悪文化するのはおかしいゾ
271デフォルトの名無しさん
2015/11/21(土) 04:50:19.99ID:pdN059iT まして、はおかしいか。俺も悪文化。
272デフォルトの名無しさん
2015/11/21(土) 09:08:25.40ID:bRToh1Ye273デフォルトの名無しさん
2015/11/28(土) 18:52:48.98ID:D0YQLzhL プログラミングGauche尼で売り切れてオライリーが入荷待ちなんだけど
絶版?第2版?
絶版?第2版?
274デフォルトの名無しさん
2015/12/02(水) 00:31:49.93ID:amR8vvu9 >>213
ラムダ式返したい
ラムダ式返したい
275デフォルトの名無しさん
2015/12/15(火) 02:43:12.56ID:SCkT4Wmk 本当はLisp使いたいのに急ぎだとpythonとかbashで使い捨てスクリプトを書いてしまう
276デフォルトの名無しさん
2015/12/15(火) 02:54:48.05ID:RaTSkkL3 そうか。
277デフォルトの名無しさん
2015/12/15(火) 12:22:58.17ID:HzjVt2sa それで良い。
278デフォルトの名無しさん
2015/12/16(水) 10:19:05.23ID:7XnugsYC (定義 (長さ リスト)
(もし (空? リスト)
0
(加算 1 (長さ (残余 リスト)))))
(もし (空? リスト)
0
(加算 1 (長さ (残余 リスト)))))
279デフォルトの名無しさん
2015/12/16(水) 13:19:26.38ID:RBWQyPz5 (定義 (右から畳み込み リスト 乗算 単位元)
(もし (空? リスト) 単位元
(乗算 (車 リスト) (右から畳み込み (残余 リスト) 乗算 単位元))))
(もし (空? リスト) 単位元
(乗算 (車 リスト) (右から畳み込み (残余 リスト) 乗算 単位元))))
280デフォルトの名無しさん
2015/12/16(水) 13:30:51.38ID:7BuiFt2H 「車」…w
281デフォルトの名無しさん
2015/12/16(水) 14:27:37.96ID:V4z/b3Ey (管 リスト)
282デフォルトの名無しさん
2015/12/17(木) 08:55:39.39ID:hUsjEVq7 Schemeを勉強しだす→「なんてシンプルかつエレガントなんだ!これさえあれば何でもできそうだ!」
Schemeで何か作ろうとしだす→「なんて面倒なんだ!CommonLispみたいに統一してくれよ!」
「R{5,6,7}RS準拠だぞ」
「けどここは各実装で好きにしていいぞ」
「皆自分でSchemeを作るんだぞ」
Schemeで何か作ろうとしだす→「なんて面倒なんだ!CommonLispみたいに統一してくれよ!」
「R{5,6,7}RS準拠だぞ」
「けどここは各実装で好きにしていいぞ」
「皆自分でSchemeを作るんだぞ」
283デフォルトの名無しさん
2015/12/17(木) 19:15:09.86ID:WdhrFOHs Scheme は「俺自身が Scheme になる事だ」が奥義だから
284デフォルトの名無しさん
2015/12/17(木) 23:13:43.49ID:kltDf5Nv (もしもし? もしもし? ただいま留守にしております お掛けになった電話番号は)
285デフォルトの名無しさん
2015/12/18(金) 00:12:22.66ID:OqK6hc4t > 俺自身がscheme
それは違うが
それは違うが
286デフォルトの名無しさん
2015/12/18(金) 02:10:52.71ID:FhfWj/9P 真の Scheme は世界で俺だけだもの
287デフォルトの名無しさん
2015/12/18(金) 02:18:32.82ID:OqK6hc4t 「俺の母語はschemeだぞい」とかいうなら分かるんだけど。
俺がschemeってどういうことよ?もっと具体的に。
俺がschemeってどういうことよ?もっと具体的に。
288デフォルトの名無しさん
2015/12/18(金) 06:05:40.32ID:dzRG5p0J 俺がガンダムだ! 的な。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 首相官邸前で「戦争あおるな」 台湾有事巡る答弁に抗議 [蚤の市★]
- 高市首相告白「『なめられない服』を選ぶことに数時間を費やしました」「外交交渉でマウント取れる服、買わなくてはいかんかもなぁ」 [ぐれ★]
- 【高市リスク】立民・小西洋之参院議員「高市総理がとんでもない安全保障オンチで外交オンチ」 [ぐれ★]
- 【赤坂ライブハウス刺傷】逃走していた自衛官の男(43)を殺人未遂の疑いで逮捕 警視庁 被害女性とは知人関係 [Ailuropoda melanoleuca★]
- 『DOWNTOWN+』会員数50万人突破で見えてきた 松本人志の“月収4ケタ万円”驚愕収入 [阿弥陀ヶ峰★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 眼帯つけようかな
- お前らの ク リ ス マ ス の予定は?🎄
- 天ぷら食いたい
- 勇者の母「ん……ふっ、起きなさいっ……私のっ……私のかわいい坊やっ、今日は貴方が……んはっ……勇者として旅立つ日……うふふ」
- このアイドルのビフォー・アフターどちらがいいかネットで見解が割れる [445522505]
- 大塚芳忠のASMR
