Lisp Scheme Part35
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/09/19(水) 10:41:56.61■前スレ
Lisp Scheme Part34
http://toro.2ch.net/test/read.cgi/tech/1327819028/
■テンプレ
http://wiki.fdiary.net/lisp/
■関連スレ
【入門】Common Lisp その9【質問よろず】
http://toro.2ch.net/test/read.cgi/tech/1330888006/
0002デフォルトの名無しさん
2012/09/19(水) 10:45:52.34http://www-inst.eecs.berkeley.edu/~cs61a/sp12/book/index.html
0003デフォルトの名無しさん
2012/09/19(水) 12:23:00.73参加費高いのがネックだけど
知り合いか友達がつくれれば結構よい機会になると思うよ
例えば Emacs 好きな人だったら
チュートリアルやる Didier Verna さんは XEmacs 開発者だし日本滞在経験があるって
英語が片言でもいざとなったら lisp で話せば通じる
なので月曜日の excursion や火曜日の banquet への参加をおすすめする
0004デフォルトの名無しさん
2012/09/19(水) 16:02:10.290005デフォルトの名無しさん
2012/09/19(水) 17:31:43.080006デフォルトの名無しさん
2012/09/19(水) 21:07:27.32Ctrl-Z食ってお休みしてるプロセスみたいなもの?
0007デフォルトの名無しさん
2012/09/19(水) 21:43:58.02要は次に行なうべき計算
何の「次」なのかの説明が必要になるが・・・
0008デフォルトの名無しさん
2012/09/19(水) 22:40:39.570009デフォルトの名無しさん
2012/09/19(水) 23:03:25.60Schemeに慣れていないと直観的に分かりにくい
0010デフォルトの名無しさん
2012/09/19(水) 23:24:51.830011デフォルトの名無しさん
2012/09/19(水) 23:43:06.330012デフォルトの名無しさん
2012/09/19(水) 23:50:18.15とかでbcdeに副作用があると副作用がどの順番に起こるか保証されない
が、大抵は左から右、右から左のどっちか
どっちか決めろよ
0013デフォルトの名無しさん
2012/09/19(水) 23:53:23.150014デフォルトの名無しさん
2012/09/19(水) 23:54:17.60馬鹿にしないで欲しいわ
0015デフォルトの名無しさん
2012/09/19(水) 23:56:05.56edcbだった
混乱するじゃないか!
0016デフォルトの名無しさん
2012/09/19(水) 23:57:03.860017デフォルトの名無しさん
2012/09/20(木) 00:04:33.75最適化でdcbeやdcebになるかもしれんぞ
まあ仕様が決まってるならバグだが
0018デフォルトの名無しさん
2012/09/20(木) 00:48:29.210019デフォルトの名無しさん
2012/09/20(木) 01:31:58.490020デフォルトの名無しさん
2012/09/20(木) 02:52:29.720021はちみつ餃子 ◆8X2XSCHEME
2012/09/20(木) 07:33:44.00その通り。
一旦 let* 等で変数に束縛するか、
よく使うものならそう展開されるようなマクロでくるむべし。
0022デフォルトの名無しさん
2012/09/20(木) 11:47:03.440023はちみつ餃子 ◆8X2XSCHEME
2012/09/21(金) 10:07:51.32C は最適化の可能性という錦の御旗があるけど、Scheme の場合は理論上の背景がありそう。
単に万人が納得する順序を決められないってことかもしれんけど。
私としては決まってない方が好みだな。
順序がどうでもいい場合はそのまま書けばいいし、
順序に意味がある場合は let* を使えばいい。
引数の評価順を決めてしまうと、その順序に意味があるのか無いのか見た目でわからなくなる。
0024デフォルトの名無しさん
2012/09/21(金) 19:18:17.400025デフォルトの名無しさん
2012/09/21(金) 20:48:29.391. たぶん読みやすい
2. もしかしたらコンパイラが良いコードを吐いてくれるかも
だそうだ。
0026デフォルトの名無しさん
2012/09/21(金) 23:36:01.690027デフォルトの名無しさん
2012/09/21(金) 23:37:43.970028デフォルトの名無しさん
2012/09/22(土) 01:44:15.260029デフォルトの名無しさん
2012/09/22(土) 08:15:25.74ざっと調べたが、>>25 以外に評価順序を定めなかった元々の理由としては
継続渡しによるプログラミングを前提にしていたからだそうだ。
ちゃんと一次資料調べろよ。
0030デフォルトの名無しさん
2012/09/22(土) 21:21:56.480031デフォルトの名無しさん
2012/09/23(日) 10:17:06.14何か参考になるものはありますか?
0032はちみつ餃子 ◆8X2XSCHEME
2012/09/23(日) 13:44:01.16例外オブジェクト (R6RS用語ではコンディションオブジェクト) が継承関係だけでなく合成があるのが特徴的。
こういった形で用意されている以上、典型的なエラー処理方式のひとつなんだと思う。
SRFI にも例外処理関連のがいくつかあるからそれらも併せて参考にすればいいんじゃないかな。
でも、 Scheme は規格の序章に書かれている通り、機能を追加することより言語の弱点を取り除くことに主眼がある。
つまり、今回の例で言えば例外処理の機能を提供することよりも例外処理をしたいとプログラマが思ったときにそれを邪魔しないという意味。
プログラマがどういう方法でエラー処理したいと思っても Scheme 的には間違ってない。
多値で返すのだって、継続渡しで分岐するのだってそれらを使い分けるのだって自分でやりやすければいいと思う。
0033デフォルトの名無しさん
2012/09/23(日) 13:57:32.130034デフォルトの名無しさん
2012/09/23(日) 16:56:03.26#f
を返しとけ。
0035デフォルトの名無しさん
2012/09/23(日) 18:00:22.69多値のないscheme処理系に多値は追加できないし
機能拡張つっても結局schemeの可能な範囲内でってことでしょ
5命令から構文糖作ったりできる程度
0036デフォルトの名無しさん
2012/09/23(日) 18:20:48.71例外とかモジュールとか必須だろ?REPLはまだ仕様にないんだっけ?
いまのRNRSは何か中途半端だよ
0037はちみつ餃子 ◆8X2XSCHEME
2012/09/23(日) 18:22:14.99R5RS で多値が追加されたのは言語としてそれがないとプログラマが追加できないのがわかってるからだよ。
だから、多値のない処理系を前提として出すのはナンセンス。
0038デフォルトの名無しさん
2012/09/23(日) 18:38:28.52ただ、特に作法は聞いたことがないので一般的な作法を用いるしかない。
CodeCompleteの上が参考になると思う。
http://www.amazon.co.jp/dp/489100455X
0039はちみつ餃子 ◆8X2XSCHEME
2012/09/23(日) 18:41:51.97例外は call/cc と dynamic-wind があればその上に構築可能なので、
言語のコアとして必須とは言えないと思う。
モジュールは必要と昔から言われてて、
R6RS でライブラリという名前で実現した。
R5RS から R6RS への改定で REPL が削除されたのは
フェイズというか評価環境をライブラリ単位で決定する R6RS の形式に対してそぐわないからだと思う。
言語全体の仕組との絡みがあるので必要かどうかの段階から議論しなきゃ駄目じゃね。
俺としては REPL は各処理系の裁量で柔軟にやってくれてる R6RS の現状でいいと思ってるけど。
中途半端なのは仕方ない。 Scheme は完成されてないんだ。
言語に完成なんて無いけど Scheme はまだ活発に発展してるんだから
必要だと思うことがあれば声を上げろよ。
R7RS はまだまだこれから。
0040デフォルトの名無しさん
2012/09/23(日) 18:50:02.08FortranやCobolも時代に合わせて機能追加されているけれども、
全然使われてないらしいし、対外的にアピールするためだけの機能と
実際使う機能を区別していくべき。
0041デフォルトの名無しさん
2012/09/23(日) 19:09:19.940042デフォルトの名無しさん
2012/09/23(日) 19:15:24.16そういう「個人が決意を新たにすればなんとかなる」なんて信じられないだろ。
0043はちみつ餃子 ◆8X2XSCHEME
2012/09/23(日) 23:08:36.93プログラミング言語の機能はそれぞれの機能の連携で動くものだから、
80 点の機能同士を組み合わせたら64点だよ。
組み合わせるほどにぐだぐだになっていく。
CL はいい感じの妥協点を見出してはいるけど Scheme で同じようにやるのは芸がない。
っていうか CL に対する反発みたいな意識はあると思う。
0044デフォルトの名無しさん
2012/09/24(月) 01:55:24.65决めることを怖れているのではない
决めたのに誰も従わず、その決まりの権威がなくなり、いろんな決まりが好き勝手に大量発生することを怖れているのだ
0045デフォルトの名無しさん
2012/09/24(月) 05:01:52.03schemeのこだわりは分かってるつもりだし、実現したら格好いい。でも、決めるのがあまりに遅くないか?それも人手不足のしいかもしれないけど。
0046デフォルトの名無しさん
2012/09/24(月) 07:20:48.45規格オプショナルで
SRFIだと実装する気にならね
0047はちみつ餃子 ◆8X2XSCHEME
2012/09/24(月) 07:28:00.550048はちみつ餃子 ◆8X2XSCHEME
2012/09/24(月) 08:07:37.48例外は R6RS で定義してるだろ。
複数行に渡る文字列も使えるようになってるので
あらためてヒアドキュメントなんてものが必要とは思えないな。
テキストから読み込んで文字列リテラルに展開するマクロとかも書けるし。
0049はちみつ餃子 ◆8X2XSCHEME
2012/09/24(月) 08:09:01.41返す値が未定義っていうのは使うなって意味だぞ。
これはまだ決まってないというよりは議論した上で未定義だと決めたものだ。
将来的に覆る可能性は低いと思う。
0050デフォルトの名無しさん
2012/09/24(月) 08:12:23.92俺Lisp作ったほうがよさそうだな
0051デフォルトの名無しさん
2012/09/24(月) 12:30:55.57> REPL が削除されたのは
> (中略)
> R6RS の形式に対してそぐわないからだと思う。
もっとくやしく。
0052デフォルトの名無しさん
2012/09/24(月) 15:20:43.67まずは俺仕様の俺Scheme作って公開してみるのはどうだろう?
0053デフォルトの名無しさん
2012/09/24(月) 15:55:12.74どういう議論がされてるの?
0054デフォルトの名無しさん
2012/09/24(月) 20:53:30.44本当にScheme使っている人は途中で仕様変更するなんて望むわけ無い。
少なくとも俺はR5RSの機能が使えればそれでいい。
もろこの話だよ↓
http://msdn.microsoft.com/ja-jp/magazine/jj133828.aspx
0055はちみつ餃子 ◆8X2XSCHEME
2012/09/24(月) 21:02:56.73R6RS ではプログラム全体が letrec* であるかのように扱われるんだけど、
REPL だと「全体」の入力が終わらない内に一行ごとに評価せねばならないことから
ファイルに記述したプログラムを与えるのと同じようには扱えない。
っていうかよく見たら R5RS でも REPL については無くてもいいことになってるな。
0056デフォルトの名無しさん
2012/09/25(火) 01:59:25.32自作処理系があるけど、自身を持って公開できない
0057デフォルトの名無しさん
2012/09/25(火) 04:24:38.530058デフォルトの名無しさん
2012/09/25(火) 05:38:42.74束縛する変数の評価順序が保証されているのがstar付きletrec
でなかった?
0059デフォルトの名無しさん
2012/09/25(火) 11:47:31.27多値のない処理系に多値を追加することは簡単にできるよ。
valuesは1引数以外のときに値をパックして、call-with-valuesがパックされた値を展開する。
受け取る値と返す値が一致してないとパックされたオブジェクトが見えちゃうけれど、
R5RSではわざとそういう場合を処理系依存にして、後付けの実装を許すようにしている。
R5RSで多値が追加されたのは、処理系による最適化を許すためと、コールとリターンの対称性のため。
0060デフォルトの名無しさん
2012/09/25(火) 12:29:29.92追加できるっていってもそれは多値というより分配束縛だろ。
継続に複数の値を渡せるってこととセットで初めて概念的にも多値って言えると思う。
0061デフォルトの名無しさん
2012/09/25(火) 12:41:54.70とかR7RSの投票の中で言ってた気がする。
0062デフォルトの名無しさん
2012/09/25(火) 18:12:31.50ああ、call/ccも置き換えないとならなかったね。すまぬ。valuesがパックしてくれるとして
(define (call/cc f)
(call/cc-orig (lambda (c) (f (lambda args (c (apply values args)))))))
って感じで。
0063デフォルトの名無しさん
2012/09/25(火) 19:45:21.55マクロはそんなに万能じゃねーよ
バーヤ
0064デフォルトの名無しさん
2012/09/25(火) 20:18:13.93Schemerにはあまり馴染みのない機能だと思うけど。
0065デフォルトの名無しさん
2012/09/25(火) 20:23:19.77evalに組み込まれてるマクロ機能か
readに組み込まれてるマクロ機能かの違いって事?
0066はちみつ餃子 ◆8X2XSCHEME
2012/09/25(火) 20:33:15.57実行時にできるほどんとのことはマクロでも出来るんだよ。
>>64
いや、私が考えてたのはこんな感じのマクロ
(define-syntax file->string-literal
(lambda(stx)
(syntax-case stx ()
((_ filename)
(string? (syntax->datum #'filename))
(call-with-input-file (syntax->datum #'filename) get-string-all)))))
言葉が足りなかったかも。
テキストっていうかテキストファイルってことね。
0067デフォルトの名無しさん
2012/09/25(火) 23:38:24.26それいいな。
でも結局ファイルを読み込むならマクロ展開時でも実行フェイズでも効率に差なくね?
0068デフォルトの名無しさん
2012/09/25(火) 23:57:49.080069デフォルトの名無しさん
2012/09/26(水) 06:41:35.86読み込みオーバヘッドは無いしファイルそのものさえ無くてもいい。
そのかわり実行時に切り替えることはできないんで、どっちを取るかだが。
0070デフォルトの名無しさん
2012/09/26(水) 12:16:40.810071デフォルトの名無しさん
2012/09/26(水) 12:17:13.58多値は型じゃなくね?
0072デフォルトの名無しさん
2012/09/26(水) 13:00:22.31今見返してみたら「特別なデータ型で実装する必要あるん?」だったわwサーセンw
http://trac.sacrideo.us/wg/wiki/WG1Ballot1Results
> but it is not apparent to me why we need a special data type to implement them.
0074デフォルトの名無しさん
2012/09/26(水) 19:27:17.87http://racket-lang.org/logo.png
http://www.pepsi.co.jp/images/logo.png
0075デフォルトの名無しさん
2012/09/26(水) 19:36:20.520076デフォルトの名無しさん
2012/09/26(水) 22:55:04.08生存フラグ乙www
0077デフォルトの名無しさん
2012/09/26(水) 23:36:18.04大学生が実習で処理系を作れてしまうという枯れた仕様という意味で、オワコン
0078デフォルトの名無しさん
2012/09/26(水) 23:45:29.11現在進行形で仕様改訂真っ最中じゃん。
0079デフォルトの名無しさん
2012/09/26(水) 23:52:29.10予定を繰り上げて
0080デフォルトの名無しさん
2012/09/26(水) 23:56:47.69仕様が枯れている = 大学生でもバグ少なく処理系を実装できる
オワコンだからこそ普及した言語なのに、仕様を複雑にして衰退の道を歩もうとしているのがSchemer
0081はちみつ餃子 ◆8X2XSCHEME
2012/09/27(木) 02:08:03.77曖昧になってた部分を埋めたという感じだろ。
R6RS はライブラリを過剰にしてしまったところはあるけど、
基本的な部分はそれほど複雑さが増してるわけじゃない。
R7RS が samll と large を分けたのは R6RS の反省もあってのことだろうし、
そう極端に複雑になることはないよ。
0082デフォルトの名無しさん
2012/09/27(木) 08:01:00.65大学生すげえなw
0083デフォルトの名無しさん
2012/09/28(金) 01:56:53.030084デフォルトの名無しさん
2012/09/28(金) 03:44:51.01それ何処の大学?
0085デフォルトの名無しさん
2012/09/28(金) 04:00:18.030086デフォルトの名無しさん
2012/09/28(金) 05:23:39.86つまり型であると見做せる
では何故これがファーストクラスではないのかと疑問に思う
0087デフォルトの名無しさん
2012/09/28(金) 07:58:42.99>>86 フラグって? 多値の個数を判定する仕組みがどこかにあるのは確かだけれど、
その実装はいろいろあるよ。それとも>>86は「n引数の関数なんて無い。あれはn個の
要素をもつ1つのタプルを渡してるんだ」っていうタイプ?
0088デフォルトの名無しさん
2012/09/28(金) 08:15:35.99すばらしいことではないか
0089デフォルトの名無しさん
2012/09/28(金) 23:38:27.260090デフォルトの名無しさん
2012/09/29(土) 00:06:18.15「UNIXは枯れたOS」とかで使う「枯れた」だと思う
http://e-words.jp/w/E69EAFE3828CE3819F.html
0091ニート26
2012/09/29(土) 15:57:17.40プログラミング初級ですが、できますかね?ニート26歳高卒。
0092デフォルトの名無しさん
2012/09/29(土) 16:10:38.88とりあえず始めてみたら?
始める前に結果知りたがるからニートになるんだよ。
0094デフォルトの名無しさん
2012/09/29(土) 21:18:45.24キーワード引数とか、機能面ではGaucheの影響が強い印象。
http://code.google.com/p/sagittarius-scheme/
0095はちみつ餃子 ◆8X2XSCHEME
2012/09/30(日) 01:25:12.34(更に大元は Common Lisp だけど。)
Sagittarius は作者自身が業務に使ってるみたいだからね。
実用指向という意味では Gauche と方向性が近いかも。
日常的に使うとなると、筋の良さや整合性よりも、短かく書けたり覚え易かったり、
いざというときのワークアラウンドがある方が大事だったりする場合も有って、
そういう泥臭さを許容する感じが似てると私は思う。
もちろん、筋の悪さに目を瞑りすぎるとカオスになるのでそこらへんの匙加減の上手さが使い勝手を良くしているんだけど、
そういうバランス感覚はセンスというか現場の感覚なのかな。
0096デフォルトの名無しさん
2012/09/30(日) 18:31:41.94コテの由来も気になる。
0097デフォルトの名無しさん
2012/09/30(日) 18:40:10.92俺とお前しかいない
だとしたら?
0098デフォルトの名無しさん
2012/09/30(日) 19:00:07.720099デフォルトの名無しさん
2012/09/30(日) 22:32:34.59名言だな
0100デフォルトの名無しさん
2012/10/01(月) 01:15:42.17行動はありとあらゆる手段で情報を収集した後にするべき
0101デフォルトの名無しさん
2012/10/01(月) 01:20:25.170102デフォルトの名無しさん
2012/10/01(月) 08:19:47.51LISPとかはその後だよ
いきなりLISPなんかやり始めたら
基地外ニートに昇格するぞ
0103デフォルトの名無しさん
2012/10/01(月) 20:27:08.700104デフォルトの名無しさん
2012/10/02(火) 02:15:06.98コンピュータのレジスタとかの構造とコンピュータ言語を知らないバカに何か言語を教えろと言われたら、迷わずSchemeを教える
0105デフォルトの名無しさん
2012/10/02(火) 02:19:01.100106デフォルトの名無しさん
2012/10/02(火) 02:29:33.81見上げたものだ。
0107デフォルトの名無しさん
2012/10/02(火) 02:36:57.05Lispしかできない馬鹿にありがちな発想ですな
0108デフォルトの名無しさん
2012/10/03(水) 00:43:28.900109デフォルトの名無しさん
2012/10/03(水) 01:23:03.110110デフォルトの名無しさん
2012/10/03(水) 07:10:45.07従わせたいのは現実なり問題なりであって、
ハードはそのための道具で味方だろう。
ハードを改良することを「従わせる」と言うならその通り。
でなけりゃ、いまのハードにできる範囲で最善を
尽くすよう「合わせる」もんだ。
たとえば、車やバイクの上手い人はそう言う。
0111デフォルトの名無しさん
2012/10/03(水) 08:14:48.80人間はコンピューターに。
コンピューターは人間に。
0112デフォルトの名無しさん
2012/10/03(水) 10:15:15.16で、その理論と現実問題との接点が見えづらい、っていう。
0113デフォルトの名無しさん
2012/10/03(水) 11:52:22.66それを理解することはプログラマにとってのみ現実であって、
プログラムを使う人の現実ではないだろ。
初心者にとってそれをわかれというのも酷な話じゃないか。
0114デフォルトの名無しさん
2012/10/03(水) 15:10:21.69それは100%頭おかしい。
0115デフォルトの名無しさん
2012/10/03(水) 17:17:42.940116デフォルトの名無しさん
2012/10/03(水) 17:39:28.100117デフォルトの名無しさん
2012/10/03(水) 21:07:29.160118はちみつ餃子 ◆8X2XSCHEME
2012/10/03(水) 21:35:53.190119デフォルトの名無しさん
2012/10/03(水) 23:39:49.13大差ないと思うが…
インデントさえきちんとしてれば
()とかもあんまり気にならん
Schemeとかどこにでも実装されるから
覚えるとこれほど武器になりそうな言語ない気がする
CommonLisp派だけど
0120デフォルトの名無しさん
2012/10/04(木) 00:53:06.69LISP以上に非人間的な道具「ソロバン」
だが人がソロバンに合わせることで計算力があがってしまう。
非人間的だってのはいけない事かね。
0121デフォルトの名無しさん
2012/10/04(木) 02:14:59.900122デフォルトの名無しさん
2012/10/04(木) 13:27:05.200123デフォルトの名無しさん
2012/10/04(木) 14:07:37.04ネットの向こうで応答しているのが、人間か機械かは原理的に判別できない
0124デフォルトの名無しさん
2012/10/04(木) 15:21:31.330125デフォルトの名無しさん
2012/10/04(木) 16:05:58.87実用にはならないのでは?
0126デフォルトの名無しさん
2012/10/04(木) 16:20:03.310127デフォルトの名無しさん
2012/10/04(木) 16:30:26.480128デフォルトの名無しさん
2012/10/04(木) 17:42:29.21ネイティブスレッドひとつとっても、まともにサポートされたの、今年に出た9.0からだぞ。
他の処理系の方が得意な分野だってある。
0129はちみつ餃子 ◆8X2XSCHEME
2012/10/04(木) 19:26:36.75そう考えると業務用としてはそんなに高価ってわけでもないんじゃねーの。
0130デフォルトの名無しさん
2012/10/04(木) 22:59:03.440131デフォルトの名無しさん
2012/10/05(金) 01:21:42.80柔軟性が高いのが裏目に出てる
0132デフォルトの名無しさん
2012/10/05(金) 01:25:09.600133デフォルトの名無しさん
2012/10/05(金) 02:08:48.94・Webサーバ系ではけっこう使ってる
・大学で開発されたシステムを企業に移植するときに使わざるをえないときがある
・勘違いした会社がライセンス買った場合は当然使う
0134デフォルトの名無しさん
2012/10/05(金) 08:33:51.900135デフォルトの名無しさん
2012/10/06(土) 03:47:11.840136デフォルトの名無しさん
2012/10/09(火) 16:26:08.930137デフォルトの名無しさん
2012/10/09(火) 16:28:55.54JavaScriptでいいじゃん
0138デフォルトの名無しさん
2012/10/09(火) 18:15:56.290139デフォルトの名無しさん
2012/10/09(火) 18:23:11.190140デフォルトの名無しさん
2012/10/09(火) 19:35:46.18LISPは構造が単純なこと以外には特にメリットは見えないな
複雑にしてどうすんだと思う
例えば最低限の処理系が数百〜数千行だから
数時間から数日あれば実装できる
しかしそういう用途では選択肢の中にGC付き言語はなかったりするが
0141デフォルトの名無しさん
2012/10/09(火) 20:15:09.88http://www.newlisp.org/
C 系の人は単純さを極めた PicoLisp や JavaScript 的名前空間の newLISP とかから入ると
やがては Scheme の凄みも分かるようになるかも。ちなみに newLISP は Docs にマニュアル
和訳あり。
0142SCHEME餃子 ◆8X2XSCHEME
2012/10/09(火) 20:22:04.22前提がよくわかんない。 組込み言語として使うみたいなことを考えてるのかな?
Lisp はピンキリなのでそのあたりがはっきりしないと話が噛み合わなかったりするよ。
0143デフォルトの名無しさん
2012/10/10(水) 06:05:27.78まず、ubuntu用の.shってのがよく分からなかったからunix用の.tgzを展開してsite�lisp下においたんだけど、mzscheme.exeが見当たらないしpathの通し方もイマイチわからない
0144デフォルトの名無しさん
2012/10/10(水) 17:29:26.34あと、パス自体はどんなものか分かってる? 通し方が分からないだけ?
ついでにEmacsの使い方は知ってると思っていいの?
0145デフォルトの名無しさん
2012/10/10(水) 17:38:41.75IDEの付いたJavaかC#でもやれ
0146デフォルトの名無しさん
2012/10/10(水) 17:45:25.150147SCHEME餃子 ◆8X2XSCHEME
2012/10/10(水) 20:26:30.70仮に Windows で C:\Program Files\Racket にインストールしたと仮定するよ。
「コントロールパネル」から「システムの詳細設定」を選んで「詳細設定」タブをクリック。
そこに「環境設定」ってボタンがあるから環境変数 path の値に C:\Program Files\Racket を追加。
それから emacs の設定だけど、バージョンによって設定ファイルの場所が違ったりするので設定ファイルの場所は自分で探して。
大抵は .emacs とか dot.emacs とか init.el とかいうファイル名で探せば見付かると思う。
そんでその設定ファイルに↓を追加。
(setq scheme-program-name "racket.exe -i")
emacs に設定するときに絶対パスを指定すれば必ずしもパスを通さなくてもいいんだけど、
空白を含むパスをちゃんと解釈してくれなくておかしなことになるので環境変数をセットしといた方が簡単。
0148デフォルトの名無しさん
2012/10/10(水) 22:14:18.28男ならメモ帳だろ…
0149デフォルトの名無しさん
2012/10/10(水) 23:09:36.18http://docs.racket-lang.org/ts-guide/
DrRacket上で固有の情報も確認出来るんだね。すごい。
ClojureでTyped Racketを参考にして実装してみてるものがあるけど、ツール類まで用意するのは大変そうだ。
使い方をぱっと見た感じ、型の指定がQi IIみたいに簡潔に書ければ良さげなんだけど、使い方がちょっと手間かな。
0150143
2012/10/11(木) 09:16:50.35パス自体がどんなものか、正確にはわからないがその前に
とりあえずRacket.exeが見つからない。Ubuntu用の.shファイルの扱いが分からなかったからUnix用の.tgzファイルを展開したのだが
0151143
2012/10/11(木) 09:17:46.280152デフォルトの名無しさん
2012/10/11(木) 11:23:01.40そのレベルならWindowsでracket使う方がいいと思うよ。
0153SCHEME餃子 ◆8X2XSCHEME
2012/10/11(木) 13:09:44.77Unix source って書いてあるやつはソースコードが入ってるだけだから、
その中には実行バイナリは無いよ。 さすがにこれは >>152 と同意見だわ。
sh が何か、ソースコードが何かくらいはググって調べてね。
0154デフォルトの名無しさん
2012/10/11(木) 13:31:34.78まずその参考にしてるサイトだか本だか知らんが、最初にそれを投げ捨てる。
次に、そのUbuntu用の.shファイルは「Self-extracting shell script」と書いてある通り、
自己展開するシェルスクリプトだから、ターミナルなどからそのまま実行する。
そうすると、色々とメッセージが出てくるからそれを読みながら指示に従う。それだけ。
メッセージは英語なので英語を読む気がないなら諦める。意味が理解できなくても厳しい。
見てるとLinuxにもEmacsにも凄い不慣れな印象を受けるんだけど、
そんな状況で新しい処理系を使おうとしても、ありとあらゆることが意味分かんないと思うよ。
普段Windows使ってるなら最初のうちは素直にWindowsでRacket使えば良いじゃん。
最終的にLinuxでやりたいにしても、Linuxに慣れてから改めてLinuxでRacket使えば良いし、
Emacsもそう。Emacsに慣れたら改めてRacketをEmacsから使えば良いよ。
0155デフォルトの名無しさん
2012/10/11(木) 13:58:34.98これあったらcall/ccいらない
0156デフォルトの名無しさん
2012/10/11(木) 14:38:00.080157はちみつ餃子 ◆8X2XSCHEME
2012/10/11(木) 15:02:23.31その手順で学ぶのは良いと思う。
Racket は統合環境が有って初心者に使い易い選択だと思うし。
0158143
2012/10/11(木) 15:03:47.500159デフォルトの名無しさん
2012/10/11(木) 15:56:26.11手伝わせるんだ。言語はもちろんLisp。
0160デフォルトの名無しさん
2012/10/11(木) 16:29:05.22保存するファイル形式はやっぱりS式がいいんでしょうか
(データベース
(品名1 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
(品名2 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
(品名3 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
)
こうしてくと、値段が変動したりした時に混乱するのですが、
同じ品名でも値段が違ったら分けた方がいいんですかね
0161デフォルトの名無しさん
2012/10/11(木) 16:31:08.36(品名 使った日時 使った数 何に使ったか)
を別にするとよさそうですね
うん
0162デフォルトの名無しさん
2012/10/11(木) 16:34:47.01(品名1 値段 購入日時 購入場所 購入数)
(品名2 値段 購入日時 購入場所 購入数)
(品名3 値段 購入日時 購入場所 購入数)
)
(消費DB
(品名1 使った日時 使った数 用途)
(品名2 使った日時 使った数 用途)
(品名3 使った日時 使った数 用途)
)
これで購入DBから品名で検索して消費DBの使った数から引くと
在庫がいくつあるか判りますね
これでいいかな
0163デフォルトの名無しさん
2012/10/11(木) 16:56:15.25日付に型なんてないから、32bit値でいいかな?
文字列のがいいかな?
日付と時刻は項目として分ける意味がないから文字列だな
"12/10/11 16:49:00"
"121011 未明"
"今日"
"忘れた"
とかありえるし
あ、使ったのを在庫に戻した場合どうすればいいんだろう?
書き換えるのは論外だから、消費DBに
(品名 戻した日時 -戻した数(負数) "戻した")
を追加するしかないか
0164はちみつ餃子 ◆8X2XSCHEME
2012/10/11(木) 17:56:05.43でも、規模が大きくなってデータベース的なことをするならそれに特化して進化してきたシステム
(リレーショナルデータベースや key value store) を使う方が効率的。
柔軟性こそ Lisp の本領なので、
今の段階ではそんなこと気にせずとりあえず思い付いたように書いていけばいいんじゃないの。
問題があればそのときに修正できるだけの柔軟性があるのが Lisp ってもんだろ。
0165デフォルトの名無しさん
2012/10/11(木) 20:28:41.80会社で使うならともかく、
個人でデータベースなんか使うと、
存在自体忘れたり、面倒になって使わなくなるので、
なるべく小規模で、どこでも見れるようにテキストベースにしたく、
そうなるとLISPかなーと思いました
0166デフォルトの名無しさん
2012/10/11(木) 20:44:07.37ム板よりデータベース関係の板の方が本職が居て良いと思うぞ。
>>160-163とか思いっきりそういう話だし。
0167デフォルトの名無しさん
2012/10/11(木) 21:23:25.81これ最強
0168はちみつ餃子 ◆8X2XSCHEME
2012/10/11(木) 21:44:03.370169デフォルトの名無しさん
2012/10/12(金) 15:55:32.89こわい
0170デフォルトの名無しさん
2012/10/19(金) 14:53:47.960171デフォルトの名無しさん
2012/10/19(金) 16:20:00.340172デフォルトの名無しさん
2012/10/19(金) 16:52:50.94末尾再帰最適化や継続が不完全な実装も多 (特に C や Java とのやり取りが主のもの)。
だから、静的スコープで単一名前空間なら Scheme、でいいんじゃない?
0173デフォルトの名無しさん
2012/10/19(金) 17:06:43.71Schmiz
0174デフォルトの名無しさん
2012/10/19(金) 17:20:33.570175はちみつ餃子 ◆8X2XSCHEME
2012/10/19(金) 17:26:24.95マクロはともかく (まだ議論がぶれているので) として、
末尾再帰最適化や継続は Scheme の顔なので、
それなしで Scheme を名乗るのはちょっと微妙だと思うなぁ。
あえて Scheme を名乗らなくても、
(部分的に Scheme 風の) 新しい Lisp 方言のひとつってことでいいんじゃね。
0177デフォルトの名無しさん
2012/10/19(金) 21:33:26.33指しているよね。不思議だ。
0178デフォルトの名無しさん
2012/10/19(金) 22:45:00.22これも不思議だな
0179デフォルトの名無しさん
2012/10/19(金) 22:49:08.910180デフォルトの名無しさん
2012/10/19(金) 23:52:10.830181デフォルトの名無しさん
2012/10/20(土) 02:59:43.44デキがショボければShameと呼ばれるのは間違いない。
0182デフォルトの名無しさん
2012/10/20(土) 21:37:56.940183デフォルトの名無しさん
2012/10/20(土) 21:50:03.480184デフォルトの名無しさん
2012/10/20(土) 22:44:33.710185デフォルトの名無しさん
2012/10/20(土) 23:31:44.31CLはsbclとかなんか味気ない。
0186デフォルトの名無しさん
2012/10/20(土) 23:36:07.19SCHEYAKI すき焼きスキーム
0187デフォルトの名無しさん
2012/10/20(土) 23:44:37.110188デフォルトの名無しさん
2012/10/21(日) 22:23:53.06RacketがClojureみたいに総合的な開発者向けイベントに参加して広報してた。
0189デフォルトの名無しさん
2012/10/24(水) 23:53:10.42(チック姉さん
というのを思いついたので誰か薄い本をはよ
0190デフォルトの名無しさん
2012/10/25(木) 00:01:38.280191デフォルトの名無しさん
2012/10/31(水) 15:05:08.07問わない)を具現化した・具現化しやすい環境って
なんだろう。生活の中でケータイの電卓以上のこと
がしたいし、計算履歴を残せるとうれしい。入力支
援があるとなお良い。
数年後、タッチパネルにUbuntuを入れられる世の中
になるなら開発せずに待つんだけど。
0192デフォルトの名無しさん
2012/10/31(水) 23:34:07.45http://www.sony.jp/CorporateCruise/Press/200901/09-0108/
0193デフォルトの名無しさん
2012/11/02(金) 01:56:43.430194デフォルトの名無しさん
2012/11/02(金) 22:17:34.710195デフォルトの名無しさん
2012/11/02(金) 23:14:31.74clojure もJVMの都合で末尾最適化を仕様に入れなかったという話だし
0196デフォルトの名無しさん
2012/11/04(日) 15:25:21.550197デフォルトの名無しさん
2012/11/04(日) 21:29:20.88こういうのを github に上げる奴は見てもらう価値があると思ってやってんの?
それとも単なるバックアップ先として使ってるだけ?
0198デフォルトの名無しさん
2012/11/05(月) 09:44:24.190199デフォルトの名無しさん
2012/11/05(月) 15:54:27.02http://www.google.com/cse/home?cx=013299269060639926749:0zjwws1-vxu&hl=ja
「scheme -sicp」みたいな感じでこの辺使ってみたらどうよ?
0200191
2012/11/05(月) 18:14:56.02>>193
もうすぐ2013年だし、2009年1月は古くない?
http://kakaku.com/pc/note-pc/ma_0/s5=-10/
ミニノートって言うんだっけ?いわゆるEeepc系ってタブレットに変わっちゃったんだね。
どこのメーカーも作っていないようだ。
http://kakaku.com/pc/pda/ma_0/s1=1/s2=-5/
一万円切ったほぼ最新Androidも時間の問題で発売されそうだから、Androidで開発して
おくのが一番の近道なのかな。
>>193
誰か作っていそうだけど、マイコンで作るのも楽しそうだね。
ネットに繋げないとして入力デバイスは何がいいんだろ。
0201デフォルトの名無しさん
2012/11/06(火) 00:21:13.62http://android.allappli.net/d_jp.gr.java_conf.hilite.schemepad.html
0202デフォルトの名無しさん
2012/11/06(火) 19:33:07.28racketが一番いいのはドキュメントなのに
0204デフォルトの名無しさん
2012/11/18(日) 08:40:41.950205デフォルトの名無しさん
2012/11/18(日) 14:12:07.73標準出力にこう出力されるものです
; real 0.000
; user 0.000
; sys 0.000
(with-output-to-string (lambda () (time (list 1 2))))のように
with-output-to-stringを使うと空文字が返ってきます
0206デフォルトの名無しさん
2012/11/18(日) 14:49:29.24ここで聞いた方が早いかも
0207はちみつ餃子 ◆8X2XSCHEME
2012/11/18(日) 15:42:00.08time の結果は標準出力ではなく標準エラー出力に表示することになっているので、
標準エラー出力を捕えないといけない。
こんな感じかな。
(call-with-output-string
(cut with-error-to-port <>
(cut time (list 1 2))))
0208はちみつ餃子 ◆8X2XSCHEME
2012/11/18(日) 15:48:51.72(define (with-error-to-string thunk)
(call-with-output-string
(cut with-error-to-port <> thunk)))
(with-error-to-string (lambda()(time (list 1 2))))
0209デフォルトの名無しさん
2012/11/18(日) 19:31:40.33マニュアルのgauche.timeのところ見てみ。
0210デフォルトの名無しさん
2012/11/19(月) 02:18:32.99ありがとうございます。
標準エラー出力が出力先だということを見落としていたのはまずかったです。
勉強になりました。数値を取得できるのは意外でした。いじってみます。
0211デフォルトの名無しさん
2012/12/03(月) 06:56:39.61(0.9999999999999999 1.0999999999999999 1.2)
これ理解できないのですが
誰かご説明お願いいたします。
0212デフォルトの名無しさん
2012/12/03(月) 08:23:43.55逆順で作る理由はリスト作るの簡単だからかな。
0213デフォルトの名無しさん
2012/12/03(月) 08:27:17.09(unless (and (integer? count) (>= count 0))
(error "count must be nonnegative integer: " count))
(if (and (exact? start) (exact? step))
;; we allow inexact integer as 'count', for the consistency of
;; giota and liota in which we can also accept +inf.0 as count.
(let1 count (exact count)
(do ([c count (- c 1)]
[v (+ start (* (- count 1) step)) (- v step)]
[r '() (cons v r)])
[(<= c 0) r]))
;; for inexact numbers, we use multiplication to avoid error accumulation.
(do ([c count (- c 1)]
[r '() (cons (+ start (* (- c 1) step)) r)])
[(<= c 0) r])))
なるほど、確かに。
0214デフォルトの名無しさん
2012/12/03(月) 14:31:12.96ありがとうございました。
0215デフォルトの名無しさん
2012/12/06(木) 12:36:06.37Welcome to Racket v5.2.1.
> (require srfi/1)
> (iota 3 1 0.1)
'(1 1.1 1.2)
CL-USER> (loop :for i :from 1 :to 1.2 by 0.1 collect i) ;; cl
(1 1.1 1.2)
ベタなネタだけどLISPのメイン処理系(複数可)、サブ処理系、ほとんど使わないけど
入れている処理系のアンケートを年2回(コミット数を維持できるなら数回やっても可)
やらない?
IPバレたくない人もいるだろうからプロキシ機能ありで項目ごとにコメントできて、
CUIで動くプログラムを誰か書いて。忙しい人もいるだろうから以前の投稿内容は維持
されて、投稿期間に実行すればいいだけ。プログラム作成者が恣意的にデータをいじれ
ないように厳密なスキームを作ってプログラミングを書いて欲しい。プロキシ変更
などによる連続投稿はありを前提として規制できるならメールアドレス提供、ID、
パスワード発行等の労力負担程度まで許容して投稿側の便利さを追求して欲しいと思う。
プログラム作成者とサーバ提供者を分離した方がプログラム作成者の敷居は下がるのかな。
参考 ttps://www.archlinux.de/?page=PackageStatistics
スルーされそうなので、超亀レスでもいいのでレスください。私はサクッと具現化する
能力はないのでプログラム作成者が現れずにレスの状況によっては私が作ることを検討
しないといけないのかもしれない。
0216デフォルトの名無しさん
2012/12/06(木) 13:07:18.640217デフォルトの名無しさん
2012/12/06(木) 13:09:11.05しかも他人に作らせるつもり満々とかなにそれこわい。
0218デフォルトの名無しさん
2012/12/06(木) 13:35:31.81こわい
0219デフォルトの名無しさん
2012/12/06(木) 14:01:24.450220デフォルトの名無しさん
2012/12/06(木) 22:00:49.60はやってない しょりけい
そんなの LISP じたいの マイナーさ かんがえたら ごさ
0221デフォルトの名無しさん
2012/12/07(金) 00:30:31.09ありがとうございました。
0222デフォルトの名無しさん
2012/12/09(日) 13:16:30.41applicableとかですかね
0223デフォルトの名無しさん
2012/12/09(日) 14:04:53.390224デフォルトの名無しさん
2012/12/09(日) 15:21:45.000225はちみつ餃子 ◆8X2XSCHEME
2012/12/09(日) 15:23:03.08Lisp 全般はわからないけど Scheme の用語の中には相当する言葉はないと思う。
apply という言葉もマクロには使わないし。 (マクロ展開の実体を use という)
operator もマクロに使う言葉じゃないなぁ。
見た目に同じでもプログラム的な作用としては違うから、どうしてそういう一般化した用語が欲しいのか気になる。
強いて妥当な言葉をひねり出すなら「式の先頭」くらいじゃね?
0227デフォルトの名無しさん
2012/12/09(日) 15:31:07.240228デフォルトの名無しさん
2012/12/10(月) 10:09:27.75CL的にはoperatorでOK。
www.lispworks.com/documentation/lw50/CLHS/Body/26_glo_o.htm
>>226
gaucheならオブジェクトだしCLでもオブジェクトだし。
0229デフォルトの名無しさん
2012/12/22(土) 13:59:08.93'(1 2 3) == '(1 . (2 . (3 . ()))) == (cons 1 (cons 2 (cons 3 '())))
どれがどれのシンタックスシュガーなのかサッパリ分からん
0230229
2012/12/22(土) 14:06:09.07'(1 . ((). (2 . ()))) これが (1 () 2) こんな感じで通っちゃうし
(length '(1 . ((). (2 . ())))) これは 3 になるし、終端判定に()は利用されてないんじゃね?
だったら終端に()付ける必要なくね?って思っちゃう
0231デフォルトの名無しさん
2012/12/22(土) 14:33:02.55初めてだと、listが見た目分かりやすいような気がする
(list 1 2 3)
0232デフォルトの名無しさん
2012/12/22(土) 14:34:22.09コンスセルはテキストに載ってないか?
コンスセルを書いて、よく考えて見ろ。理解が早まる。
0233デフォルトの名無しさん
2012/12/22(土) 14:36:21.30http://www.geocities.jp/m_hiroi/func/abcscm02.html
0235229
2012/12/22(土) 15:17:11.00ありがとう。lengthの実装見てなんとなく理解できた。
()が要素にあったらそこを終端と判断する、ってわけじゃなく、cdrの戻り値が()であれば終端と判断する、ってことか
と、理解してからコンスセルの形を見れば一目瞭然だったw
んー、ドット対の利用価値がイマイチ分からんけど(consで説明すりゃいいじゃん……)もう少し読み進めてみます
0236デフォルトの名無しさん
2012/12/22(土) 15:17:57.98名無しに戻ります
0237はちみつ餃子 ◆8X2XSCHEME
2012/12/22(土) 15:45:06.32ドット対はコンスセルの外部表現で、cons はコンスセルを生成する手続という違いがある。
文字列で言えば "ab" と (string #\a #\b) の違いと説明すればわかるかな?
0238デフォルトの名無しさん
2012/12/22(土) 20:11:21.84リストで実用的なプログラムをいっぱい書いてから戻って考えた方が
理解が速いんじゃないの。
cons回りにかけた10時間が意味があったのかよくわからん。
SICPはいつ読めばいいのかね?
0239デフォルトの名無しさん
2012/12/22(土) 20:54:14.44ドット対は関数の可変長引数が楽になる
0240デフォルトの名無しさん
2012/12/23(日) 11:30:21.020241デフォルトの名無しさん
2012/12/23(日) 11:54:07.780242はちみつ餃子 ◆8X2XSCHEME
2012/12/23(日) 12:44:48.06エラーにする処理系はまだいいけど、黙って不可解な動作をする場合もあるから要注意。
Gauche だとリテラルが一定という期待のもとに最適化する場合があるみたい。
http://blog.practical-scheme.net/shiro/20100106-modifying-literals
R6RS だと例外を投げるように明記されてる。
http://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3a%E7%BF%BB%E8%A8%B3%3aR6RS%3a11.4.1%20Quotation
http://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3a%E7%BF%BB%E8%A8%B3%3aR6RS%3a5.10%20Storage%20model
0243デフォルトの名無しさん
2012/12/23(日) 13:42:12.440244デフォルトの名無しさん
2012/12/23(日) 13:48:18.26http://www.faqs.org/faqs/lisp-faq/part3/section-14.html
0245デフォルトの名無しさん
2012/12/23(日) 19:11:24.370246デフォルトの名無しさん
2012/12/23(日) 20:26:15.95わかっててツケにしているんだからマクロを沢山書くようになってハマってから
ツケが回ったと思ってその時に考えればいいんじゃないの?
その頃にはSchemeの語彙も増えているだろうし、開発環境も整っていて解析も
しやすいでしょ。中学校の連立方程式を振り回して難しい問題を解いている
イメージだ。微分積分で楽な解法があるんじゃないの。
0247はちみつ餃子 ◆8X2XSCHEME
2012/12/23(日) 20:37:54.88言語の機能は相互に関連して成り立っているので、
簡単な方から難しい方へ学んでいけばいいというわけじゃない。
どうせ行きつ戻りつするのだから、
意義をわからずに学ぶよりは実際につっかえるところまで一旦先に進むのも有りだと思う。
0248デフォルトの名無しさん
2012/12/23(日) 21:31:18.420249デフォルトの名無しさん
2012/12/23(日) 21:49:15.78え? Series? 僕もさっぱり理解できません。
0250デフォルトの名無しさん
2012/12/23(日) 22:09:34.22読みやすくするために展開するってことは、はじめからマクロにしなけりゃいいんじゃ…
0251デフォルトの名無しさん
2012/12/23(日) 22:33:30.28マジレスすると、macroexpandとそれに類する機能の話。
マクロのデバッグには必須だと思う。知らなかったら便利だから使ってみて。
0252デフォルトの名無しさん
2012/12/23(日) 22:52:15.39結果、似た構造を持つマクロが大量生産される
定期的にマクロだけあつめてリファクタリングしたい
0253デフォルトの名無しさん
2012/12/24(月) 00:21:22.08意味論の世界へようこそ。
0254デフォルトの名無しさん
2012/12/27(木) 02:14:26.09そもそもハッカーはどこでどういうふうにLISPを使っているのでしょうか
0255デフォルトの名無しさん
2012/12/27(木) 04:41:03.350256デフォルトの名無しさん
2012/12/27(木) 11:28:03.97LISP は、それをモノにしたときのすばらしい悟り体験のために勉強しましょう。
この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。
たとえ、実際には LISP そのものをあまり使わなくても。
0257デフォルトの名無しさん
2012/12/27(木) 20:23:39.58Common Lispは実用向けの泥玉だしな。
そのURLと一緒にこっちも掲載しておかないとフェアじゃないよね
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3AScheme%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB10
>SchemeとかLispとかいうカッコだらけですごくわかりにくい言語があることは知っているが、 最強とか主張する信者がいるらしいのでなるべく関わらないようにしている。
> 最強とか主張する信者がいるらしいので
> 最強とか主張する信者がいるらしいので
> 最強とか主張する信者がいるらしいので
> 最強とか主張する信者がいるらしいので
0259デフォルトの名無しさん
2012/12/28(金) 03:17:18.030260デフォルトの名無しさん
2012/12/28(金) 11:42:54.30空想みたいな話にしているけど、少ない予算で殺し合いってできるでしょ。
コンピュータ囲碁の世界はまだまだプロに足元も及ばない実力と言われている
からそれで言語競争するのも良いかもね。言語の機能にもよるけど対局中プロ
グラミングの内容を書き換えても良い。プロの世界は通常1日かけてやるから、
プログラマのゲーム参加で精神余裕を持たせるためにもそのくらいの時間の
物差しでやらせられる環境になると良いかも。
チェス、将棋、囲碁の世界は計算スピードが物言う世界でC一択なのか。
あとはルールがシンプルな新しいボードゲームを考えて、n日後に大会開催。
ゲーム中のプログラミングの内容の書き換えはありで戦わせるとか。
0261はちみつ餃子 ◆8X2XSCHEME
2012/12/28(金) 12:21:34.50(現時点では実際にそうなっているというだけでしっかりとした理論的な裏付けがあるわけではない。)
何をどうすりゃいいのかわからない状況での試行錯誤がし易いのが LISP の強みなので
>>260 の条件なら LISP は強いかもね。
0262デフォルトの名無しさん
2012/12/28(金) 14:00:07.03加えるとして。
Cプログラマの人口が一番多いのにCプログラマのエントリーがゼロでしたというのは自分の
主観が入り過ぎているのかな。
人間同士のトーナメント方式だと強くても敗退することが多いから甲子園の1試合で敗退が
決まる方式は実際の強さの優劣を表すわけではないみたいだね。人間だから精神面や体調の
問題が起因していると考えられる。時間的な制約もあるからいくつかの改良トーナメント方
式で敗者復活を取り入れてるみたい。
あと2人ゲームなら先手・後手、複数人ゲームなら回ってくる順番で有利不利があるならそれも
工夫しないといけない。
それを踏まえて、言語同士だとシンプルなトーナメント方式の結果で文句が上がってこない
のか、改良トーナメント方式で大会ゲーム数をある程度抑えても文句が言えないのか。
2人ゲームだと先手・後手と2回やる必要があるケースもありそうだし、そのケースだと勝敗が
決まらなければもう1ゲームやることになってどっちが有利な先手後手を持つかって話になって、
疑義が取れない。色々と考慮すると大会ゲーム数が肥大化していく。
新しいゲームのルールの方で大会ゲーム数を抑える仕組みにすればいいんだろうけど、それが
描けるのか、自身では想像つかないなあ。ゲーム選定者は大変だな。
それこそゲームの有利不利を解析するのはプロトタイプの進化をさせやすいLISPが有利だね。
新しいゲームで殺し合うという話になっても、ゲームのプラットフォームを考える人も骨を
折らないといけないんだよなあ。
はは。こういう締めになるとは思わなかった。
0263デフォルトの名無しさん
2012/12/28(金) 22:06:26.170264デフォルトの名無しさん
2012/12/28(金) 23:22:45.330265デフォルトの名無しさん
2012/12/29(土) 23:23:02.73「試合自体が難しいんじゃね? 色々あるし。」
0266デフォルトの名無しさん
2012/12/30(日) 00:07:50.11> チェス、将棋、囲碁の世界は計算スピードが物言う世界でC一択なのか。
言語は何でもいい, 強力な盤面評価技法を持った奴が勝ち
盤面評価技法次第で刈り取れる枝の数が大幅に増減する
それでも, 計算量は必要だけど
0267デフォルトの名無しさん
2012/12/30(日) 12:36:53.280268デフォルトの名無しさん
2012/12/30(日) 13:21:28.920269デフォルトの名無しさん
2012/12/30(日) 13:50:04.15人間はあと10万年で絶滅するから
>強力な盤面評価技法
それほしいですねえ。いや、自分のために。
二桁級からなかなか腕があがらないんだ、今日もウッテガエシを食らってしまったorz
0271デフォルトの名無しさん
2012/12/30(日) 18:34:31.760272デフォルトの名無しさん
2012/12/30(日) 18:51:31.190273デフォルトの名無しさん
2012/12/30(日) 19:49:24.430274デフォルトの名無しさん
2012/12/30(日) 20:20:13.320275デフォルトの名無しさん
2013/01/03(木) 08:24:30.05http://programmers.stackexchange.com/questions/41045/scheme-vs-common-lisp-which-characteristics-made-a-difference-in-your-project
0276デフォルトの名無しさん
2013/01/03(木) 09:41:42.04「どの言語つかってるの?」「Haskellです」「わー!すごーい!」「OCamlです」「わー!すごーい!」
「Agdaです」「わー!すごーい!」
「Lispしてます」「あ…そっち系…」
_人人人人人人人_
> あ…そっち系…<
 ̄Y^Y^Y^Y^Y^Y^Y
0277デフォルトの名無しさん
2013/01/03(木) 11:59:54.49レベル2 レベル1を馬鹿にする
レベル3 レベル2を馬鹿にする
:
0278デフォルトの名無しさん
2013/01/03(木) 12:33:43.830279デフォルトの名無しさん
2013/01/03(木) 15:14:40.34ワロタw
0280デフォルトの名無しさん
2013/01/03(木) 16:58:54.910281デフォルトの名無しさん
2013/01/09(水) 20:11:32.42replサイコー。replのない言語は滅ぶべし。
0282デフォルトの名無しさん
2013/01/09(水) 20:14:43.870283デフォルトの名無しさん
2013/01/09(水) 22:31:39.27ずっと自分の中にあったもやもやを解消した気がする
当たり前かもしれないことをわすれてただけなんだけどさ
0284デフォルトの名無しさん
2013/01/09(水) 23:42:24.660285デフォルトの名無しさん
2013/01/10(木) 00:12:53.38でも、リスト処理言語にしては () の扱いがダサいよ。
0286デフォルトの名無しさん
2013/01/10(木) 00:47:59.99nil や t というシンボルがダサいから変えたかった、というのはわかるけど…。
(car ()) や (cdr ()) が () 返してくれてもいいのになぁ。
0287デフォルトの名無しさん
2013/01/10(木) 00:55:17.520288デフォルトの名無しさん
2013/01/10(木) 01:31:40.39()も分かる
しかし、nil や null は本当に必要だったのだろうか?
0289デフォルトの名無しさん
2013/01/10(木) 01:41:49.40つまりコールバックがあるCも関数型言語
0290デフォルトの名無しさん
2013/01/10(木) 01:41:55.050291デフォルトの名無しさん
2013/01/10(木) 01:57:57.44lispはライブラリとexeファイルが欲しいときしか使わなくなってしまった
0292デフォルトの名無しさん
2013/01/10(木) 02:24:29.18ライブラリを求めてClikiを漁っていると、Gauche使ったほうが楽な気がしてしょうがにあ。
0293デフォルトの名無しさん
2013/01/10(木) 03:59:02.110294デフォルトの名無しさん
2013/01/10(木) 05:01:35.85そりゃGaucheはその分のコストを開発者が払ってるわけだし。
R7RS以降はSchemeもCommon Lispと同じ道に突き進むことになると思う。
Common Lispでの#+や#-の代わりにcond-expand使うだけで。
CLikiやQuicklispに相当する物もそのうち誰かが作るんだろう。
0295はちみつ餃子 ◆8X2XSCHEME
2013/01/10(木) 09:39:39.57C がプリミティブに扱えるのは関数じゃなくて関数ポインタ。
C++ ならなんとか関数型に数えられるかもしれない。
0296デフォルトの名無しさん
2013/01/10(木) 10:23:25.25あれこれ突っ込みすぎでとっ散らかっている部分もあるけど。
0297デフォルトの名無しさん
2013/01/10(木) 12:06:13.64C++やってる連中は頭がおかしい
0298デフォルトの名無しさん
2013/01/10(木) 12:35:55.340299はちみつ餃子 ◆8X2XSCHEME
2013/01/10(木) 14:00:24.78そのとっ散らかってるのがかなりマイナスだと思うなぁ。
Common Lisp ってモジュール化の仕組みはある (規格が曖昧っぽいけど)
のに標準ライブラリがさっぱり整理されてないし命名規則も一貫してないしでわけわかんね。
0300デフォルトの名無しさん
2013/01/10(木) 15:11:47.35まぁ、歴史的経緯ってやつだしね。
Common Lisp自体が先行するメジャーだった処理系で堆積した地層を
インタリーブして再度重ね直したようなもんだしな。
そもそも言語と環境がごった煮状態当たり前な、古代文明の遺跡なわけで、
プログラミングもライブラリを組み合わせてどうこうというよりも、Lisp環境自体を
対象に特化した問題解決器に仕立て上げていくという感じだしねぇ。
モジュールについては、あの死んでくれ状態な生のpackageからASDF -> ASDF2 -> QuickLispと
層が厚くなるにしたがって便利度はUPしてるし、生暖かく見守るべし。
まぁ、4〜5人くらいの少人数でゴリゴリと問題をやっつける道具としては、
かなり便利に使ってるけど、もっと大規模な開発とかで使う気にはなかなかなれないかな。
そういや、ちゃんと規格化しようって頑張ったISLISPって影薄いね。
0301デフォルトの名無しさん
2013/01/10(木) 16:18:14.31requireとprovideはdeprecatedです。本当にありがとうございました。
推奨しない機能を使って整理できるわけねー。
命名規則については、assqとかassvとかそのまま採用しちゃってる上、
結局carとcdrで過去を引きずってるSchemeが人の事言えるんですかね。
0302はちみつ餃子 ◆8X2XSCHEME
2013/01/10(木) 18:19:43.17確かに意味的には first と rest の方がいいと思う。
でも、 caadar みたいなのはどうするのって話になって一貫性も同時に議論する必要がでてしまうんじゃない?
別名を用意するのは Scheme 的じゃない気がするし。
Schemer が本気で議論しはじめたらかなり面倒臭いことになりそう。
そういや、 call-with-current-continuation だけは call/cc って別名があるね。
この場合は単に短縮した名前なので忌避感は感じないな。
R5RS では「call/cc という名前を使う人もいる」という微妙な書き方になってて R6RS で明確に規定されたんだけど、
どういう議論があったんだろう。
0303デフォルトの名無しさん
2013/01/10(木) 23:04:13.660305デフォルトの名無しさん
2013/01/10(木) 23:49:48.940306デフォルトの名無しさん
2013/01/11(金) 00:29:55.76最小主義的な思想を持ってるんだから、caadarとか規格に要らんと思うけど。
caadarとかを利用するのはあまり良くないとも言われてるし、そんな使う?
Andrew Wrightのmatchとか使って構造化代入すれば良いじゃない。
別名としてのcall/ccもそうだけど、入れるにしてもR7RS largeちゃうんかと。
0307デフォルトの名無しさん
2013/01/11(金) 01:13:33.21もうscheme処理系くらい1人ずつ持つ時代だと思う
0308デフォルトの名無しさん
2013/01/11(金) 01:29:01.660309はちみつ餃子 ◆8X2XSCHEME
2013/01/11(金) 01:38:45.29廃止なら廃止で、ライブラリの移動なら移動で議論が起こるよ。
どうするにしたってどこかで議論が起きてどうせまとまんないんだって。
いつものこと。
0310デフォルトの名無しさん
2013/01/11(金) 01:43:23.150311デフォルトの名無しさん
2013/01/11(金) 02:21:11.28つまり、そういうしがらみに縛られてるのはSchemeも似たようなもんなわけで、
あんま堂々とCommon Lispについて言える立場じゃないんじゃないの、ってこと。
その上で敢えて口にするならそれこそ>>304でしょ。
個人的には多少古い設計だとは思うけど、そんなdisられる程とも思えんよ。
一部のSchemerって印象とかで適当にCommon Lisp批判し過ぎじゃない?
0312デフォルトの名無しさん
2013/01/11(金) 02:50:33.330313デフォルトの名無しさん
2013/01/11(金) 08:17:00.29妥協でも不完全でも、とにかく決めなきゃ駄目だよ。
0314デフォルトの名無しさん
2013/01/11(金) 10:14:49.35schemeってプログラムを読み込むのがREADじゃないからダメだとか言われてなかったっけ
schemeマクロは*仕様的だけ見たら*LISPフォームの操作じゃねーじゃねーかってやつ
あれ変わったのか
0315はちみつ餃子 ◆8X2XSCHEME
2013/01/11(金) 10:19:29.23Common Lisp は処理系ごと起動しっぱなしで対話的に開発するのが基本スタイルだけど、
R6RS の場合は C みたいなスタイルを前提にしていると思う。
仮に C に REPL を入れるとしたら無理筋だってのはわかるだろ。
そのスタイルが良いか悪いかというのは置くとして、
大元になる想定が違うものに無理矢理ねじこんでも歪になるだけだよ。
REPL のある R6RS 処理系はフェイズの方を有耶無耶にしてるけど、仕様として決めるなら、
R6RS 風のフェイズの概念か REPL のどちらかを捨てる、あるいは2種類のモードに分けるかってことになる。
モードを分けるのは巨大化の前兆でよろしくない。
REPL を外すのは仕方ない面もあるんじゃないかな。
個人的には Haskell (ghci) 風にすれば辻褄の合うように出来そうな気がしてるけど。
0316はちみつ餃子 ◆8X2XSCHEME
2013/01/11(金) 10:21:52.28R5RS ではプログラムがS式であるとは明記されてなかったけど、 R6RS では変わったよ。
0317デフォルトの名無しさん
2013/01/11(金) 11:00:44.29>R6RS の場合は C みたいなスタイルを前提にしていると思う。
え、対話的な開発スタイルの長所は全部捨てちゃうの?それはそれで道だとは思うけど、ホントにそれでいいのかなぁ。
0318はちみつ餃子 ◆8X2XSCHEME
2013/01/11(金) 11:57:30.94仕様で決めないっていうのは有ってはいけないってわけじゃない。
つーか大抵の R6RS 処理系に REPL 有るし。
厳密に決めようとしたらまとまんないから処理系の裁量で柔軟に対処しとけってことだよ。
0319デフォルトの名無しさん
2013/01/11(金) 14:15:52.500320デフォルトの名無しさん
2013/01/11(金) 15:44:46.31> そのとっ散らかってるのがかなりマイナスだと思うなぁ。
> Common Lisp ってモジュール化の仕組みはある (規格が曖昧っぽいけど)
> のに標準ライブラリがさっぱり整理されてないし命名規則も一貫してないしでわけわかんね。
実際の所、C系とか、Python系とかと比べてとっ散らかり度はどうなの?
CLはLISPのとっ散らかりはずっと言われてきただろうから、多少他の言語よりマシなのかと
推測しているんだけど。言語で腕試しのためにその言語の処理系を作る文化なんて他の言語に
ないでしょ。
0321デフォルトの名無しさん
2013/01/11(金) 16:02:37.41あれらは言語の一部であって、決してライブラリじゃないんだが。
ああ懐かしき(行番号必須だったころの)BASIC。あれもコマンドも関数もいっぱいあったねー。
0322デフォルトの名無しさん
2013/01/11(金) 16:40:50.54ANSIで定義されている関数やマクロのすべてが組み込みってだけ。
common-lispっていう名前空間にフラットに収録されてる。
R5RS Schemeと似たような事情だと思えば間違ってないと思う。
処理系独自のライブラリとかはちゃんと別の名前空間に入ってる。
0323191
2013/01/11(金) 17:14:03.54> モダンな言語しか知らない若者は、CLのあの関数群を標準ライブラリだと思っちゃってもしょうがないかな。
標準ライブラリ、実質標準ライブラリって具体的に何?
0324デフォルトの名無しさん
2013/01/11(金) 22:07:29.97CではなくAlgolだと思う
0325デフォルトの名無しさん
2013/01/11(金) 23:30:33.34だからさ「標準ライブラリ」とか「実質標準ライブラリ」なんてもんは無いんだよ。
CLtL2とかANSIで定義されている関数、特殊フォームとかは、すべからず「言語の一部」
として定義されてる。つまりCとかで言えば予約語に割り当てられてる機能とか、
型とか演算子とかと同じあつかいなわけ。
例えば printf はCでは言語外にある標準ライブラリが提供する機能だが、formatは
CLの言語の一部として定義されてるという具合。だからCLは「巨大な言語」って言われる。
Unix/C的な、小さな仕様+標準ライブラリとか、単機能のお互いに独立した道具を組み合わせて
あれこれやるという考え方とか文化が主流になる前は、こういう何でもかんでも「全体の一部」
として組み込んじゃうキッチンシンク的なやり方は不思議でもなんでもなかった。
今となっては、単に歴史の話だ。だが、CLにおいてはライブラリだモジュールだと
言ったところで、ひとたびloadすると、それは言語の一部として取り込まれちまうという
感覚を持っておくのは決して無意味なことじゃないと思うがな。
"We are the CL, You will be assimilated, Resistance is futile." ってとこだ。
0326デフォルトの名無しさん
2013/01/11(金) 23:38:33.880327デフォルトの名無しさん
2013/01/11(金) 23:40:05.790328デフォルトの名無しさん
2013/01/11(金) 23:48:38.81CLの関数は文法に関与しないのでライブラリに近い
0329デフォルトの名無しさん
2013/01/12(土) 07:15:00.14>仕様で決めないっていうのは有ってはいけないってわけじゃない。
じゃあscheme仕様は何のために作ってるの?
仕様が定まらなきゃユーザは実用的にはREPL使えないじゃん。処理系毎のREPLの動作調べてね、じゃ、おれにはschemeのREPLは使うべきではない、と言われてるようにしか思えないよ。
0330はちみつ餃子 ◆8X2XSCHEME
2013/01/12(土) 09:38:42.22Scheme の仕様は叩き台にすぎず、
処理系ごとに特色を出して実装するもんだって Shiro さんが言ってた。
https://twitter.com/anohana/statuses/285272500764569600
様々な考え方に対する意見 (実装) が出尽くしてからじゃないと議論のスタートにならないので、
REPL の詳細を決めるには時期尚早ってこともあると思う。
個人的には REPL は言語仕様の一部というより開発環境なので仕様に入れるのはどうかという気持。
0331デフォルトの名無しさん
2013/01/12(土) 10:32:32.290332はちみつ餃子 ◆8X2XSCHEME
2013/01/12(土) 10:46:38.06それは実装の事情と関係がある。
一般的な Scheme の実装ではオブジェクトはヒープに割当てて変数にはオブジェクトへのポインタを入れるようになってる。
eqv? は変数同士、つまりはポインタ同士の比較をするんだけど、
真偽値や文字にといった小さいオブジェクトに限ってはヒープに割当てずに変数に直接入れることが出来るので、
そのまま比較すると同値性が比較できてしまうってことになる。
一方の equal? は変数が指す先にあるオブジェクトも見て判定するわけだね。
実装面から説明しなけりゃならない仕様って格好悪い気もする。
0333デフォルトの名無しさん
2013/01/12(土) 16:51:54.94ちょっと違うな。ポインタ同士の比較はeq?だ。仕様には明記してないけど。
eqv?は数値の比較にも使えるが、数値は直接値であるとは限らない(非整数な有理数や
非実数な複素数はだいたいの処理系でヒープに置くだろう)。
仕様のココロとしてはeqv?はimmutableなオブジェクトの同値性、equal?はmutableな
オブジェクトの同一性ってのに近いんだけど、Schemeは伝統的にmutabilityについて
ちゃんと考えてこなかったせいでそう仕様に書けない。
0334デフォルトの名無しさん
2013/01/12(土) 16:55:35.230335はちみつ餃子 ◆8X2XSCHEME
2013/01/12(土) 17:06:02.700336デフォルトの名無しさん
2013/01/12(土) 18:19:09.630337デフォルトの名無しさん
2013/01/12(土) 19:46:08.360338デフォルトの名無しさん
2013/01/13(日) 01:24:49.42学部演習レベルで作れるらしいから、仕様が気にいらなかったら、自分で作ればいいと思う
0339デフォルトの名無しさん
2013/01/13(日) 09:38:57.95ポインタって何
0341SCHEME餃子 ◆8X2XSCHEME
2013/01/13(日) 10:22:17.33Cスレ行け
C言語なら俺に聞け(入門編)Part 111
http://toro.2ch.net/test/read.cgi/tech/1355062693/
0342SCHEME餃子 ◆8X2XSCHEME
2013/01/13(日) 10:55:25.01ここでの不満は仕様への不満であって処理系への不満じゃないと思うぞ。
「この機能が標準 (仕様) 化されればいいのに」であって「この機能が使える処理系がない」ってことでは無い。
0343デフォルトの名無しさん
2013/01/13(日) 15:06:06.58なるほど。 タグビットってそういう意味だったのか。
前にソース見て意味不明だったんだけどそう思ってあらためて読んだら理解できた。
0344デフォルトの名無しさん
2013/01/13(日) 17:38:41.810345デフォルトの名無しさん
2013/01/13(日) 19:26:52.01http://d.hatena.ne.jp/ranekov/touch/20121025/1351163479
回想も面白そうだけど、まだ新しいことも出てくるんだな。
0346デフォルトの名無しさん
2013/01/13(日) 19:33:54.33配布処理系は標準仕様に準拠させてるんだから、「仕様に不満がある=この機能が使える処理系がない」
(まさか、どの標準仕様もカバーしてない処理系を推薦したり、どの処理系もカバーしてない仕様を議論してるなんて馬鹿はいないよね)
0347はちみつ餃子 ◆8X2XSCHEME
2013/01/14(月) 09:08:51.84ここでの Scheme に対する不満は REPL が外されたことを始めとして「足りない」とか「曖昧」とかいったものが多いように見受けられたので、
処理系の拡張まで含めてであれば満足できるものだと思うという回答をしたつもり。
0348デフォルトの名無しさん
2013/01/15(火) 00:20:13.93500行ぐらいのプログラムの型推論を真面目にやると2分ぐらい計算にかかる。
ついでに静的に計算できるの全部やってしまっても計算時間あまりかわらない
0349デフォルトの名無しさん
2013/01/15(火) 07:34:56.560350デフォルトの名無しさん
2013/01/15(火) 08:28:01.010351はちみつ餃子 ◆8X2XSCHEME
2013/01/15(火) 09:25:55.34余計なことをしないというのも速度に寄与しているから、それが悪いとも言えないんだけどさ。
必要なチェックを入れたり自分でチューニングする前提でなら stalin は良い選択かもしれない。
chicken も似たようなものではあるけど、ライブラリ次第で手抜きもチューニングも出来るので、
速度にこだわってそこそこ楽に使える妥当な落とし所だと思う。
mosh は gmp を使っているので巨大整数の計算は速い。
node.js 風の非同期 I/O の導入で I/O の効率化を図ってるのも興味深い。
Ypsilon はマルチコアの性能を引き出せるように並列化のための仕組みを取入れて高速化してたりもする。
動作速度と一言で言っても色んな意味の速度があるので「これが最速」とひとつを挙げるのは無理だよ。
0352デフォルトの名無しさん
2013/01/15(火) 10:21:29.570353デフォルトの名無しさん
2013/01/15(火) 12:32:19.66mosh速いね
0354デフォルトの名無しさん
2013/01/15(火) 16:10:06.27巨人が作ったArcでも旧racketを使われているし、racketの論評はどんな感じですか?
0356デフォルトの名無しさん
2013/01/15(火) 21:59:57.690357デフォルトの名無しさん
2013/01/16(水) 00:35:43.02http://blog.racket-lang.org/2010/01/benchmarks.html
0358デフォルトの名無しさん
2013/01/16(水) 01:26:30.280359デフォルトの名無しさん
2013/01/16(水) 08:06:48.83ひとつの仕様を実装するのにいくつも方法があって、それぞれ長所と短所があって、
何をしたいかによって選択が変わってくるんだから、性能が違う方が自然じゃない?
0360はちみつ餃子 ◆8X2XSCHEME
2013/01/16(水) 08:16:44.00処理系の開発に投入された手間、それとトレードオフの割り切り。
先述の stalin を例にとってみよう。
グローバルなフロー解析で高度な最適化を
するのは手間をかけてその機能を作ったから出来たのであって、
それをしていない処理系よりはそりゃ速くなる。
高度な最適化のためにコンパイル時間がやたらと長くなってるけど、
双方を秤にかけて最適化の方に針を振ると割り切っている。
前者については開発にかかわる人 (才能) が多くなれば解決するけど、
後者については犠牲にせざるを得ない部分が出てくるので、
それぞれの処理系の設計思想でどこに焦点をあててるかってことになる。
速度のために対話的な開発は無視するっていうのもひとつの設計思想だし、
逆に速度を犠牲にしてでも親切なエラーチェックしまくるのもひとつの考え方で、
どちらがいいというものじゃない。
他の条件が同じなら処理速度は速いに越したことはないがそううまい話もないわけで。
0361デフォルトの名無しさん
2013/01/16(水) 13:23:59.12速度が必要な処理の大部分は数値計算
数値計算プログラムは数式処理から生成できる
数式処理に一番向いてるのはLisp
0362デフォルトの名無しさん
2013/01/16(水) 14:34:52.73Lispで基本動作確認して、LispソースをCソースに変換・コンパイルというのを
続けたお蔭で、Cのバッドノウハウを忘れてしまった(^^;
0363デフォルトの名無しさん
2013/01/16(水) 15:57:44.980364はちみつ餃子 ◆8X2XSCHEME
2013/01/16(水) 16:23:10.67普通に Gauche の中にあるよ。
http://practical-scheme.net/gauche/man/?l=en&p=gauche.cgen
0365デフォルトの名無しさん
2013/01/16(水) 17:46:24.91コンパイラの一般論が勉強できる教科書でお勧めをお教えいただけないでしょうか
λリフティングとかの用語を理解したいのです
0366デフォルトの名無しさん
2013/01/16(水) 18:11:30.130367デフォルトの名無しさん
2013/01/17(木) 01:16:24.17scheme処理系なら和田本マジオススメ
遅延ストリームや非決定性ambの実装まで載ってる
0368デフォルトの名無しさん
2013/01/17(木) 01:32:35.92common lispのテキストPAIPのscheme実装(22章)を読んでいたら
「schemeの大半のミューテータは、set!のように末尾が「!」である」(日本語版p.711)と書いてあるのですが
このミューテータとはどういう意味なのでしょうか?
0369デフォルトの名無しさん
2013/01/17(木) 01:36:04.32代入など
0370デフォルトの名無しさん
2013/01/17(木) 05:34:01.30ミュータブルなもの 普通の変数とかC++のstringとか
0371デフォルトの名無しさん
2013/01/17(木) 20:03:51.010372デフォルトの名無しさん
2013/01/17(木) 20:06:36.73にあるlarcenistsってベンチマークみると高速だけど
誰か使ってみた人いますか?
0373デフォルトの名無しさん
2013/01/17(木) 22:19:40.57なるほど。わかりました
0374デフォルトの名無しさん
2013/01/17(木) 22:22:17.19ついでに言えばここ一年くらい絶賛開発停滞中だ。
0375デフォルトの名無しさん
2013/01/17(木) 22:25:13.40気付いてなかった。ありがと。
0376はちみつ餃子 ◆8X2XSCHEME
2013/01/18(金) 08:47:21.44複雑なマクロを書いたときに確認のために larceny で動かしたりしてる。
ただ、メタレベル2以上やマイナスの場合を expand として指定しても動いちゃったりするのでそれほど厳密なわけでもない。
まぁ、そういう細かなところは置くとしても、 >>374 の言うように、普段使いにするには使い勝手が悪いかなと思えるのは確か。
0377デフォルトの名無しさん
2013/01/18(金) 10:51:45.91define-class
は処理系で挙動が異なるけど
define-record-type
は大部分の処理系で挙動が同じってことでいいの?
0378はちみつ餃子 ◆8X2XSCHEME
2013/01/18(金) 11:02:44.29いいえ。
srfi-9 と srfi-57 と srfi-99 と R6RS でそれぞれ異なる定義がされています。
R6RS 処理系を使う分には R6RS の define-record-type を安心して使えますが、
そうでない場合はどれを採用しているかわかりません。
0379デフォルトの名無しさん
2013/01/18(金) 15:43:19.800380デフォルトの名無しさん
2013/01/18(金) 17:55:50.79血尿かなんかか(笑)
0381デフォルトの名無しさん
2013/01/18(金) 20:50:23.21約50ページのschemeの仕様書R5RSの中ではSRFIは必須ではない
0382デフォルトの名無しさん
2013/01/19(土) 12:25:18.420384デフォルトの名無しさん
2013/01/19(土) 18:37:16.72だとすると、R5RSにある型で即値に出来るのは
「真偽値」「文字」「空リスト」「小さい数値」
の4つってことか。
0385はちみつ餃子 ◆8X2XSCHEME
2013/01/19(土) 19:02:22.26即値って元々はアセンブリ言語で「オペコードのすぐ後にくる値 (定数)」という意味だから、
「ポインタを経由する必要がない値」という意味で使うのに違和感があるんだけど、
Scheme (LISP) 的には一般的なの? 単に >>384 が勘違いしてるだけ?
0386デフォルトの名無しさん
2013/01/19(土) 19:08:59.76あとRubyでも使われてたりするんだが、あまり普通じゃないと思う。
0387デフォルトの名無しさん
2013/01/19(土) 19:43:24.36間違いだと思うけど、よく見掛ける。
0388デフォルトの名無しさん
2013/01/19(土) 20:09:25.93良くimmediate valueみたいな表現されてるから、
日本語だと即値って訳されるもんだと俺も勝手に思ってた。
The Scheme Programming Language, 4th Edition
> Simple atomic values, such as small integers, characters, booleans, and the
> empty list, are typically represented as immediate values
こんなノリで。
0389はちみつ餃子 ◆8X2XSCHEME
2013/01/19(土) 20:49:52.52http://www.ruby-lang.org/ja/old-man/html/Ruby_CDD1B8ECBDB8.html#a.c2.a8.c3.cd
R6RS では Immediate value という語は使われてない。
https://www.google.co.jp/search?q=inurl%3Ahttp%3A%2F%2Fwww.r6rs.org%2Ffinal%2Fhtml%2F+immediate
それぞれの分野で意味がはっきりしてればそれでいいと思うんだけど、
アセンブリ言語と LISP だと分野が違うってほど離れてるわけでもないし、
TaPL で説明なしに Immediate value って言ってるのはよくない表現に思える。
じゃあ何って呼ぶべきかってことになるんだけど、 non-pointer value って言ってる事例を見付けた。
こっちの方がよくね? 日本語の適当な訳語が思い付かないけど。
0390デフォルトの名無しさん
2013/01/19(土) 20:51:34.110391デフォルトの名無しさん
2013/01/19(土) 20:55:46.330392はちみつ餃子 ◆8X2XSCHEME
2013/01/19(土) 20:57:03.27「The Scheme Programming Language で」
に読み替えて下ちい。
0393デフォルトの名無しさん
2013/01/19(土) 21:13:33.04SBCLのdoc/internals/objects-in-memory.texinfoとかでも登場する。
ある程度認知されてる表現ではあるんじゃないか。
0394デフォルトの名無しさん
2013/01/19(土) 22:53:45.010395デフォルトの名無しさん
2013/01/19(土) 23:19:48.45アセンブラでもlispでも同じ意味だと思うけど。
0396デフォルトの名無しさん
2013/01/19(土) 23:24:11.70アセンブラ(というか機械語)で、命令語中に埋め込まれたデータのこと。
0397デフォルトの名無しさん
2013/01/20(日) 06:02:44.27具体的な意味は文脈に依存するだろ
LISPならcarもしくはcdrに直接格納できる値って意味で使われるだろうし、
機械語ならマシンコード中に直接格納される値って意味
0398デフォルトの名無しさん
2013/01/20(日) 10:22:37.83だから専門用語は文脈に依存しちゃ駄目なんだって。
0399デフォルトの名無しさん
2013/01/20(日) 10:31:58.530400デフォルトの名無しさん
2013/01/20(日) 10:36:37.71だからImmediate valueは専門用語じゃないだろうと言ってる
0401デフォルトの名無しさん
2013/01/20(日) 13:08:44.340402デフォルトの名無しさん
2013/01/20(日) 20:39:38.010403はちみつ餃子 ◆8X2XSCHEME
2013/01/20(日) 21:26:36.13http://www.wedesoft.de/racket-on-android.html
0404デフォルトの名無しさん
2013/01/20(日) 22:18:23.02使い勝手はどんなものですか?
0405はちみつ餃子 ◆8X2XSCHEME
2013/01/21(月) 08:09:16.35(Virtual Box とかでも動くかもしれないけど、動作環境を用意するのは面倒。)
誰かレポートよろ。
0406デフォルトの名無しさん
2013/01/21(月) 23:12:04.590407デフォルトの名無しさん
2013/01/22(火) 07:30:54.320409デフォルトの名無しさん
2013/01/22(火) 19:17:08.34Island Lifeだったり?w
0411デフォルトの名無しさん
2013/01/22(火) 23:20:39.300412デフォルトの名無しさん
2013/01/22(火) 23:27:00.870413デフォルトの名無しさん
2013/01/22(火) 23:41:08.09話変わるけど、渋谷lispどうなったかな
0414デフォルトの名無しさん
2013/01/23(水) 00:02:12.30cl,scheme,clojure順々にやるってみたいだけど
0415デフォルトの名無しさん
2013/01/23(水) 00:04:02.97(vector-member '(5 6) #(1 '(5 6) 4)) ;=>#f
(vector-member '(5 6) #(1 (5 6) 4)) ;=>1
なんか納得いかない
0416デフォルトの名無しさん
2013/01/23(水) 00:10:46.15#f
gosh> (eqv? '(5 6) '(5 6))
#f
gosh> (equal? '(5 6) '(5 6))
#t
0417デフォルトの名無しさん
2013/01/23(水) 02:03:46.20#((quote hoge)) => #('hoge)
0418はちみつ餃子 ◆8X2XSCHEME
2013/01/24(木) 08:06:59.790419デフォルトの名無しさん
2013/01/25(金) 01:07:34.70Racketではforなんだね
しかしSUBSEQに相当するものが見当たらない
forで作れるからないのだろうか
0420デフォルトの名無しさん
2013/01/25(金) 13:51:38.930421デフォルトの名無しさん
2013/01/25(金) 13:54:28.250422デフォルトの名無しさん
2013/01/25(金) 15:06:22.690423デフォルトの名無しさん
2013/01/25(金) 15:12:10.17泥団子を投げ合うのがCommon Lisp
両方つかってキャットファイトがLisp
0424SCHEME餃子 ◆8X2XSCHEME
2013/01/25(金) 18:28:28.20Lisp には明確な定義がないから Lisp っぽければそれは Lisp で、「俺俺」な Lisp が存在できるけど、
Scheme は規格で決まってるものだからその実装は (拡張等で個性はあるにせよ) Scheme 処理系のひとつなわけで、
「俺俺」を付ける余地がない。
それは置くとしても Lisp ⊃ Scheme ということになってるので、
Lisp より Scheme の方が少ないのは当然っちゃ当然な話。
0425デフォルトの名無しさん
2013/01/25(金) 23:15:03.89クォートとエバル
0426デフォルトの名無しさん
2013/01/26(土) 00:31:57.060427デフォルトの名無しさん
2013/01/26(土) 01:43:07.39クォートとは置いとくとして、最近エバったことはないな
関数読んできてコンパイルすることは結構あるが
0428デフォルトの名無しさん
2013/01/26(土) 09:15:27.36Cltl満たしてればいいんじゃね?
満たしてないとCommonじゃないわー
0429デフォルトの名無しさん
2013/01/26(土) 12:36:26.050430デフォルトの名無しさん
2013/01/26(土) 12:55:53.790431デフォルトの名無しさん
2013/01/26(土) 13:38:41.800432デフォルトの名無しさん
2013/01/26(土) 14:10:10.920433SCHEME餃子 ◆8X2XSCHEME
2013/01/26(土) 16:21:15.0548 時間だよ。
http://s48.org/1.9/manual/manual-Z-H-2.html#node_chap_1
0434デフォルトの名無しさん
2013/01/26(土) 16:47:29.450435デフォルトの名無しさん
2013/01/26(土) 17:51:10.340436デフォルトの名無しさん
2013/01/26(土) 18:06:23.840437デフォルトの名無しさん
2013/01/26(土) 18:11:17.870438デフォルトの名無しさん
2013/01/26(土) 19:13:04.540439デフォルトの名無しさん
2013/01/27(日) 04:00:36.24クソ、こんなので…w
0440デフォルトの名無しさん
2013/01/27(日) 04:40:13.87標準なんて言えたもんじゃないよね
0441デフォルトの名無しさん
2013/01/27(日) 08:07:29.920442デフォルトの名無しさん
2013/01/27(日) 17:24:22.33はちみつさんはr6rs好きなの?
0443デフォルトの名無しさん
2013/01/28(月) 01:56:42.13Schemeの仕様はもう十分、お腹いっぱい
Schemeの仕様を議論する暇があったら、SRFI実装のバグをなくして統一APIを拡充すべき
0444SCHEME餃子 ◆8X2XSCHEME
2013/01/28(月) 09:31:43.23ライブラリ (モジュール化) の仕組みを変えるのは無いわー。
ライブラリの中身はいくらでも議論すればいいと思うけど、
土台を変えるのはいかん。
0445デフォルトの名無しさん
2013/01/28(月) 09:54:43.33さっぱりわからん。
どうしてポインタと即値の区別が付けられるのか。
0446デフォルトの名無しさん
2013/01/28(月) 10:08:58.9132ビットマシンなら、メモリやレジスタが36ビットだったりするわけ。
0447はちみつ餃子 ◆8X2XSCHEME
2013/01/28(月) 10:19:27.99http://gauche.git.sourceforge.net/git/gitweb.cgi?p=gauche/Gauche;a=blob;f=src/gauche.h;h=9ae7aa27b36e24165b9a6fa8cf8f3b066a00ba6d;hb=HEAD#l184
Gauche の場合はヒープオブジェクトは常に4バイト境界に配置することになっているので下位2ビットは常にゼロになる。
逆に言えば下位2ビットがゼロのときはポインタだってことだし、ゼロでないときはポインタではない。
具体的なレイアウトは処理系によって多少の工夫があるけど、基本的な考え方はどれも似たようなものだよ。
Ypsilon は8バイト境界に配置するようにしてるみたいだね。
R6RS では fixnum が24ビットと書いてる (実際にはちょっと書き方が違うが) のでタグに1バイトは取れる計算になる。
0448SCHEME餃子 ◆8X2XSCHEME
2013/01/28(月) 10:23:58.070449デフォルトの名無しさん
2013/01/28(月) 13:15:10.05> Gauche の場合はヒープオブジェクトは常に4バイト境界に配置することになっている
それだとオブジェクトの間にスキマが空いてメモリがもったいなくね
タグを使うためだけにそれだけ無駄にしてんの?
0450デフォルトの名無しさん
2013/01/28(月) 13:15:49.42てことは、下位2bitが0の数値はポインタorただの数値かわからないってことでOK?
0451デフォルトの名無しさん
2013/01/28(月) 13:30:00.96即値を格納するときは2bit左シフトして、タグのビットを立てるんだろ
0452はちみつ餃子 ◆8X2XSCHEME
2013/01/28(月) 13:32:37.27その場合はポインタで確定。
数値として使う場合は2ビット分を右シフトして使うの。
だから fixnum としては30ビットの幅しかない。
ところで30ビットって少ないようだけど、
実際の利用の95%程度はカバーできるという実験結果がある。
http://people.csail.mit.edu/jaffer/CNS/DIMPA
> 95% of the integers are less than 30.bits
このグラフの数値は利用状況によって大きく変わり得るにしても、
大きい値より小さい値の方が頻出する傾向はまず変わらないと思う。
0453デフォルトの名無しさん
2013/01/28(月) 13:33:15.93いまどき、特殊な用途とかでも無い限り、4バイト境界配置の隙間を気にする奴なんていない
0454デフォルトの名無しさん
2013/01/28(月) 13:47:23.72(f '(a (b c)) '(1 (2 3)))
=> '( (a . 1) (b . 2) (c . 3))
0455はちみつ餃子 ◆8X2XSCHEME
2013/01/28(月) 13:47:38.23別途タグ用の領域を設けるとしたらその分だけメモリを消費しちゃうわけだし、どっちもどっちだろう。
値の大きさを32ビットに抑えればレジスタに乗るから速度的にも有利な可能性が高いし。
それと、オブジェクトの配置が境界に合ってた方がメモリアクセス速度も速い。
半端なところへのアクセスはCPUの内部的に二回に分けてアクセスすることになると聞いたことがある。
ただ、キャッシュに乗ってしまえば速度的なペナルティはなくなるとか、
色々と複雑な構造になってるらしいんで、性能的な面でどれが有利かは実際にやってみないとわからん。
既存の処理系がだいたい似たようなものってことは少なくとも実用上問題にならない程度なんだろ。
0456デフォルトの名無しさん
2013/01/28(月) 14:07:35.78なるほど、丁寧な説明ありがとうございます。
0457はちみつ餃子 ◆8X2XSCHEME
2013/01/28(月) 14:15:38.59Scheme で?
match も使えるのかもしれんが、結局は場合分けしながらリストを辿るだけなのでこんな感じかな。
(define (f lst1 lst2)
(let ((result '()))
(let loop ((lst1 lst1)
(lst2 lst2))
(cond ((null? lst1) (if (null? lst2) result (error "unmatch.")))
((pair? lst1)
(if (pair? (car lst1))
(loop (car lst1) (car lst2))
(begin
(set! result (cons (cons (car lst1) (car lst2)) result))
(loop (cdr lst1) (cdr lst2)))))
(else
(set! result (cons (cons lst1 lst2) result)))))
(reverse result)))
0458デフォルトの名無しさん
2013/01/28(月) 21:21:58.09逆に上位ビットがゼロの場合に fixnum ってことにして、ポインタの場合に左シフトするって方針は有り?
0459デフォルトの名無しさん
2013/01/28(月) 22:02:27.90それでも構わないけど、プロセッサによっては上位タグ数bitをマスクする方がインストラクションが
増えることがあるんじゃない? 即値で#x7を持つのと#xe000000000000000を持つのじゃ前者の方が
短いことが多いでしょう。
fixnumとポインタしか無ければ、最上位の1ビットだけで区別できるから、レジスタ自身とandとって
サインフラグを見て分岐するって手があるけど。でもfixnumと分かった時に符号拡張するのめんどいな。
0460デフォルトの名無しさん
2013/01/28(月) 22:54:50.60(MSBなら0というOSもあるかもしれないけど。)
64ビットならともかく32ビットはアドレス空間一杯なので上位ビットつぶすのは不利。
古文書によると大昔の68000とかCPUは上位8ビットがデコードされてなくて、
自由につかえたそこをタグに使った実装が多かったらしいけど。
0461デフォルトの名無しさん
2013/01/28(月) 23:17:09.54直接インデックス, アドレスできなくなるので却下.
インデックスアドレスは 12bit相対までとか, 16bit相対までといった制限
のある CPU がほとんどなので, tag を上位に持って行くと, ポインタに
アクセスするたびにシフトが発生するため効率が悪くなる.
sbcl なんかだと, 以下のようになっててだな
http://sbcl-internals.cliki.net/tag%20bit
cons cellをアクセスするときは list-pointer が使われて (Rx -3) で
car, (Rx +1) で cdr をアクセスする仕組みだったと思う(32bit機.)
SPARC にいたっては, 下位 2bit を無視して演算する, TAG 演算命令を
持ってるしね.
0462デフォルトの名無しさん
2013/01/28(月) 23:34:31.690463デフォルトの名無しさん
2013/01/29(火) 00:07:41.34実装することを考えるといいよ。
1ワードのデータを受けとって、cons か number か判断できなくちゃいけない。
で、既に出てるけど、メモリ上には常にalignされていることを利用して、
下位2ビットを別の目的に利用する訳だ。
個人的にはこんなこと思いつく人は賢くて尊敬する。
0464デフォルトの名無しさん
2013/01/29(火) 01:33:52.760465はちみつ餃子 ◆8X2XSCHEME
2013/01/29(火) 08:25:17.54fixnum の速度に特化するならそういう方針も駄目とは言えないけど、常識的には遅くなると思う。
GC ライブラリを使う場合はその都合に合わせなきゃ駄目だしなぁ。
0466デフォルトの名無しさん
2013/01/29(火) 08:43:45.620467デフォルトの名無しさん
2013/01/29(火) 13:11:47.65処理系のユーザー側として性能のよいプログラムを書く重点ポイントとかある?
0468デフォルトの名無しさん
2013/01/29(火) 18:22:51.16典型的で素直な再帰、末尾再帰を中心にしてプログラムを書くとコンパイラが最適化
しやすいと思う。
0469はちみつ餃子 ◆8X2XSCHEME
2013/01/29(火) 21:32:12.91処理系を実装する側も出現頻度の高い (典型的である) パターンから重点的に最適化する。
処理系のユーザーがよかれと思って小細工してもそのパターンから外れて逆効果ってのはよくあることなので、
細かいところは気にせず普通な書き方で書いた方がいい。
あとは GC の発生頻度を低くするのが定石かな。 一端確保したオブジェクトを使い回すとかして。
GC は割と重い処理なんだよ。
但し、「GC の発生頻度を低く」ばかりを意識していると「典型的なパターン」からずれてしまうこともあるので、
そのあたりのバランスは様子を見ながら。
0470はちみつ餃子 ◆8X2XSCHEME
2013/01/29(火) 22:03:55.77それでも足りなければ領域を伸ばすという方法を取る。
(どの程度伸ばすのが良いかは諸説ある。)
最初にガッっとメモリを使ってあとはそれほどでもない
というプログラムは効率が悪いかもしれない。
それも GC の設計によるので一概には言えないけど。
いずれにせよ、まずは処理系のクセを把握することが必要。
0471デフォルトの名無しさん
2013/01/29(火) 22:11:01.67大抵の物は末尾再帰じゃなくても十分だと思うけど
0472デフォルトの名無しさん
2013/01/30(水) 00:53:41.93車輪の再発明だったのか
0473デフォルトの名無しさん
2013/01/30(水) 01:34:15.55同意
0474デフォルトの名無しさん
2013/01/30(水) 01:43:01.91他言語だけど、携帯のプログラムの受注でGCとメモリ管理の職人芸が必要になった
schemeでスマホか携帯のアプリを作ってる人がいるのだろうか
0475デフォルトの名無しさん
2013/01/30(水) 03:40:46.25「大抵の物」がどういう範囲を見てるのか気になる。まっすぐ並んでるデータをナイーブに
再帰すると深さはO(n)だろ。非末尾再帰だとn=10^5〜10^6くらいで大抵の処理系は何らかの
壁に当たらないか? (クラッシュしないまでも、スタックGCが頻発して性能ががくんと落ちるとか)。
Clojureみたいに遅延シーケンスでの再帰なら別だが。
0476デフォルトの名無しさん
2013/01/30(水) 07:55:04.15話題をぶった切ってすまんが、最適化するのは末尾再帰じゃなくて末尾呼出なのか?
0477デフォルトの名無しさん
2013/01/30(水) 08:12:23.230478デフォルトの名無しさん
2013/01/30(水) 08:28:42.83いや、それはわかるんだが、規格でそこまで求めてるのかってこと。
0479はちみつ餃子 ◆8X2XSCHEME
2013/01/30(水) 09:02:16.96よって末尾呼出の回数を無制限にせよというのが実質的な要求だと俺は理解してるけど、それでいいよな?
っていうか、実装者の気持になって考えると、末尾再帰の場合だけ最適化っつー方が難しいだろ。
変数は破壊的に更新 (set!) されることもあるんだからある呼び出しが再帰かどうかなんてコンパイル時に判断できない。
末尾文脈での呼出しのときにリターンアドレスをプッシュしないっていうだけの簡単なことを無駄に複雑にする必要はない。
0480デフォルトの名無しさん
2013/01/30(水) 11:20:13.20俺もそう理解している。
名称を "properly tail-recursive" としながら
その実 "tail call" についての要求しかしてないのが混乱の元だと思う。
> っていうか、実装者の気持になって考えると、末尾再帰の場合だけ最適化っつー方が難しいだろ。
r6rs では大分マシになったよね。
export された識別子の束縛は変更不能だし、
export されてない識別子ならコンパイル時に判定可能だし、
REPL もなくなったし。
色々文句はあるだろうけど。
0481デフォルトの名無しさん
2013/01/30(水) 13:17:06.33CONS Should Not CONS Its Arguments, Part II: Cheney on the MTA http://www.pipeline.com/~hbaker1/CheneyMTA.html
にも We thus achieve the spirit, if not the letter, of ANSI Scheme's tail-recursion law. なんて一節がある。
0482デフォルトの名無しさん
2013/01/30(水) 14:09:09.61C++みたいにスタックやキュー等のコンテナを標準ライブラリにいれて欲しい
0483はちみつ餃子 ◆8X2XSCHEME
2013/01/30(水) 15:31:52.56だよなぁ。
R6RS のライブラリの分量が多くなってるのはともかくとして、
方針としては処理系を作り易い方向に振ってるよな。
レコードも筋が悪いと言われつつも実装が楽な方に流れちゃったし。
0484デフォルトの名無しさん
2013/01/30(水) 23:25:52.55もっとくやしく
0485デフォルトの名無しさん
2013/01/30(水) 23:32:20.150486デフォルトの名無しさん
2013/01/31(木) 00:14:19.35だいぶ古い話かもしれんがVAIO Pは女の子のジーパンのポケットに
入ることが売りだったよ。
0487デフォルトの名無しさん
2013/01/31(木) 00:58:46.490488デフォルトの名無しさん
2013/01/31(木) 01:22:00.47scheme -> C のトランスレータを作ってるので、上手くいけば smalltalk みたいな自己完結する環境できるかもしれないので
0489はちみつ餃子 ◆8X2XSCHEME
2013/01/31(木) 09:34:55.67だよなぁ。
R6RS のライブラリの分量が多くなってるのはともかくとして、
方針としては処理系を作り易い方向に振ってるよな。
レコードも筋が悪いと言われつつも実装が楽な方に流れちゃったし! (# ゚Д゚) ムッキー
( `Д´)フォオオオオオオオオオ!
0490デフォルトの名無しさん
2013/01/31(木) 10:01:46.48ちがうちがう。
もっとくやしくおながいします。
0491はちみつ餃子 ◆8X2XSCHEME
2013/01/31(木) 10:17:30.89R6RS のライブラリの分量が多くなってるのはともかくとして、
方針としては処理系を作り易い方向に振ってるよな。
レコードも筋が悪いと言われつつも実装が楽な方に流れちゃったし!!! (ノ#`Д´)ノ⌒┻━┻
ヽ(`(`(`(`ヽ(`Д´)ノ ファ・フォァ・フワォオオオオオオオオオオオン!!
0492デフォルトの名無しさん
2013/01/31(木) 13:46:38.020493デフォルトの名無しさん
2013/01/31(木) 15:54:44.14スタック1本で実装しようとすると難しいと思うんだけど
schemeだと多値(というか戻り値)専用のスタックを別に用意するしかない?
0494はちみつ餃子 ◆8X2XSCHEME
2013/01/31(木) 16:06:11.22結果的にコンパイラが最適化の工夫をする余地が大きくなっている。 (コンパイル時にわかる情報が多い。)
例えば >>480 でも指摘されているように、破壊されない変数が多くて、しかも破壊されない変数がどれか判定できるならば、
実行時の関数呼出しの際に変数をいちいち見なくてもコンパイル時に定数を埋込むようにできる。
メモリアクセスがひとつ省略されるわけだから当然速度は上がる。
R6RS の仕様ならば実行途中でしょーもない unbound variable なんてエラーで止まるなんてこともない。
(そういうエラーは理屈の上ではコンパイル時に発見できるので。 とは言え処理系によっては実行時まで発見されないようなものもあるけど。)
一方で、 Lisp は「動的」「柔軟」なところが利点だと考えている人もいて、静的な方向に力を入れるのは Lisp 的じゃないという反発はある。
この記事でそういう事情に触れている。
http://blog.practical-scheme.net/shiro/20121227b-lisp-hare-tortoise
> Schemeの最近の仕様は静的側に寄っていて、
> 往年のなんでもいじれるLispが好きな 人々には不評なんだけど、
> コンパイラ作者にとってはそれなりに納得のゆく選択であることが多い。
0495デフォルトの名無しさん
2013/01/31(木) 17:05:47.770496デフォルトの名無しさん
2013/01/31(木) 21:22:29.960497デフォルトの名無しさん
2013/01/31(木) 21:35:40.42だったら動的型なんてやめろって思うけど
0498デフォルトの名無しさん
2013/01/31(木) 22:56:49.28だったらSMLでいいんじゃね。
0499デフォルトの名無しさん
2013/02/01(金) 00:37:40.54俺は理解できてるつもりだけどcall/ccがいまいち分からん
contが沸いて出てきてなにがなんだか
0500デフォルトの名無しさん
2013/02/01(金) 01:56:45.270501デフォルトの名無しさん
2013/02/01(金) 02:16:07.350502デフォルトの名無しさん
2013/02/01(金) 02:25:33.59なぜ? 効率考えなければできるんじゃない?
0503デフォルトの名無しさん
2013/02/01(金) 03:22:19.06しらんけど
0504デフォルトの名無しさん
2013/02/01(金) 07:37:33.050505はちみつ餃子 ◆8X2XSCHEME
2013/02/01(金) 10:37:46.06スタックを扱うクラスを自前で作れば大丈夫だよ。
効率は悪いけど不可能というわけじゃない。
0506はちみつ餃子 ◆8X2XSCHEME
2013/02/01(金) 10:44:08.44速度の需要はあるよ。 Scheme に限らず他の Lisp でもね。
ただ、 Scheme のアプローチの仕方が伝統的な Lisp とは違うという話。
CL では、逆アセンブラやプロファイラや型宣言といった
「道具」を用意してプログラマに頑張ってもらうという方向で
速度の需要を満たしてるわけだが、
Scheme の場合はそんなダサいことやってないで
コンパイラで最適化を頑張ろうぜっていう方向という違い。
0507デフォルトの名無しさん
2013/02/01(金) 11:01:36.160508デフォルトの名無しさん
2013/02/01(金) 11:20:21.760509デフォルトの名無しさん
2013/02/01(金) 11:59:53.840510デフォルトの名無しさん
2013/02/01(金) 14:34:38.010511はちみつ餃子 ◆8X2XSCHEME
2013/02/01(金) 15:42:11.56eval もよくわかんないんだよな。 eval に渡せるのは datum value ってことになってるけど、
いっそ返却値も datum value に制限してしまえばもう少し作り易くて使い易いものになったと思うんだよ。
実行中のプログラムと eval の中の環境が混ざらないように出来るから。
Google Chrome の JavaScript で別プロセスとパイプで通信するときはシリアライズ可能な値しか送れないことになってるじゃん?
あんな感じ。
それと environment もゼロ引数を許すのは何の意味があるのかわからん。
0512デフォルトの名無しさん
2013/02/01(金) 17:05:46.10なってるじゃん? とか言われても。
知らんがな。
0513デフォルトの名無しさん
2013/02/01(金) 21:47:00.30大学の演習で scheme on scheme を作るのに必要な仕様だから我慢してもらわないと…
0514デフォルトの名無しさん
2013/02/01(金) 23:39:46.19http://shenlanguage.org/news.html
https://github.com/hraberg/Shen.java
0515デフォルトの名無しさん
2013/02/01(金) 23:47:56.070516デフォルトの名無しさん
2013/02/01(金) 23:51:37.880517デフォルトの名無しさん
2013/02/02(土) 00:30:44.050518デフォルトの名無しさん
2013/02/02(土) 01:30:41.900520デフォルトの名無しさん
2013/02/02(土) 11:08:46.150521デフォルトの名無しさん
2013/02/02(土) 11:12:48.77非互換は日常茶飯事。
0522デフォルトの名無しさん
2013/02/02(土) 11:25:31.710523はちみつ餃子 ◆8X2XSCHEME
2013/02/02(土) 11:36:37.25> <identifier>、 .、 <number>、 <character>、 <boolean> は <delimiter> か入力の終端で終端されなければならない。
そんでもってデリミタの定義は
<delimiter> → ( | ) | [ | ] | " | ; | # | <whitespace>
となっていて、クウォートはデリミタに含まれないことから、 car の後には空白 (またはコメント) が必要。
昔の Lisp 処理系では補助的定義の名前の末尾にクウォートを付ける場合があったっぽいのでそういう拡張を可能にするためかも? 知らんけど。
結論として Ypsilon のバグではない。 そういう仕様。
0524デフォルトの名無しさん
2013/02/02(土) 16:08:53.50schemeの最近の習慣じゃ頭に%を付けるみたいだが。
0525デフォルトの名無しさん
2013/02/02(土) 19:29:11.83大学の演習でつくったlispプログラムのソースコードの断片
0526デフォルトの名無しさん
2013/02/02(土) 23:26:57.83どちらもユーザに直接触ってほしくないという点では同じかもしれないけど、Haskellなんかのクオートが補助的な関数であることを表してるのに対して、Lisp系の%は内部的な定義であることを表してて意味が違うと思う。
0527デフォルトの名無しさん
2013/02/03(日) 01:33:19.20関連の話題
http://chaton.practical-scheme.net/gauche/a/2010/05/20#entry-4bf4bb60-d191f
0528349
2013/02/03(日) 11:04:04.240529デフォルトの名無しさん
2013/02/03(日) 11:20:37.68再配置しないタイプのGCはそういう状況で効率悪そうだ
0530デフォルトの名無しさん
2013/02/03(日) 15:56:36.700531はちみつ餃子 ◆8X2XSCHEME
2013/02/03(日) 17:56:22.32俺が最も使ってる処理系ってことなら Gauche だな。
R6RS が好きな俺だけど、 R5RS 処理系である Gauche をメインで使っている理由は日本語のドキュメントが有るという一点。
(もちろん他にも Gauche の素晴しいところはあるが。)
だって英語あんまりわからんし。
好きな処理系ってことなら最近は Sagittarius かなぁ。 なんとなくバグが多いような気がしてたんだけど、
修正の経過を積極的にブログに書いてあるからそう錯覚してただけなんじゃないかと思って、ちゃんと見たら結構良かった。
日常的に使いそうなライブラリがひと通り入ってて、これまで Gauche で書いてたものも簡単に移植できそう。
リリースサイクルが定期的、しかも一月ごとという短いサイクルなのも、どんどん改良されている感じがして良い。
0532デフォルトの名無しさん
2013/02/03(日) 19:10:38.35http://sandycat.info/blog/deptypes-shen/
http://goto.ucsd.edu/~ravi/research/djs/
ここら辺の型システムもJITの型推論と違って、
速度最適化に結びついて無いんだよな。
0533デフォルトの名無しさん
2013/02/03(日) 19:11:42.460534デフォルトの名無しさん
2013/02/03(日) 23:10:58.33RnRSも日本語訳されなきゃ読めないの?
全然だめじゃん
0535デフォルトの名無しさん
2013/02/03(日) 23:13:04.26http://www.yuasa.kuis.kyoto-u.ac.jp/~yuasa/jakld/index-j.html
スマホなら色々あるけど取り合えずGambit
play.google.com/store/apps/details?id=org.keithflower.gambit&hl=ja
0536デフォルトの名無しさん
2013/02/03(日) 23:54:34.140537デフォルトの名無しさん
2013/02/04(月) 01:38:00.660538デフォルトの名無しさん
2013/02/04(月) 01:44:05.21型推論作ろうとすると、かなりめんどくさくないか?
0539デフォルトの名無しさん
2013/02/04(月) 04:23:54.45ただのコンテナ
0542デフォルトの名無しさん
2013/02/04(月) 13:55:21.950543デフォルトの名無しさん
2013/02/04(月) 14:42:54.290544デフォルトの名無しさん
2013/02/04(月) 16:20:29.53;;;過去ログで同じ問答あったらポインタ希望
0545デフォルトの名無しさん
2013/02/04(月) 18:05:23.16何を今更。
0546はちみつ餃子 ◆8X2XSCHEME
2013/02/04(月) 19:29:52.16食わず嫌いは多分にあると思う。 でも、それを助長するような事情
もあると思うんだよな。 例えば、入門の題材がすぐに日常で使える
ものでない場合が多いような気がするし、実際に Lisp で書かれて
いる物の総量も (相対的に) 少ない。 つまり、食わず嫌いってのは
食う機会、触れる機会が少ないという背景が有って起こるってこと。
ただ、 Python やら Perl やらの状況を見るとクロージャや高階関
数といった程度の概念は当たり前のものとして普及してるみたいな
んで、 Lisp に入門するハードルは下がってるかもしれない。 逆に
Lisp から去っていく機会も増えているかもしれないけどね。
それはそれとして、 Lisp をよく知った上で嫌いになる理由も無く
はない。 shiro さんが Lisp についてまとめたこれを見て欲しい。
http://practical-scheme.net/wiliki/wiliki.cgi?Lisp%3a%E3%82%88%E3%81%8F%E3%81%82%E3%82%8B%E6%AD%A3%E8%A7%A3
Lisp の利点を挙げていて、それらの利点によって Lisp は「自由」
であるというのが結論なんだけど、自由であるってのは欠点でもあ
るんだよね。 統制が取りにくいのでチーム開発に向いてないとかいっ
た問題はよく指摘されている。
0547デフォルトの名無しさん
2013/02/04(月) 19:52:02.700548デフォルトの名無しさん
2013/02/04(月) 21:20:31.24もうみんなPythonなんだよな
Lispなんて誰も使ってない
0549デフォルトの名無しさん
2013/02/04(月) 22:41:37.21に相当するものってschemeにはないの?
0550デフォルトの名無しさん
2013/02/04(月) 22:41:39.970551デフォルトの名無しさん
2013/02/04(月) 22:50:01.970552はちみつ餃子 ◆8X2XSCHEME
2013/02/04(月) 23:08:21.52規格にはない。
Gauche や Sagittarius は CLOS もどきの機能を提供していて、
defmethod 相当と言えるのは define-method 。
http://practical-scheme.net/gauche/man/?l=jp&p=define-method
http://code.google.com/p/sagittarius-scheme/source/browse/doc/clos.scrbl?name=version+0.4.1#80
Tiny CLOS というライブラリが CLOS を真似た機構を提供していることで有名。
http://community.schemewiki.org/?Tiny-CLOS
オブジェクト指向の機能がない Scheme 処理系でもそのライブラリを導入することで
(CLOS スタイルの) オブジェクト指向を使える。
ただ、 Gauche に導入されたオブジェクトシステムはモジュールシステム等との相性の悪さがわかっている。
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aGenericFunction%E3%81%A8Module
Gauche に限らず Scheme の仕様と噛み合わない部分もあって、
単純に CLOS を移植したのではうまくないと考えられている。
0553デフォルトの名無しさん
2013/02/05(火) 00:19:02.570554デフォルトの名無しさん
2013/02/05(火) 07:18:41.980555はちみつ餃子 ◆8X2XSCHEME
2013/02/05(火) 07:27:21.38Common Lisp が大前提になってるんだから、
色々と違いの多い Scheme では CLOS そのものにはならないよ。
http://practical-scheme.net/gauche/man/?l=jp&p=%E7%B5%B1%E5%90%88%E3%81%95%E3%82%8C%E3%81%9F%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0
> GaucheはCLOSに類似した、STklosスタイルのオブジェクトシステムを持っています。
あくまでも類似したものだ。
Sagittarius の場合はライブラリの名前に CLOS って付けちゃってるけどな。
0556デフォルトの名無しさん
2013/02/05(火) 08:44:10.47見てると主義主張が別れすぎてて選び辛くない?
しかも標準じゃ物足りない分処理系ごとの拡張が多くて
CommonLisp以上に汚れて見える
0557デフォルトの名無しさん
2013/02/05(火) 09:02:32.13Common LispはLispのそういうところをなくしましょうということで、
巨大な仕様を作ったわけだから。
0558デフォルトの名無しさん
2013/02/05(火) 19:35:07.680559デフォルトの名無しさん
2013/02/05(火) 21:04:59.65他言語のモジュールも含めて比較してやれば小さいほうなんじゃないの?
0560デフォルトの名無しさん
2013/02/05(火) 21:41:11.680561デフォルトの名無しさん
2013/02/05(火) 21:44:59.76拡張部分はschemeではない
schemeとはあくまでもRxRSだけだ
ゆえにschemeの拡張部分が汚いという主張は、バカ学生が作ったコードが汚い、と同レベルの主張でしかない
0562デフォルトの名無しさん
2013/02/05(火) 22:27:32.41同意。巨大で不格好なCLより、
美しいハズの scheme の方が独自機能で汚くみえるときがある。皮肉だ。
0563デフォルトの名無しさん
2013/02/05(火) 22:28:57.41煽りじゃなく素朴な疑問なんだが、rnrs だけで現実的なプログラム書けるのか?
0564デフォルトの名無しさん
2013/02/05(火) 22:47:19.94既存ライブラリを再発明せずに、という意味なら現実的ではない。
Schemeに限らないけどな。
0565はちみつ餃子 ◆8X2XSCHEME
2013/02/05(火) 22:56:19.69Scheme の仕様は議論の土台となるべく、ある程度の合意が取れた部分だけを固めたもの。
つまり、 Scheme の仕様は言語のあるべき姿の一部に過ぎなくて、
しかもその一部は「ある程度の合意がとれるくらいには充分に出来の良い部分」なわけ。
綺麗に出来たところだけを抜きだして綺麗だって主張も馬鹿馬鹿しいと思うよ。
結局、 Scheme の綺麗さっていうのは汚い部分を未定義にしてるだけなので、実用のためには汚い部分を補う必要がある。
(将来的にはそれも綺麗な形に整理されることは有り得るけれど。)
Scheme の仕様は拡張を前提としているところがあるので、主要な拡張を議論の題材にするのは有りだと思う。
0566デフォルトの名無しさん
2013/02/05(火) 23:08:24.73python とか ruby とか java とか haskell とかだと,
言語をインストールした時点で含まれているライブラリの API 数は
「なにこれ? へそが茶沸かすじゃん > CLの仕様」
ってくらい数あるよな?
0567デフォルトの名無しさん
2013/02/05(火) 23:10:08.53COMMON-LISPには978のシンボルがあるよと書いてある
http://www.lispworks.com/documentation/HyperSpec/Front/X_Symbol.htm
Rubyの組み込みライブラリのメソッド数をざっと数えると2600くらい。
正確には例外クラスまでのリンクを辿って、<dt class="method-heading">含む行を数えると、2590行。
http://doc.ruby-lang.org/ja/1.9.3/library/_builtin.html
0568はちみつ餃子 ◆8X2XSCHEME
2013/02/05(火) 23:24:31.84最新仕様と言えるのは RubySpec なのかなぁ?
「仕様」って何よってところから思想の違いがあるような気がするので、
公平な比較ってかなり難しくない?
0569デフォルトの名無しさん
2013/02/05(火) 23:30:47.910570デフォルトの名無しさん
2013/02/05(火) 23:46:12.73「実装の仕様」は実用的かもしれないけど別に美しくないし互換性も時々ない、とかいうのは、
論理的にはいいんだろうけど、なんだ、その、めんどくさい
どの言語でも大なり小なりそういうのあるけどさぁ……
0571デフォルトの名無しさん
2013/02/06(水) 01:11:13.72俺はごめんだけどな
0572デフォルトの名無しさん
2013/02/06(水) 02:13:04.88racketのdefine/public
統一してほしいなあ
0573デフォルトの名無しさん
2013/02/06(水) 02:37:57.20理由は、コーディングの際に明確に両者を分離できないと、論文で「schemeで…」と書くと嘘になってしまうから
0574デフォルトの名無しさん
2013/02/06(水) 18:21:54.780575デフォルトの名無しさん
2013/02/06(水) 18:38:49.09実際は処理系毎にSRFIの実装を強いられてるのはなぜか
0576デフォルトの名無しさん
2013/02/06(水) 19:28:47.89そもそもRnRSの範囲だけでSRFIは実装できない
0577デフォルトの名無しさん
2013/02/06(水) 19:33:48.420578デフォルトの名無しさん
2013/02/06(水) 20:27:20.830579デフォルトの名無しさん
2013/02/06(水) 22:10:46.53EuLispは真面目にやろうとていたのにね。
0580はちみつ餃子 ◆8X2XSCHEME
2013/02/07(木) 00:48:22.99だからモジュール化の仕組みが重要視されていた。
R6RS でようやくライブラリという名前で制定されて、import を除く全ての語彙は何らかのライブラリに属すようになった。
ライブラリシステムはライブラリ同士が干渉や衝突を起こさないように (避けられるように) 慎重にが設計されている。
これを土台にして様々な拡張をくっつけられるようになってるわけ。
なのに R7RS ではライブラリの仕組を変更しようとしてるから、
ライブラリの中身はともかく土台の部分を変えるのはなんだかなーという感じがしてる。
0581デフォルトの名無しさん
2013/02/07(木) 01:45:10.66え、これマジなの?
マジだとしたらいくらなんでもヒドすぎないか?仕様がおかしいか、SRFIがおかしいか、どっちかだろ
0582デフォルトの名無しさん
2013/02/07(木) 05:56:38.32srfi-49をrnrsの範囲で実装してみろよオラ
0583デフォルトの名無しさん
2013/02/07(木) 06:36:38.46>srfi-49をrnrsの範囲で実装してみろよオラ
いや実装してみろよ、と言われても困るんだが…
もしRNRSでそれが実装できないのなら、そんなものがSRFIに入ってるのは何かおかしくないか?、と言うのがおれの主張だよ。
0584デフォルトの名無しさん
2013/02/07(木) 06:54:16.04srfi-49は特に顕著だから挙げたけど、srfiの中にはリーダーの拡張とか仕様を越えた変更を加えるものも少なくないよ
そもそもsrfiは単なるライブラリじゃなくて、その名の通り実装に対する拡張なんだし、それの何がおかしいのか全くわからん
0585デフォルトの名無しさん
2013/02/07(木) 11:50:32.13うまくいったらrnrsに取り込もう、っていうような。単なるライブラリとは違う。
どっちかというと、RFCが出る→みんなで実装→生き残ったやつがSTD、っていう流れに
近いんじゃないか。
0586デフォルトの名無しさん
2013/02/07(木) 12:02:03.28コミュニティ的にもそれで特に困ってないし。
Javascript並みに開発者増えたら、裾野が広がったら、今のままでは困るだろうけど。
コミュニティが小さく人的リソースが少ないのだからこんなもんだ。
やるべきだと思う人はMLで議論始めればいいじゃね?
俺は今のままでいいや。
そんな感じの小さいコミュニティ。
0587はちみつ餃子 ◆8X2XSCHEME
2013/02/07(木) 12:58:11.02R6RS の文字列ポートや syntax-case は SRFI を元にしてるかなぁ。
r6rs-rationale に SRFI との関係が書いてあるよ。
0588デフォルトの名無しさん
2013/02/07(木) 15:28:45.810589デフォルトの名無しさん
2013/02/07(木) 16:52:47.23新しい計算の抽象化を考えたけどどうよ、みたいな議論の共通言語として使いたい、って色が
強いんじゃないかな。最近はどうかわからんけど。
だから仕様を大きくするよりは、意味論をフォーマルにしとこうぜ、みたいな話の方がみんな喰い付く。
0590デフォルトの名無しさん
2013/02/07(木) 18:56:21.82人がいるJavascriptは拙速気味のECMAScript4をちゃんと食い止めてる。
騒ぐのは気力、体力がいるからね。
0591はちみつ餃子 ◆8X2XSCHEME
2013/02/07(木) 19:55:22.36フェイズの概念とライブラリとマクロって個別に決められない。
ポートや入出力まわりだって文字列やバイトベクタと関係がある。
例外とコンディションは不可分だし、例外を発生し得る全ての機能と関係する。
きっちり決めようとすると関連する部分の規定も必要になって、
結果的にある程度の大きさになるのは仕方ないんじゃないかと思う。
Scheme が議論の土台だというのはわかっているけど、
その土台は案外大きいかもしれないというのが私の考えで、
R6RS に好意的な理由でもある。
0592デフォルトの名無しさん
2013/02/07(木) 21:51:06.450593デフォルトの名無しさん
2013/02/07(木) 21:57:41.860595デフォルトの名無しさん
2013/02/07(木) 22:34:57.29http://www.mutusinpou.co.jp/news/2013/01/24462.html
青森県の「λ(ラムダ)プロジェクト」が本格始動しようとしている。
λは「入」の文字にも似ていることから、県は“大入り”を願ってプロジェクトの成功を目指す。
ラムダプロジェクト概要
http://www.mlit.go.jp/common/000226796.pdf
0596デフォルトの名無しさん
2013/02/07(木) 22:36:52.150597はちみつ餃子 ◆8X2XSCHEME
2013/02/07(木) 22:50:26.410598デフォルトの名無しさん
2013/02/07(木) 23:08:59.62SxRS公理系は原始帰納関数より刑さん能力が低いのか、SRFI49は原始帰納関数では計算不可能なのか
0599デフォルトの名無しさん
2013/02/07(木) 23:29:14.32仕様読んだこともないんだから口はさむな。
0600デフォルトの名無しさん
2013/02/08(金) 00:37:59.490601はちみつ餃子 ◆8X2XSCHEME
2013/02/08(金) 00:55:32.21R6RS でポータブルに実装するのが不可能なものとかは除かれてるけど。
https://code.launchpad.net/~scheme-libraries-team/scheme-libraries/srfi
0602デフォルトの名無しさん
2013/02/08(金) 01:36:34.350603デフォルトの名無しさん
2013/02/08(金) 03:14:47.73name spaceで分けれなかったり
define-methodつかって型で分けれなかったり
するのつらかった
0604はちみつ餃子 ◆8X2XSCHEME
2013/02/08(金) 07:57:27.40SRFI-49 や SRFI-10 や SRFI-88 のようなリーダの拡張を要するものとかかな。
プリプロセッサ的なものでどうにかできなくもないけど、それはちょっと違うしなぁ。
SRFI-37 や SRFI-98 も無理っしょ。
先程 >>601 で紹介したライブラリでは場合分けして処理系が提供する機能を使って
実装しているけど、ポータブルな方法は無いはず。
0605はちみつ餃子 ◆8X2XSCHEME
2013/02/08(金) 08:24:18.310606デフォルトの名無しさん
2013/02/08(金) 08:28:34.470607デフォルトの名無しさん
2013/02/08(金) 11:49:50.010608はちみつ餃子 ◆8X2XSCHEME
2013/02/08(金) 12:38:17.24意味論の話ならこれが参考になるかも。
http://lambda.bugyo.tk/hatena/r5rs.html
0609デフォルトの名無しさん
2013/02/08(金) 13:01:50.930610はちみつ餃子 ◆8X2XSCHEME
2013/02/08(金) 14:01:58.060611デフォルトの名無しさん
2013/02/08(金) 17:01:25.680612デフォルトの名無しさん
2013/02/08(金) 17:21:39.18リンネがかわいいからしゃあねえだろ。
0613デフォルトの名無しさん
2013/02/08(金) 18:06:39.16どれも伸びてないな
R6RSだけじゃなくてR7RSも
Clojureも
チェックしきれないゾ
0614デフォルトの名無しさん
2013/02/08(金) 18:24:27.11もちろん完成度は別にして
0615デフォルトの名無しさん
2013/02/08(金) 21:06:22.680616デフォルトの名無しさん
2013/02/08(金) 21:50:52.26http://www.oreilly.co.jp/books/9784873115870/
0617デフォルトの名無しさん
2013/02/08(金) 21:58:18.370618はちみつ餃子 ◆8X2XSCHEME
2013/02/08(金) 21:59:29.36Sagittarius も未束縛変数の検出を厳密にするように変更したみたいだ。
いいネ!!
0619デフォルトの名無しさん
2013/02/08(金) 22:02:54.90これはないわー。劣化しすぎ
http://nostarch.com/sites/default/files/imagecache/product_full/lisp.png
ついでに
http://nostarch.com/realmofracket
0620デフォルトの名無しさん
2013/02/08(金) 22:20:22.400621デフォルトの名無しさん
2013/02/08(金) 23:52:30.550622デフォルトの名無しさん
2013/02/09(土) 00:06:51.320624デフォルトの名無しさん
2013/02/09(土) 00:15:50.330625デフォルトの名無しさん
2013/02/09(土) 00:21:59.430626デフォルトの名無しさん
2013/02/09(土) 01:07:23.71そういう評価もわかるけど
原著の表紙は毒々しい紫と緑の配色にしっとりした手触りの艶消しビニール
裏地は表紙のスライムに合わせた緑色の紙が貼ってあって
なんともこだわりを感じさせる装丁に仕上がっていたんだよ
それをオライリーの定型的なフォーマットに押しこめたら残念感のほうが強い
でもネタ切れ感の強い動物ではなくリスプエイリアンを持ってきたことは評価すべきか
0627デフォルトの名無しさん
2013/02/09(土) 01:27:35.20この表紙はオライリーという動物園に入れられたのかw
0628デフォルトの名無しさん
2013/02/09(土) 01:50:05.93> R5RS仕様書勉強会とか誰か開いてくれー。
どういう勉強会がお望みなの?
0629デフォルトの名無しさん
2013/02/09(土) 07:37:06.97なるほど。でもおれは今のでも好きだ。「lispなんかヤバイ」感がでてる。
clojure本の第二版も出るようだし、lisp 始まったな!
0630デフォルトの名無しさん
2013/02/09(土) 08:57:27.570631デフォルトの名無しさん
2013/02/09(土) 11:50:42.77うーん、キモい
0632デフォルトの名無しさん
2013/02/09(土) 19:24:22.750633デフォルトの名無しさん
2013/02/09(土) 20:19:45.91しかし、史朗さんの翻訳も読んでみたい。
0634デフォルトの名無しさん
2013/02/09(土) 20:25:32.59C++を使ってたから開けたら閉めるの感覚が染み付いてるし、
勝手に動いて動作速度の足を引っ張る気がして。
0635デフォルトの名無しさん
2013/02/09(土) 20:29:53.190636はちみつ餃子 ◆8X2XSCHEME
2013/02/09(土) 20:37:40.17GC の種類や、それで何をするかにもよる。
GC 有りの方がスループットは下がる可能性が高いが、ターンアラウンドタイム
は上がる場合がある。 それというのも、一般的なアプリケーションソフトは待
機時間の方が長いから、 GC 発動のタイミングをそこに持ってくることが出来
るので本質的な処理時間からメモリ管理の時間が消えるというわけ。 それと
C++ の場合はデストラクタが動けばそれに連なるオブジェクトのデストラクタ
が連鎖的に動く場合が多いんだけど、インクリメンタル GC だとメモリ回収の
タイミングを分散できるので小さな空き時間でちょこちょこ回収することも出
来る。
要は GC の特性を理解して書けばむしろ性能が上がる場合もあるってこと。
0637デフォルトの名無しさん
2013/02/09(土) 20:58:48.670638デフォルトの名無しさん
2013/02/09(土) 21:09:14.84dynamic-extent 便利だよ。エクステントを明示することで、
指定したオブジェクトをスタック上アロケートされてGCいらず。
0639デフォルトの名無しさん
2013/02/09(土) 21:39:15.08速度が重要な部分では、>>635が言うようにアロケーションが入らないようにしたり、
>>638が言うようにスタックにオブジェクトを配置したりする。
自分はやったことないけど、その部分でだけGCを停止したりもする。
処理系によってはGCの挙動をコントロールしたりもできる。起動条件とか。
ホットスポットでアロケーション入れたりすると、想像の通り酷い事になるけど。
ループの中でappendしたりとか、部分文字列を生成したりみたいな。
そういうコードを書く人も結構いる。
0640デフォルトの名無しさん
2013/02/09(土) 22:15:45.71GC→Java→C++使ってる俺すげー
じゃないのか
0641デフォルトの名無しさん
2013/02/09(土) 23:01:20.27メモリ管理を自動化する流れになってた気がするんだけど、実態は違うの?
0642デフォルトの名無しさん
2013/02/09(土) 23:25:27.71いや、それどころか、
GCのライブラリを構築できるように、規格のメモリモデルが改善されたよ。
sequence pointの後継のsequenced beforeを使って。
その辺をまとめたのはBoehmさん。Boehm GCの。
0643デフォルトの名無しさん
2013/02/09(土) 23:37:01.090644デフォルトの名無しさん
2013/02/09(土) 23:45:23.19それがどうしたの?
0645デフォルトの名無しさん
2013/02/10(日) 00:03:31.060646デフォルトの名無しさん
2013/02/10(日) 01:24:41.280647デフォルトの名無しさん
2013/02/10(日) 02:02:28.790648デフォルトの名無しさん
2013/02/10(日) 05:35:20.08Javaでも閉じる方は明示するか手動でやるわけじゃん
0649デフォルトの名無しさん
2013/02/10(日) 12:13:58.750651デフォルトの名無しさん
2013/02/11(月) 00:35:51.68SICPとかプログラミング言語SCHEMEとか定番のところは読んだ(全部理解できたわけじゃないですけど)と思うので、
変わり種とか、直接にはSCHEMEと関係ないものでもこれは読んどけっていうのとかを教えて下さい。
0652デフォルトの名無しさん
2013/02/11(月) 00:46:23.220653デフォルトの名無しさん
2013/02/11(月) 00:46:54.22Concepts, Techniques, and Models of Computer Programming
0655デフォルトの名無しさん
2013/02/11(月) 02:14:24.21let over lambda, land of lisp, 素数夜曲
達人プログラマー、Release it!、ハッカーと画家、情熱プログラマー
0656デフォルトの名無しさん
2013/02/11(月) 02:59:31.42実用的な, そこそこのサイズのプログラムを書いて, 自分なりに
リファクタリング(仕様のリファクタリングも含む)するのが一番
プログラム作る上では, 各言語の規格書なり SICP 系の本とかで
OK なんだろうけど, 与えられた問題をエレガントに解きたい場合は,
対象領域の専門書とかを読むしか無いんじゃないか?
計算幾科学的にはエレガントな手法でも, 具体的なシステム相手の
場合は役に立たないことも結構あるし
0657デフォルトの名無しさん
2013/02/11(月) 04:16:28.70オライリーのGauche本→R5RS→和田本 でschemeが分かった気になれる
0659デフォルトの名無しさん
2013/02/11(月) 10:15:49.230660デフォルトの名無しさん
2013/02/11(月) 10:39:13.170661はちみつ餃子 ◆8X2XSCHEME
2013/02/11(月) 12:34:08.07ことも多い C++ だけど、ひとつひとつの機能についてそれが必要だった理由を順を追って読んでいく
と無駄なものなどひとつも無いことが理解できる。
発展の歴史には既存の開発ツールとの連携を壊さないようにだとか、 C と足並みを揃えていくことだ
とか、書籍の揃い具合、仕様に精通した人材の育成、ライブラリの成熟、上位互換性、その他諸々の
要素が絡み合っている。 理論上の正当性に拘泥せず現実との折り合いを付けてきた「実際に使われる
言語」の重みというのはただの仕様ではなく仕様に連なるそれらの要素が含まれているわけだ。
Lisp が C++ を見習うべきだとか、どちらが良い選択などと言うつもりはないんだけど、 Lisp が選
んだ歴史と選ばなかった歴史を比較するのは有意義だと思う。
例えば、「関数型言語」という概念が生まれた背景には当然だけど関数型でない言語があるわけで
(全ての言語が関数型なら関数型という言葉は必要ない) 、関数型が関数型たる根源は何かというと関
数型でない言語との差異によって関数型なんだということになる。 同様に Lisp とは何かを理解する
ためには Lisp ではない言語との差異を理解することは必要だと思う。 違う性質の言語のひとつか
ふたつくらいは習熟とまではいわずとも読物を読むくらいはしておいて損はない。
0663デフォルトの名無しさん
2013/02/11(月) 13:11:19.400664デフォルトの名無しさん
2013/02/11(月) 14:11:40.34LispにC++を真似ろとは言わんがLispが選ばなかった歴史を学んでみるのもまた有意義であろう
Lispが何者であるかをよく知るためにはLisp以外のことも知っておいたほうが良い
0665デフォルトの名無しさん
2013/02/11(月) 15:48:37.860666デフォルトの名無しさん
2013/02/11(月) 16:01:51.350667デフォルトの名無しさん
2013/02/11(月) 16:07:15.280668デフォルトの名無しさん
2013/02/11(月) 16:20:07.92Scheme手習い/修行、素数夜曲、SICPでは不足?
0669デフォルトの名無しさん
2013/02/11(月) 18:55:41.63何をいまさら…
0670デフォルトの名無しさん
2013/02/11(月) 19:03:13.04不足って言うか、ちょっと寄り道したいなーっていう感じ
0671デフォルトの名無しさん
2013/02/11(月) 19:27:16.540672デフォルトの名無しさん
2013/02/13(水) 01:14:58.41トレードオフがあるのはわかるけど、それでもあえてこの要素はおさえときたいっていう要素ってあるかな。
速度とかエラーチェックの親切さとか、ローカライズとか、どれ?
0673デフォルトの名無しさん
2013/02/13(水) 01:43:34.410674デフォルトの名無しさん
2013/02/13(水) 05:20:20.200675デフォルトの名無しさん
2013/02/13(水) 12:03:21.260676はちみつ餃子 ◆8X2XSCHEME
2013/02/13(水) 12:51:53.36信頼性。
フルメタルパニックってライトノベルがあるのを知ってるかな? その話の中で意思の力を物理力に変換するラム
ダドライバ (←どうでもいいけどこの名前が良い) という兵器が登場する。 主人公は意思なんて曖昧なものを使
うのは兵器として不適格だと主張する。 引き金を引いたら確実に弾が出ることこそ兵器として必要なのだと。
威力より信頼性が大事なのだと。
ゴルゴ13は主人公が超人的なスナイパーってことは誰でも知っているよね。 この主人公がメインで使っているラ
イフルがスナイパーライフルではなくアサルトライフルである「アーマライト M-16」ってのは知ってたかな?
スナイパーライフルは連射が出来ないので咄嗟の事態に対応できない (無防備な瞬間が出来てしまう) というこ
とと、充分なメンテナンスが出来る準備がないと使い物にならないということ等が理由として上げられている。
自分の命運を託すにはいつでも使えることが大事ってことだね。
そんなわけで、信頼性が大事。 で、言語処理系に必要な信頼性っていうのは書いた通りに動くっていうことが最
低限のラインだと思う。 十分に規格を満たすか、それが出来ないのならドキュメントに記載するくらいはされて
ないと。 変に動くぐらいならいっそエラーで停止してくれた方がいい。
0677デフォルトの名無しさん
2013/02/13(水) 13:11:13.940678デフォルトの名無しさん
2013/02/13(水) 14:30:19.93処理系に信頼性が必要ってのには大賛成。
0679はちみつ餃子 ◆8X2XSCHEME
2013/02/13(水) 16:00:24.12ラムダドライバって言いたかっただけ
>>678
信頼性とは何かということになると人によって言うことは違いそうだけどな。
0680デフォルトの名無しさん
2013/02/13(水) 16:25:58.55俺がLISP処理系作ったらラムダドライバって名前にするわwww
0681デフォルトの名無しさん
2013/02/13(水) 20:00:34.05信頼性重要ってところははげしく同意。
gccでさえたまにバグ踏むことがあるけどバグトラッキングがしっかりしててワークアラウンドもすぐ出るからそういう体制も含めるとかなり信頼性は高かったりする。
俺的には信頼性を評価する重要ポイントは物の出来だけでなくて支援(互助)体制だと思う。
やりすぎるとRUBYみたいにクソな質問ばっかりのコミュニティになるけどな。
0682デフォルトの名無しさん
2013/02/13(水) 20:45:14.28自分で信頼に足る処理系を作ればいいんじゃねーの。そのぐらいできるんだろ?
0683はちみつ餃子 ◆8X2XSCHEME
2013/02/13(水) 20:54:23.51いざというとき手を入れやすいというのは強みだよな。
モドキ程度のものなら作ったことはあるから発展させてみるわー。
0684デフォルトの名無しさん
2013/02/13(水) 21:53:58.460685デフォルトの名無しさん
2013/02/14(木) 02:07:49.120686デフォルトの名無しさん
2013/02/14(木) 02:18:56.99規格厳守なら1週間あればできる
0687デフォルトの名無しさん
2013/02/14(木) 02:38:31.54記号論理学、数理論理学がテーマらしいので今更読む必要ない人が殆どだろうけど。
0688デフォルトの名無しさん
2013/02/14(木) 05:53:18.81そういうのは作ったうちに入らんだろう。
はちみつ餃子SchemeはC++で書かなきゃダメだ。
0689はちみつ餃子 ◆8X2XSCHEME
2013/02/14(木) 12:37:03.07今のところ公開するつもりはないし、
公開するとしても別名で出すよ。
0690デフォルトの名無しさん
2013/02/14(木) 13:23:08.44無駄なことする必要ないと思うけど
0691デフォルトの名無しさん
2013/02/14(木) 13:52:34.77新しい処理系とかよりもキラーアプリの存在が重要。
継続ベースのWebアプリフレームワークとか・・・
0692デフォルトの名無しさん
2013/02/14(木) 14:55:42.99Gaucheって継続ベースのWebアプリかけなかったっけ?
0693デフォルトの名無しさん
2013/02/14(木) 15:03:38.110694デフォルトの名無しさん
2013/02/14(木) 15:17:30.340695デフォルトの名無しさん
2013/02/14(木) 16:30:09.36怖がられたりしませんか (震え声
0696デフォルトの名無しさん
2013/02/14(木) 16:48:31.28きっとそのときはアニオタさんがらむだっちゃドライブ作ってくれる
0697デフォルトの名無しさん
2013/02/15(金) 00:25:13.080698デフォルトの名無しさん
2013/02/15(金) 00:35:23.58ハレーの雫を〜 ?
0699デフォルトの名無しさん
2013/02/15(金) 11:06:00.470700デフォルトの名無しさん
2013/02/15(金) 15:34:40.05信頼性を測るベンチマークみたいのはないのでしょうか
0701はちみつ餃子 ◆8X2XSCHEME
2013/02/15(金) 18:00:50.94信頼性が何かっていうのは人によって違うけど、
俺が考えているように規格適合に重きを置くならベンチマークというよりテストだろ。
R6RS ではこれが有名だと思う。
http://svn.plt-scheme.org/plt/trunk/collects/tests/r6rs/
規格には適合した上で、実用にするなら堅牢性も重要項目かな。
堅牢性を測るならストレステストの類が有用だと思うんだけど、
定番というようなものは知らないなぁ。
Ypsilon のソースコードと一緒に入ってるテストの中に syntax-rules のストレステストは入ってるね。
0702デフォルトの名無しさん
2013/02/15(金) 18:10:26.37そうか。
0703デフォルトの名無しさん
2013/02/16(土) 16:05:50.240704デフォルトの名無しさん
2013/02/16(土) 17:15:44.740705デフォルトの名無しさん
2013/02/16(土) 17:51:56.840706デフォルトの名無しさん
2013/02/16(土) 18:14:25.48gosh: "error": unbound variable: ls1
みたいに行番号もバックトレースも出してくれず苦労するんですが、なんとかなりませんか?
それとも、皆さんこんな環境でプログラミングをしているのですか?
0707デフォルトの名無しさん
2013/02/16(土) 18:31:47.910708デフォルトの名無しさん
2013/02/16(土) 18:54:41.36ttp://practical-scheme.net/gauche/man/gauche-refj_16.html
0709デフォルトの名無しさん
2013/02/16(土) 19:23:47.77(define-macro (mcflag expr flag)
(let ([x 1])
(when (eq? flag 'a)
(set! x 2))
`(+ ,x ,expr)))
(mcflag (+ 10 1) 'a);=>12 should be 13
(mcflag (+ 10 1) 'b);=>12
0710はちみつ餃子 ◆8X2XSCHEME
2013/02/17(日) 02:44:02.16こうかけばいい。
(define-macro (mcflag expr flag)
(let ([x 1])
(when (equal? flag ''a)
(set! x 2))
`(+ ,x ,expr)))
0711デフォルトの名無しさん
2013/02/17(日) 08:35:18.91他の言語より短い関数を書くことが多いことを差し引いても、もう少し支援機能が欲しい。
0712デフォルトの名無しさん
2013/02/17(日) 13:18:17.70忘れてるみたいだけど、あれまだ1.0前なんだぜ。
http://practical-scheme.net/gauche/devinfo-j.html
0713はちみつ餃子 ◆8X2XSCHEME
2013/02/17(日) 13:35:55.81http://www.koguro.net/prog/codecheck/index-j.html
ニコ動に紹介動画があるので参考に。
http://www.nicovideo.jp/watch/sm2585074
glint は Gauche が生成した中間コードを元に解析してるから、
原理的には Gauche 自体に glint 相当の機能を組込むことも可能なはずだけど、
Gauche は実行性能重視なところがあってエラーチェックはそれほど厳しくできない。
現時点では (let ((1 2)) 1) みたいなあからさまにおかしいコードがそのまま評価できてしまったりする。
言語の性質上、静的に解析しきれないところも当然あるから Gauche 自体のデバッグ機能の充実は望ましいけど、
実行モデルに合っていて、実行性能の足を引っ張らないようなデバッガというのはなかなか難しいみたい。
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3a%E3%83%87%E3%83%90%E3%83%83%E3%82%AC
何か提案があるのなら書いておけば今のうちなら考慮してくれるかも?
0714デフォルトの名無しさん
2013/02/17(日) 14:10:51.63WiLiKiに書き込んでみたらって言ったら凄いこと書き始めて
うわなにをするやめろ的な以下略。
0715デフォルトの名無しさん
2013/02/17(日) 14:35:08.990716デフォルトの名無しさん
2013/02/17(日) 14:49:25.71デバッグが終われば 高速のscheme処理系で実行すればいいと思う
0717はちみつ餃子 ◆8X2XSCHEME
2013/02/17(日) 15:30:11.72http://legacy.e.tir.jp/wiliki?eval-sv
0718デフォルトの名無しさん
2013/02/17(日) 16:30:39.79unbound variableみたいなエラーなら、書いたコードをモジュールにして
ユニットテストでtest-module流せば見つけてくれるよ。
実行時に高価なエラーチェックはテストでやるって方針らしいし。
Schemeは末尾呼び出し最適化があるので、もともとスタックトレースはあまり当てにできない。
0719デフォルトの名無しさん
2013/02/17(日) 17:53:50.230720デフォルトの名無しさん
2013/02/17(日) 17:54:32.94あったな、そんな流れw
0721デフォルトの名無しさん
2013/02/17(日) 18:31:35.64oshiete-shiro-san
にわらた
無駄にARToolKitとかすげー
0722デフォルトの名無しさん
2013/02/17(日) 19:49:24.42今見たら四年も前だぜ。仲間が欲しいので、
餃子の中の人も同じ目にあえば良いと思います!
0723デフォルトの名無しさん
2013/02/17(日) 19:52:32.85初心者だから、ツールの情報を貰って自分で進めばいいじゃん。
学校じゃないんだし。
0724デフォルトの名無しさん
2013/02/17(日) 22:16:50.07初心者は和田本読んで scheme on scheme を作ろう
0725デフォルトの名無しさん
2013/02/18(月) 04:34:03.110726デフォルトの名無しさん
2013/02/18(月) 06:58:25.950727デフォルトの名無しさん
2013/02/19(火) 02:05:30.460728デフォルトの名無しさん
2013/02/19(火) 09:07:47.340729デフォルトの名無しさん
2013/02/19(火) 19:45:16.111つの関数が長くなりすぎる
(define (f x)
(define (member-f1 ...
(define (member-f2 ...
(define member-ver 2)
...
まるでC++ のclassみたいになる。もっとLispらしいスタイルはないものか
0730デフォルトの名無しさん
2013/02/19(火) 19:53:25.460731デフォルトの名無しさん
2013/02/19(火) 21:34:16.70(define counter 1)
(define (inc-counter) (set! counter (add1 counter))
...
)
みたいなの多様してしまう。なかなか外に関数だせない
0732デフォルトの名無しさん
2013/02/19(火) 21:56:58.88> (define (member-f1 ...
> (define (member-f2 ...
これって, 個別に定義すべき関数?
0733デフォルトの名無しさん
2013/02/20(水) 01:31:57.910734はちみつ餃子 ◆8X2XSCHEME
2013/02/20(水) 13:57:41.47オブジェクト指向風にするのは悪くないよ。
SICP の第3章あたりで紹介されているテクニックに倣って表現するとしたらこんな感じかな。
(define make-counter
(let ((c 1))
(lambda()
(lambda(method)
(case method
((inc) (set! c (+ c 1)))
((dec) (set! c (- c 1)))
((get) c))))))
(let ((counter (make-counter)))
(display (counter 'get))
(newline)
(counter 'inc)
(counter 'inc)
(display (counter 'get))
(newline))
Gauche のライブラリの中では make-text-progress-bar なんかがこういう設計になってる。
なんでも有りなのが Lisp のいいところなので、やりやすいと思ったようにやればいい。
ある程度の規模のプログラムを書こうとするとオブジェクト指向的メカニズムのサポート無しだとしんどいと shiro さんも言ってる。
http://practical-scheme.net/wiliki/wiliki.cgi?l=jp&p=Scheme%3A%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E8%A1%A8%E7%8F%BE#H-ej37ta
0735デフォルトの名無しさん
2013/02/20(水) 14:15:43.12それで慣れてるからというのがあるけど
*nix系のAPIはいきなりexitとかアホなライブラリがあるから参考にならん
0736デフォルトの名無しさん
2013/02/20(水) 22:04:33.860737はちみつ餃子 ◆8X2XSCHEME
2013/02/21(木) 00:07:04.46おそらく >>735 が言うハンドル的というのは、
具体的な意味をもつ値ではなくオブジェクトを表現するユニークなラベルとしての値という意味で言ってるんだと思う。
R6RS で「不透明 (opaque) 」と表現してるのが近いんじゃないかな。
0738デフォルトの名無しさん
2013/02/22(金) 00:38:17.51これに入れ替えてくれないものか
これならmutableでないlistでも動く
(define-macro (lset-union! l1 lst)
`(set! ,lst (lset-union ,l1 ,lst)))
他の!がついてる関数も同じ感じで入れ替えてほしい
0739デフォルトの名無しさん
2013/02/22(金) 04:15:19.42lset-unionに対してlset-union!が用意されてる唯一の理由は「セルを節約できる*可能性がある*」
ってことだけで、lstが指すリストが更新されることはもともと保証されてないよ。
何か違うものを欲しているように見えるが。
0740はちみつ餃子 ◆8X2XSCHEME
2013/02/22(金) 10:19:40.82R6RS だと返却値は未規定という表記は無くなった。
こういうのと、セルの再利用の可能性があるってだけのものを一緒にしちゃってるのはあまり良くない気がする。
0741デフォルトの名無しさん
2013/02/22(金) 20:55:43.05正規表現抹茶あたり組んでみたけど、なんか飽きちゃったなあ。
なんか面白いテーマないかな。
プログラマとして勉強になるのかな、と思ってたけど、CでもRubyでもできるよ
ねこんなのは。
0742デフォルトの名無しさん
2013/02/22(金) 21:00:15.230743はちみつ餃子 ◆8X2XSCHEME
2013/02/22(金) 22:33:25.22Lispにしかないものってやっぱマクロだよね。
Perlとかにも有るっちゃ有るがS式を前提としないものはなんか違うなーという感じ。
0744デフォルトの名無しさん
2013/02/23(土) 01:59:31.32マルチ乙
0745デフォルトの名無しさん
2013/02/23(土) 02:06:52.76実用的なマクロがあるのが唯一、 lispだと思う
0746デフォルトの名無しさん
2013/02/23(土) 02:12:27.160747デフォルトの名無しさん
2013/02/23(土) 03:11:47.490748デフォルトの名無しさん
2013/02/23(土) 09:27:09.90Lispコンパイラの作成(最適化を含む)
0749デフォルトの名無しさん
2013/02/23(土) 12:10:01.59略
> lispやってみて、階乗から始まってフィボナッチ、ハノイの塔、クイックソート
>
0750デフォルトの名無しさん
2013/02/23(土) 12:12:05.540751デフォルトの名無しさん
2013/02/23(土) 13:46:14.03そう考えると伝統的なマクロは本当に手頃で実用的。
hygienic macro? syntax-caseにするのかsyntactic closuresにするのかexplicit renamingにするのか、
一定のコンセンサス得てから出直して来てください。
0752はちみつ餃子 ◆8X2XSCHEME
2013/02/23(土) 14:19:56.52そんでもって伝統的マクロも模倣できる。
言語のユーザーにしてみればどれでもいいんだよ。
使い難いなら適当な皮をかぶせればいいんだから。
どれかひとつに決まらないのは、使い勝手なんかよりも、どれがプリミティブにふさわしいかという点で合意できないからだと思う。
(R6RS で syntax-case を採用したのは失敗という意見が多いけど。)
Scheme の仕様を議論するときに手頃感や実用性は後付けでいいの。
プログラマが手頃にしたい、実用的にしたいと思ったときにそれが出来る仕組があるってことが必要なんだよ。
0753デフォルトの名無しさん
2013/02/23(土) 14:41:37.430754デフォルトの名無しさん
2013/02/23(土) 14:42:28.36http://blog.livedoor.jp/dankogai/archives/51854832.html
スーパーハッカー子飼い先生もお勧め
0755デフォルトの名無しさん
2013/02/23(土) 14:52:48.61そういう合意を早く得てプリミティブを決めないの? って話だよ。決めにくいのはわかるけど。
APIが三種あるけどエミュレートは簡単にできるから、好きなの選べって初学者に言うの?
マクロが三種類あるAPIで書かれて、ふたつは消えると分かってて読む側は三種類覚えるわけ?
これって傍から見るとかなり微妙な話だよ。
0756デフォルトの名無しさん
2013/02/23(土) 14:57:55.49そういう意味でsyntax-rulesについて言及してない。
0757デフォルトの名無しさん
2013/02/23(土) 16:10:20.95実用上ほぼ問題ないし
他はなんでhygienicじゃないとダメなのか理解した上で手を出したらいい
0758はちみつ餃子 ◆8X2XSCHEME
2013/02/23(土) 16:56:39.54俺が >>752 で言いたかったのは、
Scheme の仕様は使い勝手の良さで決めるべきじゃないってことと、
伝統的マクロはプリミティブになりえないってことであって
決めなくていいってことじゃないよ。
0759デフォルトの名無しさん
2013/02/23(土) 19:31:33.64酷い書評だな
スーパーハッカーじゃなくスーパーバカの間違いだろ
0760デフォルトの名無しさん
2013/02/23(土) 20:05:36.33敷居が低そうだし、これまでのどの本よりも入りやすそうではある。
数学数学しすぎてないし。
0761デフォルトの名無しさん
2013/02/23(土) 21:42:21.35ようやく意図を理解できたわ。hygienic macroのアプローチを扱き下ろしてる訳じゃない。
そういう風に勘違いさせたなら悪かった。皮肉ってるのはコミュニティの動きの鈍さの方。
五年前と状況が一緒に見えるんだけど、いつ議論は収束すんの? 来世?
0762デフォルトの名無しさん
2013/02/23(土) 22:53:33.870763デフォルトの名無しさん
2013/02/23(土) 23:29:17.410764デフォルトの名無しさん
2013/02/24(日) 01:28:33.11gaucheを使っています
なぜahogeが定義されないのかを教えてください
0765デフォルトの名無しさん
2013/02/24(日) 01:33:43.40define-macro使えばいいよ
0766デフォルトの名無しさん
2013/02/24(日) 02:07:02.42今日早速購入
やっぱ日本語だとすらすら読めていいですね
これなら1週間ぐらいで読破できる
0767デフォルトの名無しさん
2013/02/24(日) 02:12:54.61そうだったんですね
define-macroを使ってできました
ありがとうございます
・・・そういえば貼ったコードのカッコがめちゃくちゃでした
0768デフォルトの名無しさん
2013/02/24(日) 03:26:53.87(define-macro (test ls)
(map (^x `(define ,(string->symbol (string-append "a" (symbol->string x))) 0))
ls))
(test (hoge fuga))
こんな感じにしたら
((define ahoge 0) (define afuga 0))
と展開されてしまってダメだったんですけど何か解決方法はありませんか?
0769デフォルトの名無しさん
2013/02/24(日) 06:17:11.32(define-macro (test ls)
(cons 'begin
(map (^x `(define ,(string->symbol (string-append "a" (symbol->string x))) 0))
ls)))
0770デフォルトの名無しさん
2013/02/24(日) 15:40:06.220771はちみつ餃子 ◆8X2XSCHEME
2013/02/24(日) 16:18:53.28理論的に明確な差がないならしばらく放置しといてデファクトスタンダードがどれになるか待つしかないんじゃねーの。
今のところは explicit renaming が優勢っぽいから R7RS large で一区切りつくと思う。
それでも R8RS ではまた覆る可能性もあるから安心できないのが Scheme だけどな。
0772デフォルトの名無しさん
2013/02/24(日) 17:07:54.05もの凄く読みたいのに
書籍で床が抜けそうで新規書籍購入禁止令中につきebook版待ってる状態で涙目(床がゆがんできてかなりやばい)
自炊用に裁断機とスキャナ買うかマジ悩み中
0773はちみつ餃子 ◆8X2XSCHEME
2013/02/24(日) 20:56:52.70仕様の一部というわけではなくて syntax-rules の土台になりうる方式の一例として紹介してるだけだけど。
syntax-case 方式からパターンマッチを無くしたような感じ。
0774デフォルトの名無しさん
2013/02/24(日) 22:15:16.78うちの構造は? どんなとこにどのくらい住んでんの?
うちも長期間を考えるとやばいのかな?
うちは書籍だけで 1t くらいあるんで反面教師として知っておきたい
一昨年引越した時、引越し業者がトラック変えに行った覚えがある
0775デフォルトの名無しさん
2013/02/24(日) 22:38:27.490776デフォルトの名無しさん
2013/02/24(日) 22:38:29.190777はちみつ餃子 ◆8X2XSCHEME
2013/02/24(日) 22:47:00.87健全性を維持できないケースがある。
http://blog.practical-scheme.net/shiro?20100425-scheme-macro
0779デフォルトの名無しさん
2013/02/24(日) 23:03:29.11調べる為に持ってるなら自炊した方が良い。
尤もLisperならその全てを卵焼き作る間に実装してしまうはずだがw
0780はちみつ餃子 ◆8X2XSCHEME
2013/02/24(日) 23:14:58.90俺はそんなに大量の本を持ってるわけじゃないが、
コレクション欲は理解できる。
合理的に考えればデータ化すればいいんだけどなー
0781デフォルトの名無しさん
2013/02/24(日) 23:21:30.760782デフォルトの名無しさん
2013/02/24(日) 23:25:17.61リンク先読んだけど、要はif とかを束縛しなきゃ問題にならないんじゃないの?
そんな回避策のあるレアなケースのために、シンプルさを犠牲にするのって割に合わなくない?
オレの読み方が違ってるのかなぁ。
0783デフォルトの名無しさん
2013/02/24(日) 23:32:02.77それだけじゃ部屋いっぱいにはならない。
みなさんどんな本を集めておられるのか教えてくだされ。
0784デフォルトの名無しさん
2013/02/24(日) 23:54:18.370785デフォルトの名無しさん
2013/02/24(日) 23:56:07.74letとかでそのクロージャにifとかの実体を束縛してやることで、健全性を保つことはできないのかな
(define-macro hoge
(let1 _if if
(lambda args body ...)))
こんな感じで
マクロを展開するタイミングでは特殊形式の実態を値として扱うのもアリだと思うし
0786デフォルトの名無しさん
2013/02/24(日) 23:57:07.970787はちみつ餃子 ◆8X2XSCHEME
2013/02/25(月) 00:00:47.74if とかの構文に限らないよ。
Gauche でこんなのを書いたとして、
三つめの式が #t を返す (グローバルな foo を呼ぶ) ように bar を定義できる?
(define (foo) #t)
(define-macro (bar) '(foo))
(let ((foo (lambda() #f))) (bar))
Gauche の場合はモジュールを使えばできなくはないけど、
Scheme として足らないことにはかわりないと思う。
もういちど記事を見て欲しいんだけど、
CL と違って Scheme は Lisp-1 であるせいで、
より衝突の危険があるってことが書いてあるよ。
> もっともSchemeの場合、Lisp-1であるせいで、
> CLにはない、 ローカル変数が標準関数をシャドウしちゃう危険がある。
> マクロが関数listへの 呼び出しを埋め込んでて、
> 使われる環境でlistなんていうローカル束縛があると まずいわけだ。
0789はちみつ餃子 ◆8X2XSCHEME
2013/02/25(月) 00:08:31.31いや、やっぱそれは無理だわ。
if の内側を第一級にするんだと意味論の大幅な変更が要る。
識別子としての if を扱えるようにするのなら、
既出のハイジニックマクロと同じだし。
0790デフォルトの名無しさん
2013/02/25(月) 00:29:33.47マクロが展開されるのとifみたいな特殊形式が認識されるのはタイミングとしては同じだし、マクロが定義される環境をはっきりしてやれば特に矛盾はないと思うんだけど
そりゃ(define if2 if)みたいのを許可しようとしたら大変だろうけど、それとはまた別の問題なのでは?
evalの中で#<syntax>が使いたいみたいな話がgaucheで出たときに、似たような話になった気がするけど正直よくわかんない
0791デフォルトの名無しさん
2013/02/25(月) 00:39:54.880792デフォルトの名無しさん
2013/02/25(月) 00:43:04.03最悪特殊構文については諦めるにしても、一貫性があって悪くない手段じゃないかと愚考する
と思ったけど、コンパイル時と実行時の環境が同じだからできる芸当だねこれ
インタプリタだけならいいけど静的にコンパイルする可能性を考えるとダメっぽい
0793デフォルトの名無しさん
2013/02/25(月) 00:50:58.67そういう考え方ももちろんあって、Paul GrahamのArcがそれ。
ただ、hygienic macroの方も実装がややこしいだけで、
使う側からすると伝統的マクロと同じくらい簡単。
0794デフォルトの名無しさん
2013/02/25(月) 01:21:04.12素数夜曲そんなにいい本なん?
0795はちみつ餃子 ◆8X2XSCHEME
2013/02/25(月) 01:44:50.73ああそうか、 CL で伝統的マクロがうまくいってるのは Lisp-2 もそうだがフェイズの違いもあるんだな。
0797デフォルトの名無しさん
2013/02/25(月) 02:33:53.51でもLand of Lispの方が楽しそうじゃん。(←反論になってない)
0798はちみつ餃子 ◆8X2XSCHEME
2013/02/25(月) 02:57:33.16まぁ比較するようなものではないな。 両方読んどけばいいよ。
0799デフォルトの名無しさん
2013/02/25(月) 03:02:25.45「表紙のエイリアンがかわいい!きっとあの人Lisperなのね!」
周りの女の子もそう思うはず。※
黒いふくろう表紙では、、
「あの人、夜のぞきやってるんじゃないの?キモヲタ通報するわよ!」
ってなるでしょ。
まあスタバで人の持ち物ヲチしてる女の知的水準なんてそんなもんだ。
ただ、個人的には素数夜曲は鞄に入らない。
それだけの理由でLand ofを先に読み終わると思う。
0800デフォルトの名無しさん
2013/02/25(月) 05:47:01.01そのbarの位置はfooがローカルに束縛されてるのだから、グローバルなfooを参照する普通の式は書けないよね?
つまり、「健全な」マクロは式変形以外のことをやっている訳で、個人的にはそれが気持ち悪い。
考え方が違うのだろうけど。
0801デフォルトの名無しさん
2013/02/25(月) 05:51:43.84健全なマクロってlispと違う言語に見える。でも試してみるよ。
arc も触ってみたい。(最近arcの名前聞かないね)
0802デフォルトの名無しさん
2013/02/25(月) 13:08:00.79「Head first Scheme」
「Steel & Sussman Programing Langage Scheme」
0803はちみつ餃子 ◆8X2XSCHEME
2013/02/25(月) 15:02:46.19なるほど。 マクロが単に短く書くだけのものとして見るなら、
本来書けないものを書けるようにするのは余計っていうことか。
そういう発想はなかったな。
Scheme の特徴に第一級継続があるわけだけど、
継続の概念そのものは言語にかかわらずあるのであって、
陽に扱えるようにしたところに特徴がある。
それと同じように「文脈情報」も常に背後には有るものと考えていたので、
伝統的マクロは情報を捨てているというイメージだった。
0804デフォルトの名無しさん
2013/02/25(月) 20:41:00.93バグ出しが終わる2刷りを待つか
0805はちみつ餃子 ◆8X2XSCHEME
2013/02/25(月) 20:45:41.10syntax-rules や syntax-case がパターンマッチを軸に据えてるせいで
異質に見えるんだと思うけど、それが健全なマクロの全てではないよ。
なんだか皆が言う「健全なマクロ」ってそれぞれイメージしてるものが違うくない?
explicit renaming なら使い勝手としては伝統的マクロとそんなにかわんないよ。
健全性の話と具体的な API の話がごっちゃになってる気がする。
syntax-rules が嫌いっていうだけの人も健全性に懐疑的になってないか?
0806デフォルトの名無しさん
2013/02/25(月) 22:32:16.29そりゃそう思われることもあるだろ。Gaucheでもまだ使えんし、explicit renamingなんて普通知らねーよ。
0807デフォルトの名無しさん
2013/02/25(月) 22:33:35.82SchemerのためにGaucheでの実装も用意されているとは徹底してるなw
ttp://blog.practical-scheme.net/shiro/20130223-land-of-gauche
0809デフォルトの名無しさん
2013/02/25(月) 23:02:18.97Shiroさんすばらしい
0810デフォルトの名無しさん
2013/02/26(火) 01:05:04.880811デフォルトの名無しさん
2013/02/26(火) 01:36:12.39俺的には日本語で言うなら、環境の方がしっくりくる。
違ってたらゴメン。
0812デフォルトの名無しさん
2013/02/26(火) 02:20:34.070813デフォルトの名無しさん
2013/02/26(火) 06:42:51.70gauche で land of lisp、やろうと思ってあのに先にやられてしまったw
0814デフォルトの名無しさん
2013/02/26(火) 07:15:58.15他の人も書いてるけど文脈情報って何?S式に書けること?
0815はちみつ餃子 ◆8X2XSCHEME
2013/02/26(火) 07:58:23.92文脈情報は R6RS 原文では contextual information と書いてある。
何かって聞かれると説明に困るな。
環境 (environment) に近いとは思うけど、環境の方が意味が広いと思う。
0816はちみつ餃子 ◆8X2XSCHEME
2013/02/26(火) 08:19:58.71(define foo
(lambda(x)
(lambda(y)
(+ x y))))
(define bar (foo 1))
(define baz (foo 2))
x が 1 であるような環境に覆われたクロージャが bar で、
x が 2 であるような環境に覆われたクロージャが baz ってことになるじゃん?
つまり、環境ってのは動的な性質を含んでると思うんだよ。
文脈ってのはもっとシンプルに lambda(x) の x と (+ x y) の x が同じって
いう判断をくだせるような静的な情報っていうイメージ。
というのが私の理解なんだけど、どう思う?
あと、 R6RS では環境 (environment) をちょっと違う意味で使っているような気がする。
0817デフォルトの名無しさん
2013/02/26(火) 09:39:56.25>>811だけど、contextとenvironmentの明確な違いとか意識した事なかったわ。
なんとなく、グローバルな束縛とか式の評価に必要な情報をまとめて「環境」って理解してただけ。
自分で実装してみたりすると、やっぱり違うものなんだろうか?
0818デフォルトの名無しさん
2013/02/26(火) 19:40:03.12context: レキシカルに参照できるもののスナップショット
environment: 実行時に参照できるもののスナップショット
0819デフォルトの名無しさん
2013/02/26(火) 21:22:05.600820はちみつ餃子 ◆8X2XSCHEME
2013/02/26(火) 22:16:07.37そんな感じでいいと思うけど、
環境を作るには字句上の対応付け (文脈) が解決されているのは大前提なので、
環境の情報には文脈も含まれていると思う。
マクロ (健全なマクロ) がない言語だったら、少なくとも言語のユーザーが
文脈の概念だけ切り取って考えることなんてなさそうだよなぁ。
0821デフォルトの名無しさん
2013/02/26(火) 22:47:26.920822デフォルトの名無しさん
2013/02/26(火) 23:10:36.260823デフォルトの名無しさん
2013/02/26(火) 23:48:50.160824デフォルトの名無しさん
2013/02/26(火) 23:48:56.020825はちみつ餃子 ◆8X2XSCHEME
2013/02/27(水) 07:52:33.73トランスレータが走るのは実行だと思う。
0826デフォルトの名無しさん
2013/02/27(水) 12:28:20.130827デフォルトの名無しさん
2013/02/27(水) 22:11:05.39それを実行するという2フェーズだけど、
schemeやLispの場合は、マクロ展開と式評価が行き来しながら進む過程
が実行なんだと理解している。
なので静的な「文脈」と動的な実行「環境」の区別は曖昧かも。
0828はちみつ餃子 ◆8X2XSCHEME
2013/02/27(水) 22:41:25.94を受け取れることになってるから、確かに区別は微妙なのかもしれないなぁ。
0829デフォルトの名無しさん
2013/02/27(水) 23:10:35.68マクロは残っているのか
0830デフォルトの名無しさん
2013/02/27(水) 23:28:29.99展開されるときは全く別の環境なんで, 渡せないと色々
不具合出るんじゃないかなぁ
0831はちみつ餃子 ◆8X2XSCHEME
2013/02/28(木) 19:21:33.52最後に CL って付く単語が目に入ると Common Lisp かと思って「おっ?」ってなる。
0832デフォルトの名無しさん
2013/02/28(木) 19:48:47.75わかる。
0833デフォルトの名無しさん
2013/02/28(木) 22:34:21.06逆ステマみたいなもんで。
0834デフォルトの名無しさん
2013/02/28(木) 22:52:56.39楽しそうだからSchemeも混ぜて欲しい
0835デフォルトの名無しさん
2013/03/01(金) 09:06:17.961万行のC言語等のコードをいかにも「がんばって」書いた様に
自動生成できるし、バグ(ミス)もない
0836デフォルトの名無しさん
2013/03/01(金) 11:50:30.29関数閉包なのかClojureなのかClozure CLなのかGoogle Closure Libraryなのか・・・
0837デフォルトの名無しさん
2013/03/01(金) 15:59:56.780838デフォルトの名無しさん
2013/03/01(金) 16:04:24.00キーバインディングで括弧やセミコロンを入力しやすいように俺配列を定義している。
0839デフォルトの名無しさん
2013/03/01(金) 16:07:30.010840デフォルトの名無しさん
2013/03/01(金) 17:14:37.550841デフォルトの名無しさん
2013/03/01(金) 17:30:11.000842デフォルトの名無しさん
2013/03/01(金) 17:38:08.26本来のセミコロンの位置はShiftにしてる。
スラッシュの位置をMode_Switchに割り当てて、mod+Sでカッコ、mod+Dでコッカとかにしてる。
Lisp書くときホームポジションに括弧ないのはキツい・・・
0843デフォルトの名無しさん
2013/03/01(金) 17:41:35.41ttp://www.pfu.co.jp/hhkeyboard/kb_collection/images/symbolics.gif
0844デフォルトの名無しさん
2013/03/01(金) 18:54:02.85http://www.oreilly.co.jp/sales/2013/02/web-direct-campaign-land-of-lisp-sticker.html
0845デフォルトの名無しさん
2013/03/01(金) 22:16:29.160846デフォルトの名無しさん
2013/03/01(金) 22:57:43.260847デフォルトの名無しさん
2013/03/02(土) 05:31:38.38>>835
みたいなこと言ってひんしゅく買ってみたいな
0848デフォルトの名無しさん
2013/03/02(土) 06:45:03.69マンガが載ってるからOK
0849デフォルトの名無しさん
2013/03/02(土) 09:13:08.940850はちみつ餃子 ◆8X2XSCHEME
2013/03/02(土) 09:27:42.17普通の言語ユーザにとってはそれほど役に立たないかもね。
CPS 変換された世界では手続き呼出しは戻ってこないわけだけど、
それは第一級継続と同じ。 というわけで第一級継続の実装が簡単になる。
っていうか、 Scheme の形式的意味論では CPS で書かれてるらしい。
そのへんの意味論は読んでもあまり意味わからんけど。
それと前にも書いたことある気がするけど、
Chicken scheme だと CPS 変換処理直後のコードをファイルに吐き出させることが
出来るので眺めてみると面白い。
0851デフォルトの名無しさん
2013/03/02(土) 13:53:52.17コントールフローを直接扱いたい時。
高階関数含んだコードをコンパイラが最適化する時など。
0852デフォルトの名無しさん
2013/03/02(土) 14:51:12.34実践common lispの方が入門向きなのかな
両方買うのは金銭的にあれだし英語は読めない
0853デフォルトの名無しさん
2013/03/02(土) 16:13:36.58で、とっつき易いのはland of lispじゃないかな。形式的にガリゴリ学びたい向きにはもう片方。
0854デフォルトの名無しさん
2013/03/02(土) 16:51:19.54ありがとう
0855デフォルトの名無しさん
2013/03/02(土) 20:30:32.590856デフォルトの名無しさん
2013/03/02(土) 23:08:37.05land of lispはloopの説明が面白い
実践common lispはformatの説明がある程度丁寧
応用部分はどちらも特徴的で、land of lispはゲームの改良を、
実践common lispはツールの改良をしていく
pratical common lispはネットで無料で見れるんじゃなかったかな
0857デフォルトの名無しさん
2013/03/02(土) 23:12:41.930858デフォルトの名無しさん
2013/03/02(土) 23:13:55.43詳しい解説ありがとう
さっきland of lispを注文して楽しみ
英語のpractical common lispをこの前読もうとしたけど断念した
0859デフォルトの名無しさん
2013/03/02(土) 23:46:21.69宇宙人じゃなくて、床下にストラウストラップ〜のイラストの方。
宇宙人あるんだったらよく見て選べばよかった。
0860デフォルトの名無しさん
2013/03/03(日) 00:00:33.940861デフォルトの名無しさん
2013/03/03(日) 00:03:22.29・自動プログラミング
・論文を書くときに(理論で表現するときの)書式を統一できる
0862デフォルトの名無しさん
2013/03/03(日) 00:07:01.43俺貰えなかったけど。どういうことなんだぜ。(当惑
0863デフォルトの名無しさん
2013/03/03(日) 02:23:29.150864デフォルトの名無しさん
2013/03/03(日) 02:43:31.33いらんだろそんなもの
0865デフォルトの名無しさん
2013/03/03(日) 09:49:31.720866デフォルトの名無しさん
2013/03/03(日) 13:19:03.920867デフォルトの名無しさん
2013/03/03(日) 13:20:53.67翻訳ではどうなってるの?
you have a colony of stroustrups under your floor-boards.で、
お前の床下はストラウストラップsに巣食われてる、って感じだと思うけど。(複数形ね)
0868デフォルトの名無しさん
2013/03/03(日) 13:36:53.24何回かに分けて駆除が必要ですね」
左の服に書いてある文字は「害虫駆除」
ニューバランスさんが訴状を携えてアップを始めました
0869デフォルトの名無しさん
2013/03/03(日) 13:40:17.37原著でアバウトだなあってとこに脚注(多め)が入ってるのはいいね
0870デフォルトの名無しさん
2013/03/03(日) 17:38:33.430871デフォルトの名無しさん
2013/03/03(日) 18:25:03.500872デフォルトの名無しさん
2013/03/03(日) 18:34:36.180873デフォルトの名無しさん
2013/03/03(日) 19:49:21.73挿絵からセリフだけ抜きだしたから面白くはないね
「暗くてお靴がわからないわ」「どうだい明るくなったろう」みたいなもの
にしても文法に手を入れられるLispのユーザにとっては
他言語のユーザはあの家の住人のように見えてるんだろうか
0874デフォルトの名無しさん
2013/03/03(日) 20:02:43.430875はちみつ餃子 ◆8X2XSCHEME
2013/03/03(日) 20:04:11.22とか言ってたら絶版になるのが専門書なんだけど、そうなったら中古でもいいしな。
俺は C++ 好きだし。
0876デフォルトの名無しさん
2013/03/04(月) 00:53:41.15ほとんどのプログラミング言語は宇宙語みたいなもんだよな。
0877デフォルトの名無しさん
2013/03/04(月) 03:11:25.91関数呼ぶのに一手間かかるってに抵抗ある
でも、実用的なソフトの開発には後者が向いてるとか
schemeとcommonlispどっち勉強したらいい?
0878デフォルトの名無しさん
2013/03/04(月) 10:13:15.21実用的なソフトを作ることに興味があるなら、参考書(実践CommonLisp)のある
CLにしておけば?
0879デフォルトの名無しさん
2013/03/04(月) 11:54:51.150880デフォルトの名無しさん
2013/03/04(月) 12:11:21.150881はちみつ餃子 ◆8X2XSCHEME
2013/03/04(月) 16:16:59.52そりゃ Java を呼びやすいけど、
そのかわりに言語としての筋の良さをいくらか犠牲にしてるから、
そこらはトレードオフの問題だな。
ちなみに Java との連携なら Schluessel もあるでよ。
0882デフォルトの名無しさん
2013/03/04(月) 18:39:05.700883電波いっぱい
2013/03/04(月) 23:02:53.680884はちみつ餃子 ◆8X2XSCHEME
2013/03/04(月) 23:14:21.64結局、現実の問題ってのほとんどの場合に誰かが解決した問題なわけで、
解決した結果がライブラリになっていくわけで。
少々の筋の悪さなどなんのそのって感じはわかる。
0885デフォルトの名無しさん
2013/03/04(月) 23:52:38.56ちょっとググったが何にも出てこない。残念ながら。
movitzみたいなハードよりの話は憧れるんだがなぁ。
0886デフォルトの名無しさん
2013/03/05(火) 01:27:43.33lisp-1がいいならclojureもあるよということじゃないかな?
0887デフォルトの名無しさん
2013/03/05(火) 01:31:06.670888デフォルトの名無しさん
2013/03/05(火) 01:34:10.60助けに行きたいが我が師団はストラウストラップの軍団の前にすでに瀕死だ
0889デフォルトの名無しさん
2013/03/05(火) 03:18:51.89でも、マクロ書くにはcommonlispがいいんでしょ?
0890デフォルトの名無しさん
2013/03/05(火) 07:01:04.990891デフォルトの名無しさん
2013/03/05(火) 08:20:53.050892はちみつ餃子 ◆8X2XSCHEME
2013/03/05(火) 08:45:55.470893デフォルトの名無しさん
2013/03/05(火) 08:58:55.090894デフォルトの名無しさん
2013/03/05(火) 10:02:23.67Clojureもマクロあるよ
他にもいろいろと面白い今時の機能が満載
0895デフォルトの名無しさん
2013/03/05(火) 10:16:30.860896デフォルトの名無しさん
2013/03/05(火) 10:28:08.38モジュールやパッケージによる名前空間の分離は別。
0897デフォルトの名無しさん
2013/03/05(火) 10:34:47.17ありがとう、そういうことなのね。個人的にはlisp2がいいな。
0898デフォルトの名無しさん
2013/03/05(火) 11:18:01.87厳密には名前空間の数とはいえない、とかそんなことが書いてある。
0899デフォルトの名無しさん
2013/03/05(火) 11:26:40.53fletとかあるからcellの話だけでは収まらないしなあ。
0900デフォルトの名無しさん
2013/03/05(火) 13:25:45.42funcallなしで記述できるのでclojureの方が好きになってしまった。
名前の衝突もパッケージで回避できるし。
0901デフォルトの名無しさん
2013/03/05(火) 21:03:06.570902デフォルトの名無しさん
2013/03/05(火) 22:18:59.420903デフォルトの名無しさん
2013/03/06(水) 02:32:18.62読みたいけど高い
0904デフォルトの名無しさん
2013/03/06(水) 02:34:07.120905デフォルトの名無しさん
2013/03/06(水) 02:41:22.350906デフォルトの名無しさん
2013/03/06(水) 02:53:36.58本格的にlisp勉強したくなってきた
Closureも触ってみるか
0907デフォルトの名無しさん
2013/03/06(水) 03:20:29.85MITのサイトで原文無料公開してるから、そっちを読むのがいいと思う。
あと、SICPはプログラミング全般の基礎を解説してる本で、Lisp/Schemeについての解説はほとんどない。
Lispについて学ぶには別の本が要ると思う。
0908デフォルトの名無しさん
2013/03/06(水) 03:47:02.470909デフォルトの名無しさん
2013/03/06(水) 03:50:27.62何が学べる?
関数型言語を使った抽象化の訓練とか?
0910デフォルトの名無しさん
2013/03/06(水) 05:12:16.36プログラミングのいろんな側面に触れさせてくれる、ってのがメインだったと思った。
0911デフォルトの名無しさん
2013/03/06(水) 06:00:23.14というか、scheme処理系の作成方法が載ってなかったっけ?
0912デフォルトの名無しさん
2013/03/06(水) 07:50:17.960913デフォルトの名無しさん
2013/03/06(水) 09:27:29.19本編は訳はヘタクソでもゆっくりなら読めないレベルではないよね。
0914デフォルトの名無しさん
2013/03/06(水) 10:12:09.64あれを読めない奴は「できる! ○×」みたいなハウツーしか読めない病の奴だよ
0915デフォルトの名無しさん
2013/03/06(水) 10:26:31.28技術書は、自分の知らなかった概念などの取得の為に読むんだから、そっちに思考を集中させたい。
不適切な訳は、思考の足を引っ張るから嫌われる、というだけの事。
0916デフォルトの名無しさん
2013/03/06(水) 10:49:54.760917デフォルトの名無しさん
2013/03/06(水) 11:03:27.880918デフォルトの名無しさん
2013/03/06(水) 11:13:53.58一章も完成してないがこういうのもある。
http://www21.atwiki.jp/sicpaho/pages/1.html
個人的には全訳しないでも要約があればいいと思うんだが。
0919はちみつ餃子 ◆8X2XSCHEME
2013/03/06(水) 13:33:21.040920デフォルトの名無しさん
2013/03/06(水) 15:39:48.87ということになると思う
0921デフォルトの名無しさん
2013/03/06(水) 15:42:47.550922デフォルトの名無しさん
2013/03/06(水) 18:48:43.46内容が間違っているってのに
0923デフォルトの名無しさん
2013/03/06(水) 19:06:54.99読める≒理解だからなあ。
本格的にやる気があるなら、英語ぐらい読めるようになっておいたほうが良いとは思うが。
0924デフォルトの名無しさん
2013/03/06(水) 20:29:32.910925デフォルトの名無しさん
2013/03/06(水) 21:48:01.68【SICP】計算機プログラムの構造と解釈 Part3
http://toro.2ch.net/test/read.cgi/tech/1333015632/
0926デフォルトの名無しさん
2013/03/07(木) 00:30:55.46Guy.Steeleの昔の論文も平易な英語を使ってるね
内容は高度だけど
0927デフォルトの名無しさん
2013/03/07(木) 07:56:01.86なんでそんなに原文を勧めるのかわかんね。
多少まずい訳でも母語の方がわかりやすいのは当然だろ。
0928デフォルトの名無しさん
2013/03/07(木) 08:12:04.370929デフォルトの名無しさん
2013/03/07(木) 08:17:14.99当然と断ずるあたり釣り
0930デフォルトの名無しさん
2013/03/07(木) 08:29:48.560931はちみつ餃子 ◆8X2XSCHEME
2013/03/07(木) 08:48:24.980932デフォルトの名無しさん
2013/03/07(木) 10:26:09.20>多少まずい訳でも母語の方がわかりやすいのは当然だろ。
日本語は漢字・平仮名・片仮名あるからまだいいが、ハングルだと600万もの組み合わせがあるのに同音異義語・同文字異義語が
多すぎるので(防水と放水が同じとか)、技術書読むときは英語表記の本も必須だそうな。
0933デフォルトの名無しさん
2013/03/07(木) 22:13:22.04だったらJavaかRubyでも使ってろよ
0935デフォルトの名無しさん
2013/03/07(木) 23:42:05.930936デフォルトの名無しさん
2013/03/08(金) 02:13:38.080937デフォルトの名無しさん
2013/03/08(金) 03:48:40.29”読めなくていい”範囲で出来る事は限られてるが、趣味レベルなんだろうから人に押し付けさえしなければいい。
0938デフォルトの名無しさん
2013/03/08(金) 03:50:36.060939デフォルトの名無しさん
2013/03/08(金) 07:00:51.330940デフォルトの名無しさん
2013/03/08(金) 07:01:57.270941デフォルトの名無しさん
2013/03/08(金) 08:34:53.51俺もひどくないと思うよ
0942デフォルトの名無しさん
2013/03/08(金) 10:19:50.540943デフォルトの名無しさん
2013/03/08(金) 11:21:20.65読む気が失せる超絶悪訳。
しかし本編はそこまで酷くない。
ちょっと悪ふざけがすべってる程度。
0944デフォルトの名無しさん
2013/03/08(金) 11:28:41.240945デフォルトの名無しさん
2013/03/08(金) 11:34:33.52英語分かる人はprefaceは英語で読みましょう。
0946デフォルトの名無しさん
2013/03/08(金) 14:07:25.980947デフォルトの名無しさん
2013/03/08(金) 14:16:18.440948デフォルトの名無しさん
2013/03/08(金) 14:27:41.010949デフォルトの名無しさん
2013/03/08(金) 14:41:25.160950デフォルトの名無しさん
2013/03/08(金) 15:09:29.050951デフォルトの名無しさん
2013/03/08(金) 15:22:42.720952デフォルトの名無しさん
2013/03/09(土) 04:59:24.55大学の教科書みたいな文
ってか俺の大学の教科書だった
0953デフォルトの名無しさん
2013/03/09(土) 05:17:30.810954デフォルトの名無しさん
2013/03/09(土) 12:22:26.00京大乙
0955デフォルトの名無しさん
2013/03/09(土) 14:15:10.93本屋行かないとダメか
0956デフォルトの名無しさん
2013/03/09(土) 16:46:25.080957デフォルトの名無しさん
2013/03/09(土) 17:33:17.960958デフォルトの名無しさん
2013/03/10(日) 21:43:21.20(type->string `foo) ; => "symbol"
みたいな。
0959デフォルトの名無しさん
2013/03/10(日) 21:48:57.090960デフォルトの名無しさん
2013/03/10(日) 22:13:28.480961はちみつ餃子 ◆8X2XSCHEME
2013/03/10(日) 23:41:11.44Scheme の話だったらそういう関数は無い。
なんだか意味論上のややっこしい理由があるみたいなことをどこかで見たことはあるんだけど、
どこで読んだのだったか忘れた。
0962デフォルトの名無しさん
2013/03/10(日) 23:49:57.480963はちみつ餃子 ◆8X2XSCHEME
2013/03/11(月) 00:08:50.11この関数は標準出力に表示するようになってるからちょっとラップすれば文字列で返す関数を定義できなくはない。
0964デフォルトの名無しさん
2013/03/11(月) 00:57:48.04環境はGaucheだったので describe で期待の情報が得られました。ありがとうございます。
scheme汎用としては難しいんでしょうかね? symbol? とか string? があるので
存在しててもおかしくないと思っていました。
0965デフォルトの名無しさん
2013/03/11(月) 01:02:54.730966デフォルトの名無しさん
2013/03/11(月) 01:54:50.68まあC++でさえ、typeid使うと隠れフィールド増えるけど型情報取れるから、なんとかしたいところ。
0967デフォルトの名無しさん
2013/03/11(月) 04:18:08.00それらを使ってひとつずつ検査すれば自分で書けるよ。
コストとか難しい理由とか気にしなければ。
(define type->string
(lambda (arg)
(if (integer? arg) "integer"
(if (symbol? arg) "symbol"
(if (string? arg) "string"
(if (pair? arg) "pair?"
(else "unknown")))))))
(type->string 10) --> "integer"
(type->string "foo") --> "string"
(type->string 'bar) --> "symbol"
もっと種類が欲しけりゃ調べる種類を増やせばok。
0968デフォルトの名無しさん
2013/03/11(月) 04:23:53.59ごめん。"unknown"のところ間違えた。修正版。
(define type->string
(lambda (arg)
(if (integer? arg) "integer"
(if (symbol? arg) "symbol"
(if (string? arg) "string"
(if (pair? arg) "pair?"
"unknown"))))))
0969デフォルトの名無しさん
2013/03/11(月) 04:29:29.64またまたごめん。6行め "pair?" は "pair" が正しい。
0970デフォルトの名無しさん
2013/03/11(月) 07:06:17.79cond使いなYo!
Schemeでは「型」というのは「どの型判定述語に#tと答えるかによって決まるもの」なので
type-of みたいな関数で取り出せる「何か」がある必要はない。
Gaucheではclass-ofでオブジェクトのクラスが取れるけどね。
0971デフォルトの名無しさん
2013/03/11(月) 15:10:36.170972デフォルトの名無しさん
2013/03/11(月) 17:22:35.42(define type->string
(lambda (arg)
(cond
((integer? arg) "integer")
((symbol? arg) "symbol")
((string? arg) "string")
((pair? arg) "pair")
(else "unknown"))))
0973デフォルトの名無しさん
2013/03/11(月) 18:01:14.28オメ
0974デフォルトの名無しさん
2013/03/11(月) 18:33:51.570975デフォルトの名無しさん
2013/03/11(月) 18:47:29.170976はちみつ餃子 ◆8X2XSCHEME
2013/03/11(月) 21:39:56.18数値の型は階層化されているので、そこらへんの扱いをどうするかも考えないとな。
例えば数値の 1 は integer? で真になるけど、rational? でも real? でも真だ。
最も特殊な型を返すのが筋だろうから 1 は integer でいいのかな。
それと正確性や変更可能性は階層と独立した属性なので型の一部と見做すべきかどうか。
(例えば正確な有理数と非正確な有理数は違う型だろうか? )
0977デフォルトの名無しさん
2013/03/11(月) 22:06:52.62前半は集合論的な包含関係を考慮して内側の集合から調べる順番にすればok
後半は質問者がどこまで要求しているかにもよるが条件分岐を深くしてたとえば
((integer? arg) (if (exact? arg) "exact-integer" "inexact-integer"))
などとすればok
0978デフォルトの名無しさん
2013/03/11(月) 22:42:33.330979デフォルトの名無しさん
2013/03/12(火) 02:41:00.66なのに糞Lisperの態度のでかさはなんなんだろうね
0980デフォルトの名無しさん
2013/03/12(火) 06:11:56.07(define b a)
(set-car! b 10)
ってやってaが(10)になるかどうかって規定されてるんですか?それとも処理系依存?
もしconsセルを値として持ってたらaは変化しないと思うんですけど
0981デフォルトの名無しさん
2013/03/12(火) 06:37:55.39処理系には依存せず、a を評価すると必ず (10) が返される。 Lisp 系言語では
シンボル a や b はオブジェクトに束縛される(C言語でいうポインタ参照をもつ)だけ。
(define b a) により、シンボル b は「シンボル a が束縛されているオブジェクト」に
束縛される [つまり a も b も同じオブジェクトであるリスト (1) へのポインタ参照をもつ]。
(set-car! b 10) で[ひとつしかない共通の]リスト (1) の car 部が 10 に書き換え
られて (10) となっても当然 a b ともその同じ (10) を参照し[に束縛され]ているまま。
この点が「変数は値の入れもの」であるとする他の言語と Lisp とが大きく異なる点だねキリッ
0982デフォルトの名無しさん
2013/03/12(火) 08:01:55.060983デフォルトの名無しさん
2013/03/12(火) 08:07:31.940984デフォルトの名無しさん
2013/03/12(火) 08:08:31.74b->car = 10; ってことかいな。
0985デフォルトの名無しさん
2013/03/12(火) 09:34:19.83二つのポインタを持つだけだったら>>980の言うところの「値として持っていたら変化しない」になりそう
こんな扱いしてる処理系少しはありそう
0986デフォルトの名無しさん
2013/03/12(火) 12:32:36.66ない
0987デフォルトの名無しさん
2013/03/12(火) 14:04:20.120988デフォルトの名無しさん
2013/03/12(火) 14:45:41.310989デフォルトの名無しさん
2013/03/12(火) 14:46:59.07同じだけど
0990デフォルトの名無しさん
2013/03/12(火) 15:05:16.520991デフォルトの名無しさん
2013/03/12(火) 17:27:35.80釣りなのか、マジなのか
0992デフォルトの名無しさん
2013/03/12(火) 19:25:09.67struct cons
{
X1 *pointer_x1;
X2 *pointer_x2 ;
}
ということ?
0993デフォルトの名無しさん
2013/03/13(水) 07:58:34.84引数の扱いの話と
破壊的代入の有無の話が、
ごっちゃになってる。
あとconsセルのcar,cdrは共用体です。
即値も入れないといけないので。
0994デフォルトの名無しさん
2013/03/13(水) 17:29:18.480995デフォルトの名無しさん
2013/03/13(水) 18:39:39.960996デフォルトの名無しさん
2013/03/13(水) 18:50:55.43一回Amazonの締め切り落として(なの?)予約注文キャンセルされてさらに三年とかいうことかいね?
0997デフォルトの名無しさん
2013/03/13(水) 19:48:14.760998デフォルトの名無しさん
2013/03/13(水) 19:51:11.70ttp://toro.2ch.net/test/read.cgi/tech/1363171842/
0999デフォルトの名無しさん
2013/03/13(水) 21:13:17.17http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。