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
128デフォルトの名無しさん
2015/07/06(月) 21:14:58.54ID:VRJTYjkB 自前でサーバー立てるなら何でもありだけど、実際PaaSのほとんどがJVM前提だからね
129デフォルトの名無しさん
2015/07/07(火) 02:14:08.64ID:FANO5u+E Javaでプログラム書く人達はユニットテストという概念がないらしく
csvに結果を書き出してエクセルで手作業テストを行うという謎慣習があるようだ
こういう人達の書いたJavaコードと付き合わざる得ない環境ではClojureは便利
csvに結果を書き出してエクセルで手作業テストを行うという謎慣習があるようだ
こういう人達の書いたJavaコードと付き合わざる得ない環境ではClojureは便利
130デフォルトの名無しさん
2015/07/07(火) 05:31:59.64ID:3YG+ylqQ JUnit…
131デフォルトの名無しさん
2015/07/07(火) 13:05:55.75ID:FANO5u+E eclipseからJUnit使ってみるとわかるけど
エクセルの方が楽
エクセルの方が楽
132デフォルトの名無しさん
2015/07/08(水) 00:15:24.50ID:j/rYw6w7 >>129
むしろ、java以外のユニットテストツールを使ったことがない
むしろ、java以外のユニットテストツールを使ったことがない
133デフォルトの名無しさん
2015/07/18(土) 20:06:26.43ID:cOkep0vN >強力なマクロシステムが特徴で、マクロを使って言語機能を拡張でき
このLISP系でよく言われる「言語機能の拡張」って全然的を射てねーなと思う
例えばschemeのファーストクラスオブジェクト(FCO)としての継続って
言語プリミティブとしてFSO継続相当を始めから持ってない限りはどうやっても
拡張で得ることはできないし
FCOとしての継続の無い言語から有る言語へ言語機能を拡張するってことは
つまり新規にFCO継続付き言語を作るって事に他ならない
できることは結局言語に既にある機能の延長上の事だけで
言語拡張なんて大それた事は他の言語同様できやしない
「子供騙しですけど強力なマクロシステムで俺構文糖衣が簡単に作れますんで・・・」
とちゃんと書き直した方がいいね!
「プラグインモジュールを使うと言語機能を拡張できます」とかで売った方がまだ納得できると
思わないかね君たち
このLISP系でよく言われる「言語機能の拡張」って全然的を射てねーなと思う
例えばschemeのファーストクラスオブジェクト(FCO)としての継続って
言語プリミティブとしてFSO継続相当を始めから持ってない限りはどうやっても
拡張で得ることはできないし
FCOとしての継続の無い言語から有る言語へ言語機能を拡張するってことは
つまり新規にFCO継続付き言語を作るって事に他ならない
できることは結局言語に既にある機能の延長上の事だけで
言語拡張なんて大それた事は他の言語同様できやしない
「子供騙しですけど強力なマクロシステムで俺構文糖衣が簡単に作れますんで・・・」
とちゃんと書き直した方がいいね!
「プラグインモジュールを使うと言語機能を拡張できます」とかで売った方がまだ納得できると
思わないかね君たち
134デフォルトの名無しさん
2015/07/18(土) 23:28:49.86ID:uE0O9hZ+ 長くて読めないから3文字にまとめてくれ!
135デフォルトの名無しさん
2015/07/19(日) 00:51:10.84ID:yGfbtuav おかしなひとには
かかわらない
しらんぷり
かかわらない
しらんぷり
136デフォルトの名無しさん
2015/07/19(日) 05:55:05.73ID:9T0GJGKU お
か
ん
か
ん
137デフォルトの名無しさん
2015/07/19(日) 06:44:26.04ID:D56BGbCW >>133
思わない
思わない
138デフォルトの名無しさん
2015/07/19(日) 06:46:11.77ID:D56BGbCW139デフォルトの名無しさん
2015/07/19(日) 07:08:41.31ID:rCpqRDah マクロ展開時になんでもできるのに何で制限があると思うんだ?
140デフォルトの名無しさん
2015/07/19(日) 12:23:56.55ID:HOCsiBj3 >>133 みたいな勉強不足の人に黒板先生は本当に便利だ
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/scheme
> 端的に言ってしまえば Scheme は Lisp ではないです。 この2つを混同するのは味噌糞いっしょ、ってやつで、つつしむべきです。
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/script-lang
> Lisp の不幸の1つに、
> Lisp を使わない奴に限って Lisp について語りたがる
> というのがあるんですが、今回もう1つ加わったのは、
> Lisp を知らない奴に限って Lisp を他のもの、なかでも自分の自慰行為の結果と比べたがる
> Lisp の評論をとうとうとやるわけです。
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/scheme
> 端的に言ってしまえば Scheme は Lisp ではないです。 この2つを混同するのは味噌糞いっしょ、ってやつで、つつしむべきです。
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/script-lang
> Lisp の不幸の1つに、
> Lisp を使わない奴に限って Lisp について語りたがる
> というのがあるんですが、今回もう1つ加わったのは、
> Lisp を知らない奴に限って Lisp を他のもの、なかでも自分の自慰行為の結果と比べたがる
> Lisp の評論をとうとうとやるわけです。
141デフォルトの名無しさん
2015/07/19(日) 12:48:48.02ID:UMlSSY6R142デフォルトの名無しさん
2015/07/19(日) 13:33:11.61ID:4YSiYgLI >>140
その理屈でいくなら、CommonLisp も Lisp ではありませんね
その理屈でいくなら、CommonLisp も Lisp ではありませんね
144デフォルトの名無しさん
2015/07/19(日) 13:58:30.31ID:4YSiYgLI >>143
Lisp と CommonLisp を混同しながら、Scheme はLisp ではないと主張ている人の意見はほどほどにして聞きましょう
Lisp と CommonLisp を混同しながら、Scheme はLisp ではないと主張ている人の意見はほどほどにして聞きましょう
145デフォルトの名無しさん
2015/07/19(日) 14:18:17.54ID:HOCsiBj3 >>144
自身のLispの定義を明らかにせずにCommon Lispは違うって言われましてもw
でもCommon LispがLispでないんなら、なおさらSchemeでLispを代表させるような論が成立しないのは同意できるんでないの
自身のLispの定義を明らかにせずにCommon Lispは違うって言われましてもw
でもCommon LispがLispでないんなら、なおさらSchemeでLispを代表させるような論が成立しないのは同意できるんでないの
146デフォルトの名無しさん
2015/07/19(日) 15:30:05.25ID:4YSiYgLI >>145
まず、Lisp は CommonLisp ではない
Lisp は Scheme ではない
次に
ttp://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
この↑Lisp1.5 は Lisp であるとする (おそらく、誰も異議をはさまないでしょう)
その上で、CommonLisp は Lisp であると仮定する (つまり、Lisp1.5 と CommonLisp程度の差があっても Lisp の一部であると仮定する)
当然、SchemeはLispである
逆に、SchemeはLispではないと仮定する (つまり、SchemeにもLisp1.5にもないモノがあればLispではないとする)
package にintern できる symbol がある CommonLisp は Lispではない
CommonLisp 側の言い分としては、CommonLisp はSchmeと同じくLisp系の新言語です
(Common Lisp is the modern, multi-paradigm, high-performance, compiled, ANSI-standardized, most prominent (along with Scheme) descendant of the long-running family of Lisp programming languages. )
Confusing Lisp and Common Lisp is permissible once in a human life. です
個人的には、マクロやシンボルが無くてもLispと呼ぶべきだと思います
まず、Lisp は CommonLisp ではない
Lisp は Scheme ではない
次に
ttp://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
この↑Lisp1.5 は Lisp であるとする (おそらく、誰も異議をはさまないでしょう)
その上で、CommonLisp は Lisp であると仮定する (つまり、Lisp1.5 と CommonLisp程度の差があっても Lisp の一部であると仮定する)
当然、SchemeはLispである
逆に、SchemeはLispではないと仮定する (つまり、SchemeにもLisp1.5にもないモノがあればLispではないとする)
package にintern できる symbol がある CommonLisp は Lispではない
CommonLisp 側の言い分としては、CommonLisp はSchmeと同じくLisp系の新言語です
(Common Lisp is the modern, multi-paradigm, high-performance, compiled, ANSI-standardized, most prominent (along with Scheme) descendant of the long-running family of Lisp programming languages. )
Confusing Lisp and Common Lisp is permissible once in a human life. です
個人的には、マクロやシンボルが無くてもLispと呼ぶべきだと思います
147デフォルトの名無しさん
2015/07/19(日) 16:16:48.77ID:heZn3Xco >>140
このKURODA Hisaoって人が書いてる他のページも見たが
Abstract Syntaxの概念やこれを設定する意義を理解できない人がSemanticsについて語っても全く説得力がないね
それにSchemeの単一name space批判を自然言語での文脈依存性を持ち出してるが
自然言語の柔軟さというかいい加減さを至上の価値とするのならば所詮は知性ゼロ・常識ゼロのコンパイラやインタプリタですら処理できちゃう
普通のプログラミング言語なんてどれも失格、もちろんCommon Lispもね
理論や論理学について良く判っていない人間ほどFregeみたいな「計算機と深い関係があると世間で言われている」哲学者の名前を出したがる
このKURODA Hisaoって人が書いてる他のページも見たが
Abstract Syntaxの概念やこれを設定する意義を理解できない人がSemanticsについて語っても全く説得力がないね
それにSchemeの単一name space批判を自然言語での文脈依存性を持ち出してるが
自然言語の柔軟さというかいい加減さを至上の価値とするのならば所詮は知性ゼロ・常識ゼロのコンパイラやインタプリタですら処理できちゃう
普通のプログラミング言語なんてどれも失格、もちろんCommon Lispもね
理論や論理学について良く判っていない人間ほどFregeみたいな「計算機と深い関係があると世間で言われている」哲学者の名前を出したがる
148デフォルトの名無しさん
2015/07/19(日) 16:17:03.59ID:OiytaaWT わりと
どうでもいいよね〜 ね〜♪
_ ‐..::  ̄ ̄ ::::... 、
. ィ r'::/ ::ィ:::::::::::j:::::::ヽ::::\
,._.._ .......、._ _ /:/l! | ::|::/ |::::::::∧:::レ::l:::| :::::rヘ
ヽ :~""''.>゙' "~ ,、、''‐'、| l ::仏_ノヘ:/ ー- ハ:::!::::::|::::i
゙、'、::::::ノ:::::::_,.-=. _〜:、 /::::リy=ミ ' ィ=ミ /:::::!::::/:::::!
``、/:::::::::__....,._ `゙'Y' _.ェ-、..._ |::::{xx xx/::::::「)'|:::::::|
,.--l‐''"~..-_'.x-='"゙ー 、`'-、 lハ:仆 ..._ヽフ /:::: /´ |:::::::|
" .!-'",/ `'-‐'') /\ ` Y::::ソ勺 7イV_ !:::::::!
.-''~ >'゙:: ‐'"゙./ ヽ. __ |::/ 爻___ん'´ッ'⌒ヽ! :::::!
//::::: ', (__,、\/ /‐―一弋{、 /  ̄_)
' /::::: .:'; \ ' { :::\ /~::!
どうでもいいよね〜 ね〜♪
_ ‐..::  ̄ ̄ ::::... 、
. ィ r'::/ ::ィ:::::::::::j:::::::ヽ::::\
,._.._ .......、._ _ /:/l! | ::|::/ |::::::::∧:::レ::l:::| :::::rヘ
ヽ :~""''.>゙' "~ ,、、''‐'、| l ::仏_ノヘ:/ ー- ハ:::!::::::|::::i
゙、'、::::::ノ:::::::_,.-=. _〜:、 /::::リy=ミ ' ィ=ミ /:::::!::::/:::::!
``、/:::::::::__....,._ `゙'Y' _.ェ-、..._ |::::{xx xx/::::::「)'|:::::::|
,.--l‐''"~..-_'.x-='"゙ー 、`'-、 lハ:仆 ..._ヽフ /:::: /´ |:::::::|
" .!-'",/ `'-‐'') /\ ` Y::::ソ勺 7イV_ !:::::::!
.-''~ >'゙:: ‐'"゙./ ヽ. __ |::/ 爻___ん'´ッ'⌒ヽ! :::::!
//::::: ', (__,、\/ /‐―一弋{、 /  ̄_)
' /::::: .:'; \ ' { :::\ /~::!
149デフォルトの名無しさん
2015/07/19(日) 17:56:45.41ID:D56BGbCW チンコも関係ないもんねぇ
150デフォルトの名無しさん
2015/07/19(日) 17:57:39.68ID:KxDpt4xY これで133も満足だね
151デフォルトの名無しさん
2015/07/19(日) 18:28:12.53ID:yGfbtuav 確かに言語拡張でarduinoと連携してドローンを自動航行できますとか言えた方がかっこいいよな
方言作れるとか書かれてもLisp界隈の事情知らん人間にゃ意味不明だし
方言作れるとか書かれてもLisp界隈の事情知らん人間にゃ意味不明だし
152SCHEME餃子 ◆8X2XSCHEME
2015/07/19(日) 20:49:45.79ID:bZkSJoy2153デフォルトの名無しさん
2015/07/19(日) 22:15:40.89ID:+t5BUUhH 言語は大きい会社や団体が開発してることがほとんど。なので妙な政治意図で故意に機能が削られたりが良くある。マクロありとこういうのは無視出来る。だいたいは誰かが便利なマクロを公開してくれる
154デフォルトの名無しさん
2015/07/20(月) 00:59:43.37ID:jCSJmRBw なんで誰もcl-contを持ち出さないんだ
155デフォルトの名無しさん
2015/07/20(月) 01:22:41.63ID:8KYV1D+J だって、>133の言い掛かりと言語レベルでの継続の必要性とは、まるで関係がないんだものw
156デフォルトの名無しさん
2015/07/20(月) 02:49:25.74ID:kupXshGu フル継続の後付けが難しいのは事実だろ。
cl-cont も Scheme に比べればモドキに過ぎないしな。
そんでもって >>133 は継続は例に出しただけで、
マクロによる拡張が容易であっても言語が持つべきプリミティブの選択が重要だってことじゃないのか?
cl-cont も Scheme に比べればモドキに過ぎないしな。
そんでもって >>133 は継続は例に出しただけで、
マクロによる拡張が容易であっても言語が持つべきプリミティブの選択が重要だってことじゃないのか?
157デフォルトの名無しさん
2015/07/20(月) 17:42:45.96ID:aIRgWq4T 長々書いてるけどマクロでシンタックスを拡張できてもセマンティクスは変えられないってこと?
そりゃそうなんじゃない?この手の話の根はチューリング完全話と一緒だよね
機能拡張という言葉はセマンティクス拡張と同義ではないよなあ
そりゃそうなんじゃない?この手の話の根はチューリング完全話と一緒だよね
機能拡張という言葉はセマンティクス拡張と同義ではないよなあ
158デフォルトの名無しさん
2015/07/20(月) 20:43:14.25ID:ysx1EkA6 それはもう見ているものがLispのマクロによる拡張性ではなくなっている
159デフォルトの名無しさん
2015/07/20(月) 21:51:34.43ID:d8TisZYV 特殊形式以外のマクロを使わないという選択
160デフォルトの名無しさん
2015/07/20(月) 23:07:56.79ID:kupXshGu 言語の意味論とシンタクス拡張はレイヤが違う話だよ。
DSL は言語の意味論を変えはしないけど系を作ることは出来る。
物理法則は変えられないけど、物理法則の範囲内でサッカーのルールを定義したとして、それが無意味って言えるか?
DSL は言語の意味論を変えはしないけど系を作ることは出来る。
物理法則は変えられないけど、物理法則の範囲内でサッカーのルールを定義したとして、それが無意味って言えるか?
161デフォルトの名無しさん
2015/07/21(火) 18:19:47.73ID:3UOplv+P 上の方の人と偶然被ってるけど、質問。
schemeのdefine-syntaxって何ですか?
defineじゃダメなの?
schemeのdefine-syntaxって何ですか?
defineじゃダメなの?
162デフォルトの名無しさん
2015/07/22(水) 02:27:20.21ID:ta5d120D Scheme のマクロは式の評価の前に展開される。
ものすごく単純化して説明すると処理されるタイミングが違うの。
ものすごく単純化して説明すると処理されるタイミングが違うの。
163デフォルトの名無しさん
2015/07/22(水) 10:24:48.10ID:4IMBgQFd >>161
マクロなら可能だがdefineでは定義不可能なケースを上げておく
defineで定義された関数(procedure)の適用では、まず全ての引数が評価されてからその結果が関数bodyに渡されて関数の結果が決まる。
もし、全ての関数を評価せずに前から必要な分だけ評価する関数を書きたい場合、defineでは無理。その場合はdefineは-syntaxなどをつかってマクロを定義することになる。
マクロは
>>162が述べているように第一段階としてSchemeのS式を生成し、第二段階でその生成されたS式を評価するわけだが、第一段階ではマクロの引数は評価されない点が重要。
それによって、defieとは異なり一部の引数をのみ評価することが可能となる。
or関数はその一例だな
もしdefineでmy_orを定義しようとすると全ての引数を評価するという無駄な関数となるわけだ。
もしaがtrueなら
(or a b c d e)でb以下は評価不要
が(define my_or ……)とすると
aからeまでを必ず評価してしまう
マクロなら可能だがdefineでは定義不可能なケースを上げておく
defineで定義された関数(procedure)の適用では、まず全ての引数が評価されてからその結果が関数bodyに渡されて関数の結果が決まる。
もし、全ての関数を評価せずに前から必要な分だけ評価する関数を書きたい場合、defineでは無理。その場合はdefineは-syntaxなどをつかってマクロを定義することになる。
マクロは
>>162が述べているように第一段階としてSchemeのS式を生成し、第二段階でその生成されたS式を評価するわけだが、第一段階ではマクロの引数は評価されない点が重要。
それによって、defieとは異なり一部の引数をのみ評価することが可能となる。
or関数はその一例だな
もしdefineでmy_orを定義しようとすると全ての引数を評価するという無駄な関数となるわけだ。
もしaがtrueなら
(or a b c d e)でb以下は評価不要
が(define my_or ……)とすると
aからeまでを必ず評価してしまう
164デフォルトの名無しさん
2015/07/22(水) 10:26:49.67ID:TPXSOrgT165デフォルトの名無しさん
2015/07/22(水) 10:28:22.27ID:TPXSOrgT166デフォルトの名無しさん
2015/07/22(水) 13:29:11.06ID:wcjgZ6Dx167デフォルトの名無しさん
2015/07/22(水) 21:13:51.17ID:ta5d120D168デフォルトの名無しさん
2015/07/23(木) 00:05:16.72ID:a8nLYx9Z 全部(lambda()〜)で囲って遅延評価すればなんでもできるよ
SICPでマクロが無くても問題なかったのはこのおかげ
SICPでマクロが無くても問題なかったのはこのおかげ
169デフォルトの名無しさん
2015/07/23(木) 01:48:45.97ID:6c5WF/G8170デフォルトの名無しさん
2015/07/23(木) 02:53:10.55ID:kIXXXoPi >>169
構文は第一級ではない。 (実行時に値として扱える存在ではない。)
「マクロ展開フェイズ」が完了してから「式の評価」を開始するので、実行時に束縛するのでは遅すぎるんだよ。
式ひとつごとに「展開」「評価」をする処理系でフェイズの分離を有耶無耶にしている処理系だと区別を曖昧にしてもなんとかなるのかもしれないが……
それは実装方針のひとつとしてそういうのもありえる、可能というだけ。
構文は第一級ではない。 (実行時に値として扱える存在ではない。)
「マクロ展開フェイズ」が完了してから「式の評価」を開始するので、実行時に束縛するのでは遅すぎるんだよ。
式ひとつごとに「展開」「評価」をする処理系でフェイズの分離を有耶無耶にしている処理系だと区別を曖昧にしてもなんとかなるのかもしれないが……
それは実装方針のひとつとしてそういうのもありえる、可能というだけ。
171デフォルトの名無しさん
2015/07/23(木) 03:19:31.89ID:6c5WF/G8172デフォルトの名無しさん
2015/07/28(火) 17:18:38.84ID:HAkHyXxd .oO( The Little Prover を読んだ香具師がスレの流れを作ってくれる予感 )
173デフォルトの名無しさん
2015/07/29(水) 02:05:40.80ID:CRqVMe5R なぜ自由なlispより不自由なjavascriptが流行ったのか
174デフォルトの名無しさん
2015/07/29(水) 02:07:56.15ID:c7scFQol 自由度なんてマニアしか求めてないから
175デフォルトの名無しさん
2015/07/29(水) 08:09:17.38ID:F/xNpz+P ウェブブラウザから使えるのが lisp だったら流行ったんじゃないの?
とはいえそこに lisp が採用されない理由も結局は一緒か。
とはいえそこに lisp が採用されない理由も結局は一緒か。
176デフォルトの名無しさん
2015/07/29(水) 20:06:45.42ID:amFWHOPf IE4やNN4で実装されたスクリプト言語がLISP系だったら…
少なくともfirefoxのnoscriptアドオンは不要だったろうな
少なくともfirefoxのnoscriptアドオンは不要だったろうな
177デフォルトの名無しさん
2015/07/29(水) 22:07:49.45ID:Gvu0+gpo 逆に考えるんだ、
「lisp でWebブラウザを作ればいいや」
と考えるんだ
「lisp でWebブラウザを作ればいいや」
と考えるんだ
178SCHEME餃子 ◆8X2XSCHEME
2015/07/29(水) 22:20:24.82ID:w5hc2Qux WebAssembly が一般的になれば Lisp にもワンチャンあるで
179デフォルトの名無しさん
2015/07/30(木) 00:29:45.75ID:5uamD/zW Javaがダメ言語とあの時点で判明してればなあ。
当初の予定通りschemeが組み込まれてたに違いない。
当初の予定通りschemeが組み込まれてたに違いない。
180デフォルトの名無しさん
2015/07/30(木) 00:35:22.22ID:W1QWz47r emacs で Webブラウジングが出来るんじゃ無かったか。
181デフォルトの名無しさん
2015/07/30(木) 00:51:21.10ID:bNQ7YEFA 技術系のドキュメントとかあまり凝った事してないものしかまともに見れんよ。
182SCHEME餃子 ◆8X2XSCHEME
2015/07/30(木) 01:08:52.34ID:txS92Tc7 Emacs に Webkit 載せたりしてるのもあったぞ。
Emacs 側から Webkit をどれくらい操作できるのかは知らんけど。
Emacs 側から Webkit をどれくらい操作できるのかは知らんけど。
183デフォルトの名無しさん
2015/07/30(木) 03:10:36.45ID:qAED+lXR ブラウザ競争っていかにCSSに意図通り対応してるかの勝負だし
サーバサイドならemacsでもjavaでも変わらん
サーバサイドならemacsでもjavaでも変わらん
184デフォルトの名無しさん
2015/07/30(木) 22:45:29.66ID:e7NCTD1Y いや javascript が動かないと。
ああ、其処を lisp にするって話だったか。
ああ、其処を lisp にするって話だったか。
185デフォルトの名無しさん
2015/07/30(木) 22:47:36.32ID:lQHnBAth いまだに、javascript が scheme だということについて納得できない
186デフォルトの名無しさん
2015/07/31(金) 01:38:43.67ID:aJuGxMgm 第一級の継続も末尾呼び出しの最適化もないしねぇ
手続きが無条件でクロージャになるってのがまあ当時としては特徴的ではあったけども
手続きが無条件でクロージャになるってのがまあ当時としては特徴的ではあったけども
187デフォルトの名無しさん
2015/07/31(金) 15:13:29.83ID:Dkg4afbG CLみたいな余計な装飾子が無いところはschemeと考え方が近い
末尾最適化が標準のluaのがよりschemeに近い
継続は第一級にする必要ってあんのかな
使い所が難しいし言語に例外機構が備わってればいらないし
jsはライブラリ覚えるだけでもしんどい
末尾最適化が標準のluaのがよりschemeに近い
継続は第一級にする必要ってあんのかな
使い所が難しいし言語に例外機構が備わってればいらないし
jsはライブラリ覚えるだけでもしんどい
188デフォルトの名無しさん
2015/08/01(土) 07:34:04.74ID:qWCT4wa1 今JSがコールバック地獄になってるからこそ継続がほしいんじゃん。フル継続じゃなくて限定継続でもいいから。
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 ってところか。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★9 [BFU★]
- 【赤坂ライブハウス刺傷】逃走していた自衛官の男(43)を殺人未遂の疑いで逮捕 警視庁 被害女性とは知人関係 [Ailuropoda melanoleuca★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 植田日銀総裁 「円安進行が物価高を起こしている」 ★4 [お断り★]
- 高市首相が異例の“買春行為の罰則化の検討”に言及…世界では“買う側”に罰則を科すのが先進国のスタンダード ★2 [樽悶★]
- 【ガチ正論】一般人「中国に規制制裁されて、『中国ムカつく』じゃなくて矛先が『許さんぞ高市』になってる奴、頭おかしいの?」 ★2 [153490809]
- 脳ぶっ壊れワイにおすすめの快楽手段
- ジャパニーズってジャパニーズじゃん?
- ツキノワグマ vs ヒグマ vs メカヒグマ vs モスラ vs キングギドラ
- NHKニュースウオッチ9「日本側は対話にオープンな姿勢で安定した日中関係を築きたい考えなのに中国が意固地で糸口が見いだせない」 [904151406]
- お前らの悪影響を受けて頭がおかしくなったし性格が悪くなった
