トップページ⇒tech
1001コメント301KB

Lisp Scheme Part35

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2012/09/19(水) 10:41:56.61
Common Lisp、SchemeをはじめとするLisp族全般のスレです

■前スレ
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.34
SICP taught in Python 3
http://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.29
予稿集だけほしい
0005デフォルトの名無しさん2012/09/19(水) 17:31:43.08
目次がS式。
0006デフォルトの名無しさん2012/09/19(水) 21:07:27.32
コンティニュエーションって
Ctrl-Z食ってお休みしてるプロセスみたいなもの?
0007デフォルトの名無しさん2012/09/19(水) 21:43:58.02
そういうこともできるが
要は次に行なうべき計算
何の「次」なのかの説明が必要になるが・・・
0008デフォルトの名無しさん2012/09/19(水) 22:40:39.57
ウィキペディアが、なんかgdgdに加筆されてるな
0009デフォルトの名無しさん2012/09/19(水) 23:03:25.60
何がどういう順番で実行されるかというのは
Schemeに慣れていないと直観的に分かりにくい
0010デフォルトの名無しさん2012/09/19(水) 23:24:51.83
引数の渡し方とかね
0011デフォルトの名無しさん2012/09/19(水) 23:43:06.33
前スレの2進数と10進数の例え、LispはS式で表現するから16進数だろ。少々慣れればこれほど効率の良いものは無い。
0012デフォルトの名無しさん2012/09/19(水) 23:50:18.15
(a (b (c) (d)) (e))
とかでbcdeに副作用があると副作用がどの順番に起こるか保証されない
が、大抵は左から右、右から左のどっちか
どっちか決めろよ
0013デフォルトの名無しさん2012/09/19(水) 23:53:23.15
じゃあ左で
0014デフォルトの名無しさん2012/09/19(水) 23:54:17.60
cdbeやebdcになった程度で混乱するとでも思って?
馬鹿にしないで欲しいわ
0015デフォルトの名無しさん2012/09/19(水) 23:56:05.56
ebdcはないわー
edcbだった
混乱するじゃないか!
0016デフォルトの名無しさん2012/09/19(水) 23:57:03.86
左から右だと可変引数が取れないんだよな
0017デフォルトの名無しさん2012/09/20(木) 00:04:33.75
>>15
最適化でdcbeやdcebになるかもしれんぞ
まあ仕様が決まってるならバグだが
0018デフォルトの名無しさん2012/09/20(木) 00:48:29.21
継続を使ってむりやり順序を変える方法を模索するのが真のschemer
0019デフォルトの名無しさん2012/09/20(木) 01:31:58.49
(format "~S ~S" (read) (read)) がどうなるかは処理系依存なの?
0020デフォルトの名無しさん2012/09/20(木) 02:52:29.72
ご存知、ないのですか!?
0021はちみつ餃子 ◆8X2XSCHEME 2012/09/20(木) 07:33:44.00
>>19
その通り。
一旦 let* 等で変数に束縛するか、
よく使うものならそう展開されるようなマクロでくるむべし。
0022デフォルトの名無しさん2012/09/20(木) 11:47:03.44
スタックに積む順と評価順が一致してなければならない、という法はない。
0023はちみつ餃子 ◆8X2XSCHEME 2012/09/21(金) 10:07:51.32
そういえば C も引数の評価順は決まってなかったんじゃね?
C は最適化の可能性という錦の御旗があるけど、Scheme の場合は理論上の背景がありそう。
単に万人が納得する順序を決められないってことかもしれんけど。

私としては決まってない方が好みだな。
順序がどうでもいい場合はそのまま書けばいいし、
順序に意味がある場合は let* を使えばいい。

引数の評価順を決めてしまうと、その順序に意味があるのか無いのか見た目でわからなくなる。
0024デフォルトの名無しさん2012/09/21(金) 19:18:17.40
http://www.youtube.com/watch?v=sWAfHjx0igU
0025デフォルトの名無しさん2012/09/21(金) 20:48:29.39
r6rs では Rationale の 9.1. に評価順を決めない理由が書いてあるね。
1. たぶん読みやすい
2. もしかしたらコンパイラが良いコードを吐いてくれるかも
だそうだ。
0026デフォルトの名無しさん2012/09/21(金) 23:36:01.69
カリー化があるから、引数の並び順で評価順が決まるのはナンセンス
0027デフォルトの名無しさん2012/09/21(金) 23:37:43.97
いくらなんでも違う、真逆だ。
0028デフォルトの名無しさん2012/09/22(土) 01:44:15.26
もんだい1まぎゃくとまさかのちがいをSしきでかんけつにのべよ
0029デフォルトの名無しさん2012/09/22(土) 08:15:25.74
一般的に λ x y z.M は λ x. λ y. λ z.M の略であるからだ。

ざっと調べたが、>>25 以外に評価順序を定めなかった元々の理由としては
継続渡しによるプログラミングを前提にしていたからだそうだ。
ちゃんと一次資料調べろよ。
0030デフォルトの名無しさん2012/09/22(土) 21:21:56.48
資料名もあげてないのに納得とはすごいな。31pだ。
0031デフォルトの名無しさん2012/09/23(日) 10:17:06.14
Schemeにおけるエラー処理の作法みたいのが知りたいんですが
何か参考になるものはありますか?
0032はちみつ餃子 ◆8X2XSCHEME 2012/09/23(日) 13:44:01.16
R6RS には例外処理の仕組が用意されてる。 Java や C++ とよく似てるけど、
例外オブジェクト (R6RS用語ではコンディションオブジェクト) が継承関係だけでなく合成があるのが特徴的。
こういった形で用意されている以上、典型的なエラー処理方式のひとつなんだと思う。
SRFI にも例外処理関連のがいくつかあるからそれらも併せて参考にすればいいんじゃないかな。

でも、 Scheme は規格の序章に書かれている通り、機能を追加することより言語の弱点を取り除くことに主眼がある。
つまり、今回の例で言えば例外処理の機能を提供することよりも例外処理をしたいとプログラマが思ったときにそれを邪魔しないという意味。
プログラマがどういう方法でエラー処理したいと思っても Scheme 的には間違ってない。
多値で返すのだって、継続渡しで分岐するのだってそれらを使い分けるのだって自分でやりやすければいいと思う。
0033デフォルトの名無しさん2012/09/23(日) 13:57:32.13
三行で頼む
0034デフォルトの名無しさん2012/09/23(日) 16:56:03.26
とりあえず
#f
を返しとけ。
0035デフォルトの名無しさん2012/09/23(日) 18:00:22.69
>>32
多値のないscheme処理系に多値は追加できないし
機能拡張つっても結局schemeの可能な範囲内でってことでしょ
5命令から構文糖作ったりできる程度
0036デフォルトの名無しさん2012/09/23(日) 18:20:48.71
弱点取り除くのもいいけどさ、必要なものを持ってない、ってのは普通にダメだと思う
例外とかモジュールとか必須だろ?REPLはまだ仕様にないんだっけ?
いまのRNRSは何か中途半端だよ
0037はちみつ餃子 ◆8X2XSCHEME 2012/09/23(日) 18:22:14.99
>>35
R5RS で多値が追加されたのは言語としてそれがないとプログラマが追加できないのがわかってるからだよ。
だから、多値のない処理系を前提として出すのはナンセンス。
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
>>36
例外は call/cc と dynamic-wind があればその上に構築可能なので、
言語のコアとして必須とは言えないと思う。

モジュールは必要と昔から言われてて、
R6RS でライブラリという名前で実現した。

R5RS から R6RS への改定で REPL が削除されたのは
フェイズというか評価環境をライブラリ単位で決定する R6RS の形式に対してそぐわないからだと思う。
言語全体の仕組との絡みがあるので必要かどうかの段階から議論しなきゃ駄目じゃね。
俺としては REPL は各処理系の裁量で柔軟にやってくれてる R6RS の現状でいいと思ってるけど。

中途半端なのは仕方ない。 Scheme は完成されてないんだ。
言語に完成なんて無いけど Scheme はまだ活発に発展してるんだから
必要だと思うことがあれば声を上げろよ。
R7RS はまだまだこれから。
0040デフォルトの名無しさん2012/09/23(日) 18:50:02.08
そういう意見もあるから動作が変わるような構文は使わない方がいい。
FortranやCobolも時代に合わせて機能追加されているけれども、
全然使われてないらしいし、対外的にアピールするためだけの機能と
実際使う機能を区別していくべき。
0041デフォルトの名無しさん2012/09/23(日) 19:09:19.94
scheme コミュニティは、決めることを恐れているように見える。例え80点の解でも決めないよりマシだと思うんだが。
0042デフォルトの名無しさん2012/09/23(日) 19:15:24.16
違う違う。単に人材が偏っているだけだ。
そういう「個人が決意を新たにすればなんとかなる」なんて信じられないだろ。
0043はちみつ餃子 ◆8X2XSCHEME 2012/09/23(日) 23:08:36.93
>>41
プログラミング言語の機能はそれぞれの機能の連携で動くものだから、
80 点の機能同士を組み合わせたら64点だよ。
組み合わせるほどにぐだぐだになっていく。

CL はいい感じの妥協点を見出してはいるけど Scheme で同じようにやるのは芸がない。
っていうか CL に対する反発みたいな意識はあると思う。
0044デフォルトの名無しさん2012/09/24(月) 01:55:24.65
>>41
决めることを怖れているのではない
决めたのに誰も従わず、その決まりの権威がなくなり、いろんな決まりが好き勝手に大量発生することを怖れているのだ
0045デフォルトの名無しさん2012/09/24(月) 05:01:52.03
分かるけど、そのせいで、undefinedオブジェクトみたいなアホなモノが定義されるハメになってる。そして結局、独自エラー処理や独自オブジェクトで書かれた scheme プログラムが世に満ちる。
schemeのこだわりは分かってるつもりだし、実現したら格好いい。でも、決めるのがあまりに遅くないか?それも人手不足のしいかもしれないけど。
0046デフォルトの名無しさん2012/09/24(月) 07:20:48.45
例外とかヒアドキュメントぐらい定義しとけって感じ
規格オプショナルで
SRFIだと実装する気にならね
0047はちみつ餃子 ◆8X2XSCHEME 2012/09/24(月) 07:28:00.55
現実路線なのが欲しいなら CL 使えってことじゃないの。
0048はちみつ餃子 ◆8X2XSCHEME 2012/09/24(月) 08:07:37.48
>>46
例外は R6RS で定義してるだろ。
複数行に渡る文字列も使えるようになってるので
あらためてヒアドキュメントなんてものが必要とは思えないな。
テキストから読み込んで文字列リテラルに展開するマクロとかも書けるし。
0049はちみつ餃子 ◆8X2XSCHEME 2012/09/24(月) 08:09:01.41
>>45
返す値が未定義っていうのは使うなって意味だぞ。
これはまだ決まってないというよりは議論した上で未定義だと決めたものだ。
将来的に覆る可能性は低いと思う。
0050デフォルトの名無しさん2012/09/24(月) 08:12:23.92
R○RSなんかに頼らないで
俺Lisp作ったほうがよさそうだな
0051デフォルトの名無しさん2012/09/24(月) 12:30:55.57
>>39
> REPL が削除されたのは
> (中略)
> R6RS の形式に対してそぐわないからだと思う。

もっとくやしく。
0052デフォルトの名無しさん2012/09/24(月) 15:20:43.67
CL使うとか俺LISP作るとか俺言語作るとか、道は色々あるな。
まずは俺仕様の俺Scheme作って公開してみるのはどうだろう?

0053デフォルトの名無しさん2012/09/24(月) 15:55:12.74
schemeって並行プログラミングの類については
どういう議論がされてるの?
0054デフォルトの名無しさん2012/09/24(月) 20:53:30.44
Scheme使っている人はおしなべて新しい機能追加を求めているという前提が間違ってんだよ。
本当にScheme使っている人は途中で仕様変更するなんて望むわけ無い。
少なくとも俺はR5RSの機能が使えればそれでいい。

もろこの話だよ↓
http://msdn.microsoft.com/ja-jp/magazine/jj133828.aspx
0055はちみつ餃子 ◆8X2XSCHEME 2012/09/24(月) 21:02:56.73
>>51
R6RS ではプログラム全体が letrec* であるかのように扱われるんだけど、
REPL だと「全体」の入力が終わらない内に一行ごとに評価せねばならないことから
ファイルに記述したプログラムを与えるのと同じようには扱えない。

っていうかよく見たら R5RS でも REPL については無くてもいいことになってるな。
0056デフォルトの名無しさん2012/09/25(火) 01:59:25.32
自作処理系がRxRS に沿ってるかどうかチェックするプログラムってあるのでしょうか
自作処理系があるけど、自身を持って公開できない
0057デフォルトの名無しさん2012/09/25(火) 04:24:38.53
letrecとletrec*て、どう違うんだっけ???
0058デフォルトの名無しさん2012/09/25(火) 05:38:42.74
>>57
束縛する変数の評価順序が保証されているのがstar付きletrec
でなかった?
0059デフォルトの名無しさん2012/09/25(火) 11:47:31.27
>>35 >>37
多値のない処理系に多値を追加することは簡単にできるよ。
valuesは1引数以外のときに値をパックして、call-with-valuesがパックされた値を展開する。
受け取る値と返す値が一致してないとパックされたオブジェクトが見えちゃうけれど、
R5RSではわざとそういう場合を処理系依存にして、後付けの実装を許すようにしている。
R5RSで多値が追加されたのは、処理系による最適化を許すためと、コールとリターンの対称性のため。
0060デフォルトの名無しさん2012/09/25(火) 12:29:29.92
>>59
追加できるっていってもそれは多値というより分配束縛だろ。
継続に複数の値を渡せるってこととセットで初めて概念的にも多値って言えると思う。
0061デフォルトの名無しさん2012/09/25(火) 12:41:54.70
Sussmanが、多値って別に特別なデータ型である必要なくね?
とかR7RSの投票の中で言ってた気がする。
0062デフォルトの名無しさん2012/09/25(火) 18:12:31.50
>>60
ああ、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
>>48
マクロはそんなに万能じゃねーよ
バーヤ
0064デフォルトの名無しさん2012/09/25(火) 20:18:13.93
マクロっていうか、リーダマクロかな。
Schemerにはあまり馴染みのない機能だと思うけど。
0065デフォルトの名無しさん2012/09/25(火) 20:23:19.77
リーダーマクロと普通のマクロの違いって何?
evalに組み込まれてるマクロ機能か
readに組み込まれてるマクロ機能かの違いって事?
0066はちみつ餃子 ◆8X2XSCHEME 2012/09/25(火) 20:33:15.57
>>63
実行時にできるほどんとのことはマクロでも出来るんだよ。

>>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
>>66
それいいな。
でも結局ファイルを読み込むならマクロ展開時でも実行フェイズでも効率に差なくね?
0068デフォルトの名無しさん2012/09/25(火) 23:57:49.08
2pass の処理書くときにいいの、か?
0069デフォルトの名無しさん2012/09/26(水) 06:41:35.86
バッチコンパイルする処理系ならマクロ展開はコンパイル時に済ませられるから実行時に
読み込みオーバヘッドは無いしファイルそのものさえ無くてもいい。
そのかわり実行時に切り替えることはできないんで、どっちを取るかだが。
0070デフォルトの名無しさん2012/09/26(水) 12:16:40.81
Scheme はオワコンなの?
0071デフォルトの名無しさん2012/09/26(水) 12:17:13.58
>>61
多値は型じゃなくね?
0072デフォルトの名無しさん2012/09/26(水) 13:00:22.31
>>71
今見返してみたら「特別なデータ型で実装する必要あるん?」だったわ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.
0073王大人2012/09/26(水) 15:03:40.52
>>70
死亡確認
0074デフォルトの名無しさん2012/09/26(水) 19:27:17.87
Racket のロゴマークはペプシコーラのパロディなの?
http://racket-lang.org/logo.png
http://www.pepsi.co.jp/images/logo.png
0075デフォルトの名無しさん2012/09/26(水) 19:36:20.52
ナウなヤングにバカウケだからな
0076デフォルトの名無しさん2012/09/26(水) 22:55:04.08
>>73
生存フラグ乙www
0077デフォルトの名無しさん2012/09/26(水) 23:36:18.04
>>70
大学生が実習で処理系を作れてしまうという枯れた仕様という意味で、オワコン
0078デフォルトの名無しさん2012/09/26(水) 23:45:29.11
Schemeの仕様が枯れてるとか意味わからんな。
現在進行形で仕様改訂真っ最中じゃん。
0079デフォルトの名無しさん2012/09/26(水) 23:52:29.10
>>70に反応ないから自分でレスつけたんだろ
予定を繰り上げて
0080デフォルトの名無しさん2012/09/26(水) 23:56:47.69
>>78
仕様が枯れている = 大学生でもバグ少なく処理系を実装できる

オワコンだからこそ普及した言語なのに、仕様を複雑にして衰退の道を歩もうとしているのがSchemer
0081はちみつ餃子 ◆8X2XSCHEME 2012/09/27(木) 02:08:03.77
仕様を複雑にというのはちょっと違うと思う。
曖昧になってた部分を埋めたという感じだろ。
R6RS はライブラリを過剰にしてしまったところはあるけど、
基本的な部分はそれほど複雑さが増してるわけじゃない。
R7RS が samll と large を分けたのは R6RS の反省もあってのことだろうし、
そう極端に複雑になることはないよ。
0082デフォルトの名無しさん2012/09/27(木) 08:01:00.65
枯れてると大学生でも以下略ってことは、ANSI INCITS 226-1994 (R2004)もそうなのか。
大学生すげえなw
0083デフォルトの名無しさん2012/09/28(金) 01:56:53.03
大学生なら実習でscheme処理系作ってユニフィケーションの高速化やってprologの実装までやってくれないと
0084デフォルトの名無しさん2012/09/28(金) 03:44:51.01
>>83
それ何処の大学?
0085デフォルトの名無しさん2012/09/28(金) 04:00:18.03
valuesって型で実装するものだと思ってた
0086デフォルトの名無しさん2012/09/28(金) 05:23:39.86
どんな実装であれvaluesを扱うにはそれ用のフラグがどっかにある
つまり型であると見做せる
では何故これがファーストクラスではないのかと疑問に思う
0087デフォルトの名無しさん2012/09/28(金) 07:58:42.99
関数引数の個数が関数の型の一部であるのと同じ程度には型に関係してるけど。
>>86 フラグって? 多値の個数を判定する仕組みがどこかにあるのは確かだけれど、
その実装はいろいろあるよ。それとも>>86は「n引数の関数なんて無い。あれはn個の
要素をもつ1つのタプルを渡してるんだ」っていうタイプ?
0088デフォルトの名無しさん2012/09/28(金) 08:15:35.99
>>77
すばらしいことではないか
0089デフォルトの名無しさん2012/09/28(金) 23:38:27.26
>>77 は「枯れた」の意味を勘違いしてんのか
0090デフォルトの名無しさん2012/09/29(土) 00:06:18.15
>>89
「UNIXは枯れたOS」とかで使う「枯れた」だと思う
http://e-words.jp/w/E69EAFE3828CE3819F.html
0091ニート262012/09/29(土) 15:57:17.40
lispのschemeを、やってみたい。
プログラミング初級ですが、できますかね?ニート26歳高卒。
0092デフォルトの名無しさん2012/09/29(土) 16:10:38.88
>>91
とりあえず始めてみたら?
始める前に結果知りたがるからニートになるんだよ。
0093ニート262012/09/29(土) 17:59:42.14
>>92
了解
始める
0094デフォルトの名無しさん2012/09/29(土) 21:18:45.24
Sagittarius Schemeってライブラリとか結構充実してるんだね。
キーワード引数とか、機能面ではGaucheの影響が強い印象。

http://code.google.com/p/sagittarius-scheme/
0095はちみつ餃子 ◆8X2XSCHEME 2012/09/30(日) 01:25:12.34
キーワード引数については作者のブログで「Gauche風の」と書いてあるから直接影響を受けているのは間違いない。
(更に大元は Common Lisp だけど。)

Sagittarius は作者自身が業務に使ってるみたいだからね。
実用指向という意味では Gauche と方向性が近いかも。
日常的に使うとなると、筋の良さや整合性よりも、短かく書けたり覚え易かったり、
いざというときのワークアラウンドがある方が大事だったりする場合も有って、
そういう泥臭さを許容する感じが似てると私は思う。

もちろん、筋の悪さに目を瞑りすぎるとカオスになるのでそこらへんの匙加減の上手さが使い勝手を良くしているんだけど、
そういうバランス感覚はセンスというか現場の感覚なのかな。
0096デフォルトの名無しさん2012/09/30(日) 18:31:41.94
はちみつ餃子とSCHEME餃子は同一人物?
コテの由来も気になる。
0097デフォルトの名無しさん2012/09/30(日) 18:40:10.92
全部俺の自演
俺とお前しかいない
だとしたら?
0098デフォルトの名無しさん2012/09/30(日) 19:00:07.72
昔のログを読み返してたらハンバーグ餃子のときもあった
0099デフォルトの名無しさん2012/09/30(日) 22:32:34.59
>>92
名言だな
0100デフォルトの名無しさん2012/10/01(月) 01:15:42.17
行動した後に軌道修正するのが一番コストがかかる
行動はありとあらゆる手段で情報を収集した後にするべき
0101デフォルトの名無しさん2012/10/01(月) 01:20:25.17
好きにしろ
0102デフォルトの名無しさん2012/10/01(月) 08:19:47.51
ニートさんはC言語とかメジャー言語はできるんかな?
LISPとかはその後だよ
いきなりLISPなんかやり始めたら
基地外ニートに昇格するぞ
0103デフォルトの名無しさん2012/10/01(月) 20:27:08.70
LISPが出来ないバカのご意見、たいへんありがとうございますwwwwwww
0104デフォルトの名無しさん2012/10/02(火) 02:15:06.98
LISPはCよりも難しいが、継続とマクロを除けば、CよりもSchemeの方が簡単だと思う
コンピュータのレジスタとかの構造とコンピュータ言語を知らないバカに何か言語を教えろと言われたら、迷わずSchemeを教える
0105デフォルトの名無しさん2012/10/02(火) 02:19:01.10
コンピュータ言語を知らないのがバカというのはものすごくおかしな話だ
0106デフォルトの名無しさん2012/10/02(火) 02:29:33.81
俺なら迷わず「面倒くさいから教えねえよ」って言ってしまうだろう。
見上げたものだ。
0107デフォルトの名無しさん2012/10/02(火) 02:36:57.05
>>105
Lispしかできない馬鹿にありがちな発想ですな
0108デフォルトの名無しさん2012/10/03(水) 00:43:28.90
Cとか経由せずにLISPしかマスターさせない教育課程って哲学科とかだろうか
0109デフォルトの名無しさん2012/10/03(水) 01:23:03.11
ハードというのは人間に従わせるものであって、人間がハードに付き合わなければならない云われはない。
0110デフォルトの名無しさん2012/10/03(水) 07:10:45.07
>>109
従わせたいのは現実なり問題なりであって、
ハードはそのための道具で味方だろう。

ハードを改良することを「従わせる」と言うならその通り。
でなけりゃ、いまのハードにできる範囲で最善を
尽くすよう「合わせる」もんだ。

たとえば、車やバイクの上手い人はそう言う。
0111デフォルトの名無しさん2012/10/03(水) 08:14:48.80
LIPS は双方歩み寄り。

人間はコンピューターに。

コンピューターは人間に。
0112デフォルトの名無しさん2012/10/03(水) 10:15:15.16
LISP は、まず理論があってそれに人もハードも歩み寄らせてる感じじゃないかい?
で、その理論と現実問題との接点が見えづらい、っていう。
0113デフォルトの名無しさん2012/10/03(水) 11:52:22.66
Cのポインタを理解することと現実問題との接点はどこにあるんだ?
それを理解することはプログラマにとってのみ現実であって、
プログラムを使う人の現実ではないだろ。
初心者にとってそれをわかれというのも酷な話じゃないか。
0114デフォルトの名無しさん2012/10/03(水) 15:10:21.69
> 従わせたいのは現実なり問題なりであって、
それは100%頭おかしい。
0115デフォルトの名無しさん2012/10/03(水) 17:17:42.94
自動車バイクに精通していても、道は直せないからな。
0116デフォルトの名無しさん2012/10/03(水) 17:39:28.10
お前らそういうLispに直接関係ない抽象的な議論にだけ喰い付くよな。
0117デフォルトの名無しさん2012/10/03(水) 21:07:29.16
Lispは今時の言語と比べて非人間的すぎる
0118はちみつ餃子 ◆8X2XSCHEME 2012/10/03(水) 21:35:53.19
だがそれがいい。
0119デフォルトの名無しさん2012/10/03(水) 23:39:49.13
()がある以外は他のLL言語と
大差ないと思うが…
インデントさえきちんとしてれば
()とかもあんまり気にならん
Schemeとかどこにでも実装されるから
覚えるとこれほど武器になりそうな言語ない気がする
CommonLisp派だけど
0120デフォルトの名無しさん2012/10/04(木) 00:53:06.69
>>117
LISP以上に非人間的な道具「ソロバン」
だが人がソロバンに合わせることで計算力があがってしまう。

非人間的だってのはいけない事かね。
0121デフォルトの名無しさん2012/10/04(木) 02:14:59.90
いちいち相手にするとは人間味ありすぎ
0122デフォルトの名無しさん2012/10/04(木) 13:27:05.20
にんげんだもの
0123デフォルトの名無しさん2012/10/04(木) 14:07:37.04
人工知能研究での結論
ネットの向こうで応答しているのが、人間か機械かは原理的に判別できない
0124デフォルトの名無しさん2012/10/04(木) 15:21:31.33
チューリングテストに結論が出たという話は初耳だが
0125デフォルトの名無しさん2012/10/04(木) 16:05:58.87
CommonLispは50万だしてアレグロ買えないと
実用にはならないのでは?
0126デフォルトの名無しさん2012/10/04(木) 16:20:03.31
それはこまりすぷ
0127デフォルトの名無しさん2012/10/04(木) 16:30:26.48
ハッカーの必須言語だというから、どのマシンでも実用になると思ってたのに…
0128デフォルトの名無しさん2012/10/04(木) 17:42:29.21
ACLって優れた処理系なのは間違いないけど、そんな神格化されるような存在じゃないだろ。
ネイティブスレッドひとつとっても、まともにサポートされたの、今年に出た9.0からだぞ。
他の処理系の方が得意な分野だってある。
0129はちみつ餃子 ◆8X2XSCHEME 2012/10/04(木) 19:26:36.75
Allegro はかなり丁寧なサポート込みでその値段だって話だからなぁ。
そう考えると業務用としてはそんなに高価ってわけでもないんじゃねーの。
0130デフォルトの名無しさん2012/10/04(木) 22:59:03.44
ポール・グレアムのヤフーショップはCLISPじゃなかったっけ。
0131デフォルトの名無しさん2012/10/05(金) 01:21:42.80
保守まで面倒みるとなると高い金もらわないとやってられない
柔軟性が高いのが裏目に出てる
0132デフォルトの名無しさん2012/10/05(金) 01:25:09.60
業務でなんか使えないし
0133デフォルトの名無しさん2012/10/05(金) 02:08:48.94
>>132
・Webサーバ系ではけっこう使ってる
・大学で開発されたシステムを企業に移植するときに使わざるをえないときがある
・勘違いした会社がライセンス買った場合は当然使う
0134デフォルトの名無しさん2012/10/05(金) 08:33:51.90
まともな技術者ひとり雇ったら50万なんてひと月で消える。
0135デフォルトの名無しさん2012/10/06(土) 03:47:11.84
50万円が消えるか、会社からまともな技術者が消えるか
0136デフォルトの名無しさん2012/10/09(火) 16:26:08.93
JavaScriptをそれなりに書いてるひとならLisp系はわりとすぐに理解できるとおもうんだけどなあ・・・
0137デフォルトの名無しさん2012/10/09(火) 16:28:55.54
Lispなんて使う意味がわからん
JavaScriptでいいじゃん
0138デフォルトの名無しさん2012/10/09(火) 18:15:56.29
よくわからないトラウマを抱えた人にLispは無理
0139デフォルトの名無しさん2012/10/09(火) 18:23:11.19
http://www.hikaritaxi.co.jp/blog/wp-content/uploads/2009/09/ba5b2e81727a0decc596da87c68e15ad.JPG
0140デフォルトの名無しさん2012/10/09(火) 19:35:46.18
仕事でいざ限られた時間で使う事を考えると
LISPは構造が単純なこと以外には特にメリットは見えないな
複雑にしてどうすんだと思う
例えば最低限の処理系が数百〜数千行だから
数時間から数日あれば実装できる
しかしそういう用途では選択肢の中にGC付き言語はなかったりするが
0141デフォルトの名無しさん2012/10/09(火) 20:15:09.88
http://picolisp.com/5000/!wiki?home
http://www.newlisp.org/
C 系の人は単純さを極めた PicoLisp や JavaScript 的名前空間の newLISP とかから入ると
やがては Scheme の凄みも分かるようになるかも。ちなみに newLISP は Docs にマニュアル
和訳あり。
0142SCHEME餃子 ◆8X2XSCHEME 2012/10/09(火) 20:22:04.22
>>140
前提がよくわかんない。 組込み言語として使うみたいなことを考えてるのかな?
Lisp はピンキリなのでそのあたりがはっきりしないと話が噛み合わなかったりするよ。
0143デフォルトの名無しさん2012/10/10(水) 06:05:27.78
racketをemacsに設定できないhelpme
まず、ubuntu用の.shってのがよく分からなかったからunix用の.tgzを展開してsite�lisp下においたんだけど、mzscheme.exeが見当たらないしpathの通し方もイマイチわからない
0144デフォルトの名無しさん2012/10/10(水) 17:29:26.34
まず環境を書こうか。LinuxなのかWindowsなのか。
あと、パス自体はどんなものか分かってる? 通し方が分からないだけ?
ついでにEmacsの使い方は知ってると思っていいの?
0145デフォルトの名無しさん2012/10/10(水) 17:38:41.75
お前にLispは無理
IDEの付いたJavaかC#でもやれ
0146デフォルトの名無しさん2012/10/10(水) 17:45:25.15
いや、Racketって普通にIDE付いてるから。
0147SCHEME餃子 ◆8X2XSCHEME 2012/10/10(水) 20:26:30.70
>>143
仮に 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.18
Typed Racket初めて触ってみた。
http://docs.racket-lang.org/ts-guide/
DrRacket上で固有の情報も確認出来るんだね。すごい。
ClojureでTyped Racketを参考にして実装してみてるものがあるけど、ツール類まで用意するのは大変そうだ。

使い方をぱっと見た感じ、型の指定がQi IIみたいに簡潔に書ければ良さげなんだけど、使い方がちょっと手間かな。
01501432012/10/11(木) 09:16:50.35
環境はUbuntu12.04
パス自体がどんなものか、正確にはわからないがその前に
とりあえずRacket.exeが見つからない。Ubuntu用の.shファイルの扱いが分からなかったからUnix用の.tgzファイルを展開したのだが
01511432012/10/11(木) 09:17:46.28
ちがったMzscheme.exeが見つからない
0152デフォルトの名無しさん2012/10/11(木) 11:23:01.40
あらしなのか天然なのかわからないけど、
そのレベルならWindowsでracket使う方がいいと思うよ。
0153SCHEME餃子 ◆8X2XSCHEME 2012/10/11(木) 13:09:44.77
>>150
Unix source って書いてあるやつはソースコードが入ってるだけだから、
その中には実行バイナリは無いよ。 さすがにこれは >>152 と同意見だわ。
sh が何か、ソースコードが何かくらいはググって調べてね。
0154デフォルトの名無しさん2012/10/11(木) 13:31:34.78
>>150
まずその参考にしてるサイトだか本だか知らんが、最初にそれを投げ捨てる。
次に、その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
cKanrenが素晴らしすぎる
これあったらcall/ccいらない
0156デフォルトの名無しさん2012/10/11(木) 14:38:00.08
>>154参考にしてるサイトはもうひとつのscheme入門、分からないことは逐一ググってる。scheme学ぶのにscheme手習い→SICPとやろうと思ってるのだけど、どうでしょう?
0157はちみつ餃子 ◆8X2XSCHEME 2012/10/11(木) 15:02:23.31
>>156
その手順で学ぶのは良いと思う。
Racket は統合環境が有って初心者に使い易い選択だと思うし。
01581432012/10/11(木) 15:03:47.50
おかげさまで出来ました。thx
0159デフォルトの名無しさん2012/10/11(木) 15:56:26.11
子供が小学生になったら豆腐配達システムの仕事を
手伝わせるんだ。言語はもちろんLisp。
0160デフォルトの名無しさん2012/10/11(木) 16:29:05.22
自作パーツとかの在庫管理をLISP(scheme)でしたいんだけど
保存するファイル形式はやっぱりS式がいいんでしょうか

(データベース
(品名1 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
(品名2 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
(品名3 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
)
こうしてくと、値段が変動したりした時に混乱するのですが、
同じ品名でも値段が違ったら分けた方がいいんですかね
0161デフォルトの名無しさん2012/10/11(木) 16:31:08.36
あ、何に使ったかが増えていくので
(品名 使った日時 使った数 何に使ったか)
を別にするとよさそうですね
うん
0162デフォルトの名無しさん2012/10/11(木) 16:34:47.01
(購入DB
(品名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
規模が小さいものならS式でいいと思う。
でも、規模が大きくなってデータベース的なことをするならそれに特化して進化してきたシステム
(リレーショナルデータベースや key value store) を使う方が効率的。

柔軟性こそ Lisp の本領なので、
今の段階ではそんなこと気にせずとりあえず思い付いたように書いていけばいいんじゃないの。
問題があればそのときに修正できるだけの柔軟性があるのが Lisp ってもんだろ。
0165デフォルトの名無しさん2012/10/11(木) 20:28:41.80
>>164
会社で使うならともかく、
個人でデータベースなんか使うと、
存在自体忘れたり、面倒になって使わなくなるので、
なるべく小規模で、どこでも見れるようにテキストベースにしたく、
そうなると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.37
Google Drive でスプレッドシート使えばスマホでも見れるよ。
0169デフォルトの名無しさん2012/10/12(金) 15:55:32.89
グーグルに個人情報は検索ワード以外もう与えたくないな
こわい
0170デフォルトの名無しさん2012/10/19(金) 14:53:47.96
SCHEMEのTOY処理系(マクロとか無し)を作ろうとしてるので名前募集。
0171デフォルトの名無しさん2012/10/19(金) 16:20:00.34
マクロ・末尾呼び出し最適化・継続を実装してないやつはschemeとは認めない
0172デフォルトの名無しさん2012/10/19(金) 16:52:50.94
マクロは IEEE にはなくて R4RS でも付録で示唆してるだけ。
末尾再帰最適化や継続が不完全な実装も多 (特に C や Java とのやり取りが主のもの)。
だから、静的スコープで単一名前空間なら Scheme、でいいんじゃない?
0173デフォルトの名無しさん2012/10/19(金) 17:06:43.71
>>170
Schmiz
0174デフォルトの名無しさん2012/10/19(金) 17:20:33.57
しゅ…しゅみず
0175はちみつ餃子 ◆8X2XSCHEME 2012/10/19(金) 17:26:24.95
>>172
マクロはともかく (まだ議論がぶれているので) として、
末尾再帰最適化や継続は Scheme の顔なので、
それなしで Scheme を名乗るのはちょっと微妙だと思うなぁ。
あえて Scheme を名乗らなくても、
(部分的に Scheme 風の) 新しい Lisp 方言のひとつってことでいいんじゃね。
0176はちみつ餃子 ◆8X2XSCHEME 2012/10/19(金) 17:27:20.58
>>173
スク水www
鬼才現るwww
0177デフォルトの名無しさん2012/10/19(金) 21:33:26.33
スクール水着っていうと女子のスクール水着だけを
指しているよね。不思議だ。
0178デフォルトの名無しさん2012/10/19(金) 22:45:00.22
男のは海パンとか言ったりするな。
これも不思議だな
0179デフォルトの名無しさん2012/10/19(金) 22:49:08.91
そういう名前はpythonだけで十分だろw
0180デフォルトの名無しさん2012/10/19(金) 23:52:10.83
イメージカラーは紺色で決まりだなw
0181デフォルトの名無しさん2012/10/20(土) 02:59:43.44
>>170
デキがショボければShameと呼ばれるのは間違いない。
0182デフォルトの名無しさん2012/10/20(土) 21:37:56.94
schemale
0183デフォルトの名無しさん2012/10/20(土) 21:50:03.48
SCHE
0184デフォルトの名無しさん2012/10/20(土) 22:44:33.71
schebe
0185デフォルトの名無しさん2012/10/20(土) 23:31:44.31
名前だけの話だけど、scheme 処理系はかっこいい名前多いね。イカロスとかゴーシュとかガンビツトとか。
CLはsbclとかなんか味気ない。
0186デフォルトの名無しさん2012/10/20(土) 23:36:07.19
>>170
SCHEYAKI すき焼きスキーム
0187デフォルトの名無しさん2012/10/20(土) 23:44:37.11
shample
0188デフォルトの名無しさん2012/10/21(日) 22:23:53.06
https://raw.github.com/strangeloop/strangeloop2012/master/slides/sessions/Flatt-TheRacketWay.pdf

RacketがClojureみたいに総合的な開発者向けイベントに参加して広報してた。
0189デフォルトの名無しさん2012/10/24(水) 23:53:10.42
+チック姉さんの親戚で
(チック姉さん
というのを思いついたので誰か薄い本をはよ
0190デフォルトの名無しさん2012/10/25(木) 00:01:38.28
しかし今日は暑いな
0191デフォルトの名無しさん2012/10/31(水) 15:05:08.07
女の子のポケットに入るscheme端末(ネット機能は
問わない)を具現化した・具現化しやすい環境って
なんだろう。生活の中でケータイの電卓以上のこと
がしたいし、計算履歴を残せるとうれしい。入力支
援があるとなお良い。
数年後、タッチパネルにUbuntuを入れられる世の中
になるなら開発せずに待つんだけど。
0192デフォルトの名無しさん2012/10/31(水) 23:34:07.45
これはどう?
http://www.sony.jp/CorporateCruise/Press/200901/09-0108/
0193デフォルトの名無しさん2012/11/02(金) 01:56:43.43
JVMがワンチップに入るんだから、Scheme処理系も入ると思います
0194デフォルトの名無しさん2012/11/02(金) 22:17:34.71
FPGAにlispマシンを実装するのは、どっかで見たな。
0195デフォルトの名無しさん2012/11/02(金) 23:14:31.74
末尾最適化がネックなのかな
clojure もJVMの都合で末尾最適化を仕様に入れなかったという話だし
0196デフォルトの名無しさん2012/11/04(日) 15:25:21.55
λ...
0197デフォルトの名無しさん2012/11/04(日) 21:29:20.88
Scheme で書かれたものを github で検索したら何かの演習課題のこたえみたいなのばっかりなんだが、
こういうのを github に上げる奴は見てもらう価値があると思ってやってんの?
それとも単なるバックアップ先として使ってるだけ?
0198デフォルトの名無しさん2012/11/05(月) 09:44:24.19
何かを公開するとき、「見てもらう」なんて卑屈になる必要はないんだよ。
0199デフォルトの名無しさん2012/11/05(月) 15:54:27.02
GitHubの検索機能が貧弱なのが悪いんだよ。キーワードで除外できれば良いのに。

http://www.google.com/cse/home?cx=013299269060639926749:0zjwws1-vxu&hl=ja

「scheme -sicp」みたいな感じでこの辺使ってみたらどうよ?
02001912012/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.62
androidでいいならこんなのとか
http://android.allappli.net/d_jp.gr.java_conf.hilite.schemepad.html
0202デフォルトの名無しさん2012/11/06(火) 19:33:07.28
gentooのracketパッケージがドキュメントを入れないのは嫌がらせかなにかなのか
racketが一番いいのはドキュメントなのに
0203はちみつ餃子 ◆8X2XSCHEME 2012/11/17(土) 19:15:45.62
>>202
そういうことは gentoo スレで言った方がいいんじゃね?
0204デフォルトの名無しさん2012/11/18(日) 08:40:41.95
おまいらなら部屋を掃除することを「ガーベージコレクション」って言うよな!
0205デフォルトの名無しさん2012/11/18(日) 14:12:07.73
gaucheで(time)の出力結果を文字列として取得したいのですがやり方がわかりません
標準出力にこう出力されるものです
; 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
http://chaton.practical-scheme.net/gauche/
ここで聞いた方が早いかも
0207はちみつ餃子 ◆8X2XSCHEME 2012/11/18(日) 15:42:00.08
>>205
time の結果は標準出力ではなく標準エラー出力に表示することになっているので、
標準エラー出力を捕えないといけない。
こんな感じかな。

(call-with-output-string
(cut with-error-to-port <>
(cut time (list 1 2))))
0208はちみつ餃子 ◆8X2XSCHEME 2012/11/18(日) 15:48:51.72
一貫性を考えると with-error-to-string として括り出した方がいいかも。

(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
文字列じゃなくてかかった時間を数値として取り出したいなら、time-thisというのもある。
マニュアルのgauche.timeのところ見てみ。
0210デフォルトの名無しさん2012/11/19(月) 02:18:32.99
>>206-209
ありがとうございます。
標準エラー出力が出力先だということを見落としていたのはまずかったです。
勉強になりました。数値を取得できるのは意外でした。いじってみます。
0211デフォルトの名無しさん2012/12/03(月) 06:56:39.61
gosh> (iota 3 1 0.1)
(0.9999999999999999 1.0999999999999999 1.2)
これ理解できないのですが
誰かご説明お願いいたします。
0212デフォルトの名無しさん2012/12/03(月) 08:23:43.55
結果から憶測すると、最初に1.2を計算しておいてそれから引いてみたいだね。
逆順で作る理由はリスト作るの簡単だからかな。
0213デフォルトの名無しさん2012/12/03(月) 08:27:17.09
(define (iota count :optional (start 0) (step 1)) ;srfi-1
(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
>>212 213
ありがとうございました。
0215デフォルトの名無しさん2012/12/06(木) 12:36:06.37
2ch$ racket
Welcome 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.64
つ http://kohada.2ch.net/vote/
0217デフォルトの名無しさん2012/12/06(木) 13:09:11.05
何で処理系のアンケート取る程度で、「ぼくのかんがえるさいきょうのしすてむ」作んなきゃいけないの……。
しかも他人に作らせるつもり満々とかなにそれこわい。
0218デフォルトの名無しさん2012/12/06(木) 13:35:31.81
意味がわからない
こわい
0219デフォルトの名無しさん2012/12/06(木) 14:01:24.45
報酬支払うなら作ってやるよ。
0220デフォルトの名無しさん2012/12/06(木) 22:00:49.60
はやってる しょりけい
はやってない しょりけい
そんなの LISP じたいの マイナーさ かんがえたら ごさ
0221デフォルトの名無しさん2012/12/07(金) 00:30:31.09
>>215
ありがとうございました。
0222デフォルトの名無しさん2012/12/09(日) 13:16:30.41
syntax/macro/functionみたいな、適用可能な要素一般の呼び方ってなにかあります?
applicableとかですかね
0223デフォルトの名無しさん2012/12/09(日) 14:04:53.39
map/operator
0224デフォルトの名無しさん2012/12/09(日) 15:21:45.00
gaucheだとApplicable objects(適用可能なオブジェクト)と呼んでるね。
0225はちみつ餃子 ◆8X2XSCHEME 2012/12/09(日) 15:23:03.08
>>222
Lisp 全般はわからないけど Scheme の用語の中には相当する言葉はないと思う。
apply という言葉もマクロには使わないし。 (マクロ展開の実体を use という)
operator もマクロに使う言葉じゃないなぁ。
見た目に同じでもプログラム的な作用としては違うから、どうしてそういう一般化した用語が欲しいのか気になる。

強いて妥当な言葉をひねり出すなら「式の先頭」くらいじゃね?
0226はちみつ餃子 ◆8X2XSCHEME 2012/12/09(日) 15:24:39.22
>>224
マクロはオブジェクトじゃないよ。
0227デフォルトの名無しさん2012/12/09(日) 15:31:07.24
command/instruction
0228デフォルトの名無しさん2012/12/10(月) 10:09:27.75
>>222
CL的にはoperatorでOK。
www.lispworks.com/documentation/lw50/CLHS/Body/26_glo_o.htm

>>226
gaucheならオブジェクトだしCLでもオブジェクトだし。
0229デフォルトの名無しさん2012/12/22(土) 13:59:08.93
学習始めたばっかりの初心者の感想だけどSchemeのリストってすごく難しいね
'(1 2 3) == '(1 . (2 . (3 . ()))) == (cons 1 (cons 2 (cons 3 '())))
どれがどれのシンタックスシュガーなのかサッパリ分からん
02302292012/12/22(土) 14:06:09.07
あと、だいたいのScheme入門には()がリストの終端を表すって書いてあるのに、実際には
'(1 . ((). (2 . ()))) これが (1 () 2) こんな感じで通っちゃうし

(length '(1 . ((). (2 . ())))) これは 3 になるし、終端判定に()は利用されてないんじゃね?
だったら終端に()付ける必要なくね?って思っちゃう
0231デフォルトの名無しさん2012/12/22(土) 14:33:02.55
http://www.shido.info/lisp/scheme3.html
初めてだと、listが見た目分かりやすいような気がする
(list 1 2 3)
0232デフォルトの名無しさん2012/12/22(土) 14:34:22.09
>>230
コンスセルはテキストに載ってないか?
コンスセルを書いて、よく考えて見ろ。理解が早まる。
0233デフォルトの名無しさん2012/12/22(土) 14:36:21.30
最初のうちはこんな感じで図を描くのがいいよ
http://www.geocities.jp/m_hiroi/func/abcscm02.html
0234はちみつ餃子 ◆8X2XSCHEME 2012/12/22(土) 15:01:57.51
>>230
そのリストの最後は () で終わってるよ。
02352292012/12/22(土) 15:17:11.00
>>230-233
ありがとう。lengthの実装見てなんとなく理解できた。
()が要素にあったらそこを終端と判断する、ってわけじゃなく、cdrの戻り値が()であれば終端と判断する、ってことか
と、理解してからコンスセルの形を見れば一目瞭然だったw

んー、ドット対の利用価値がイマイチ分からんけど(consで説明すりゃいいじゃん……)もう少し読み進めてみます
0236デフォルトの名無しさん2012/12/22(土) 15:17:57.98
漏れてた。>>234もありがとうございます
名無しに戻ります
0237はちみつ餃子 ◆8X2XSCHEME 2012/12/22(土) 15:45:06.32
>>235
ドット対はコンスセルの外部表現で、cons はコンスセルを生成する手続という違いがある。
文字列で言えば "ab" と (string #\a #\b) の違いと説明すればわかるかな?
0238デフォルトの名無しさん2012/12/22(土) 20:11:21.84
consは無視して、car, cdrが使えればいいんじゃないの。
リストで実用的なプログラムをいっぱい書いてから戻って考えた方が
理解が速いんじゃないの。
cons回りにかけた10時間が意味があったのかよくわからん。

SICPはいつ読めばいいのかね?
0239デフォルトの名無しさん2012/12/22(土) 20:54:14.44
>>235
ドット対は関数の可変長引数が楽になる
0240デフォルトの名無しさん2012/12/23(日) 11:30:21.02
ドット表記なしに連想リスト書くと、罰ゲームワロタって思って偉大さが分かるよ!
0241デフォルトの名無しさん2012/12/23(日) 11:54:07.78
'((key1 . val1) (key2 . val2) ...)
0242はちみつ餃子 ◆8X2XSCHEME 2012/12/23(日) 12:44:48.06
余談だけど R5RS ではリストリテラルの破壊結果は未定義だから更新される可能性のある連想リストは quote で書かない方がいいぞ。
エラーにする処理系はまだいいけど、黙って不可解な動作をする場合もあるから要注意。
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.44
リテラルで書く場合は定数として扱え、それが嫌ならcons使え、ってこと?
0244デフォルトの名無しさん2012/12/23(日) 13:48:18.26
そう。Schemeじゃなくてもそう。

http://www.faqs.org/faqs/lisp-faq/part3/section-14.html
0245デフォルトの名無しさん2012/12/23(日) 19:11:24.37
確かにリストが分かっていればあんまり困らない、ように思えるかもしれない。でも、ちゃんとコンスセルを理解してないと、マクロを沢山書くようになってから地味にハマる。というかオレはハマった。コンスセルはリストより基本的な構造だよ。だから大事。
0246デフォルトの名無しさん2012/12/23(日) 20:26:15.95
>>245
わかっててツケにしているんだからマクロを沢山書くようになってハマってから
ツケが回ったと思ってその時に考えればいいんじゃないの?
その頃にはSchemeの語彙も増えているだろうし、開発環境も整っていて解析も
しやすいでしょ。中学校の連立方程式を振り回して難しい問題を解いている
イメージだ。微分積分で楽な解法があるんじゃないの。
0247はちみつ餃子 ◆8X2XSCHEME 2012/12/23(日) 20:37:54.88
それは一理あるな。

言語の機能は相互に関連して成り立っているので、
簡単な方から難しい方へ学んでいけばいいというわけじゃない。
どうせ行きつ戻りつするのだから、
意義をわからずに学ぶよりは実際につっかえるところまで一旦先に進むのも有りだと思う。
0248デフォルトの名無しさん2012/12/23(日) 21:31:18.42
マクロは楽で生産性が高いけど、5年前に自分で作ったマクロ見たらワケわかんねぇ
0249デフォルトの名無しさん2012/12/23(日) 21:49:15.78
マクロなんざ展開したら余裕で把握できると思うんだけど、どんな複雑なマクロ書いてんだよ。

え? Series? 僕もさっぱり理解できません。
0250デフォルトの名無しさん2012/12/23(日) 22:09:34.22
>>249
読みやすくするために展開するってことは、はじめからマクロにしなけりゃいいんじゃ…
0251デフォルトの名無しさん2012/12/23(日) 22:33:30.28
>>250
マジレスすると、macroexpandとそれに類する機能の話。
マクロのデバッグには必須だと思う。知らなかったら便利だから使ってみて。
0252デフォルトの名無しさん2012/12/23(日) 22:52:15.39
読みやすくするためではなく、独自に発見したフレームやイデオムをマクロにするから、時間が経つと忘れる
結果、似た構造を持つマクロが大量生産される
定期的にマクロだけあつめてリファクタリングしたい
0253デフォルトの名無しさん2012/12/24(月) 00:21:22.08
>>252
意味論の世界へようこそ。
0254デフォルトの名無しさん2012/12/27(木) 02:14:26.09
ハッカーがLISPを使うと聞いてLISPの勉強をはじめました
そもそもハッカーはどこでどういうふうにLISPを使っているのでしょうか
0255デフォルトの名無しさん2012/12/27(木) 04:41:03.35
あなたが過去にした質問とその答を読み返してみてはどうでしょう
0256デフォルトの名無しさん2012/12/27(木) 11:28:03.97
http://cruel.org/freeware/hacker.html

LISP は、それをモノにしたときのすばらしい悟り体験のために勉強しましょう。
この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。
たとえ、実際には LISP そのものをあまり使わなくても。
0257デフォルトの名無しさん2012/12/27(木) 20:23:39.58
悟りを開くために修行するなら、SchemeとかHaskellとかがいいんでね?
Common Lispは実用向けの泥玉だしな。
0258 ◆QZaw55cn4c 2012/12/28(金) 01:13:37.63
>>256
その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.03
ロボット同士で壊しあいをした場合、生き残った最強のマシーンの頭脳にはLISPが使われている
0260デフォルトの名無しさん2012/12/28(金) 11:42:54.30
>>259
空想みたいな話にしているけど、少ない予算で殺し合いってできるでしょ。

コンピュータ囲碁の世界はまだまだプロに足元も及ばない実力と言われている
からそれで言語競争するのも良いかもね。言語の機能にもよるけど対局中プロ
グラミングの内容を書き換えても良い。プロの世界は通常1日かけてやるから、
プログラマのゲーム参加で精神余裕を持たせるためにもそのくらいの時間の
物差しでやらせられる環境になると良いかも。
チェス、将棋、囲碁の世界は計算スピードが物言う世界でC一択なのか。

あとはルールがシンプルな新しいボードゲームを考えて、n日後に大会開催。
ゲーム中のプログラミングの内容の書き換えはありで戦わせるとか。
0261はちみつ餃子 ◆8X2XSCHEME 2012/12/28(金) 12:21:34.50
将棋等のボードゲームだと各局面での意思決定の賢さよりも読みをとにかく深く広くしたほうが勝利に繋がるみたい。
(現時点では実際にそうなっているというだけでしっかりとした理論的な裏付けがあるわけではない。)

何をどうすりゃいいのかわからない状況での試行錯誤がし易いのが LISP の強みなので
>>260 の条件なら LISP は強いかもね。
0262デフォルトの名無しさん2012/12/28(金) 14:00:07.03
大会中にエラーでゲーム中断は1回だけはありでm分後に再開しないといけないと条件を付け
加えるとして。
Cプログラマの人口が一番多いのにCプログラマのエントリーがゼロでしたというのは自分の
主観が入り過ぎているのかな。


人間同士のトーナメント方式だと強くても敗退することが多いから甲子園の1試合で敗退が
決まる方式は実際の強さの優劣を表すわけではないみたいだね。人間だから精神面や体調の
問題が起因していると考えられる。時間的な制約もあるからいくつかの改良トーナメント方
式で敗者復活を取り入れてるみたい。
あと2人ゲームなら先手・後手、複数人ゲームなら回ってくる順番で有利不利があるならそれも
工夫しないといけない。

それを踏まえて、言語同士だとシンプルなトーナメント方式の結果で文句が上がってこない
のか、改良トーナメント方式で大会ゲーム数をある程度抑えても文句が言えないのか。
2人ゲームだと先手・後手と2回やる必要があるケースもありそうだし、そのケースだと勝敗が
決まらなければもう1ゲームやることになってどっちが有利な先手後手を持つかって話になって、
疑義が取れない。色々と考慮すると大会ゲーム数が肥大化していく。
新しいゲームのルールの方で大会ゲーム数を抑える仕組みにすればいいんだろうけど、それが
描けるのか、自身では想像つかないなあ。ゲーム選定者は大変だな。

それこそゲームの有利不利を解析するのはプロトタイプの進化をさせやすいLISPが有利だね。
新しいゲームで殺し合うという話になっても、ゲームのプラットフォームを考える人も骨を
折らないといけないんだよなあ。
はは。こういう締めになるとは思わなかった。
0263デフォルトの名無しさん2012/12/28(金) 22:06:26.17
言いたいことまとめてから書けよ。
0264デフォルトの名無しさん2012/12/28(金) 23:22:45.33
同意。長すぎて読みづらい。整理して。
0265デフォルトの名無しさん2012/12/29(土) 23:23:02.73
>>264
「試合自体が難しいんじゃね? 色々あるし。」
0266デフォルトの名無しさん2012/12/30(日) 00:07:50.11
>>260
> チェス、将棋、囲碁の世界は計算スピードが物言う世界でC一択なのか。
言語は何でもいい, 強力な盤面評価技法を持った奴が勝ち
盤面評価技法次第で刈り取れる枝の数が大幅に増減する
それでも, 計算量は必要だけど
0267デフォルトの名無しさん2012/12/30(日) 12:36:53.28
ニューラルネットで人間の脳細胞を完全再現すれば言語いらないと思う
0268デフォルトの名無しさん2012/12/30(日) 13:21:28.92
つ、釣られんぞ・・・
0269デフォルトの名無しさん2012/12/30(日) 13:50:04.15
ファミコン程度でいいから、50万年の間は絶対に壊れない演算システムがあれば人間には勝てる
人間はあと10万年で絶滅するから
0270 ◆QZaw55cn4c 2012/12/30(日) 14:35:30.19
>>266
>強力な盤面評価技法
それほしいですねえ。いや、自分のために。
二桁級からなかなか腕があがらないんだ、今日もウッテガエシを食らってしまったorz
0271デフォルトの名無しさん2012/12/30(日) 18:34:31.76
そりゃダメ詰まりへの注意が甘いだけでは……
0272デフォルトの名無しさん2012/12/30(日) 18:51:31.19
検索ではない必勝法アルゴリズムが開発されたりして
0273デフォルトの名無しさん2012/12/30(日) 19:49:24.43
数百万台のpcをインターネットで繋いで分割演算、は有りだろうか?
0274デフォルトの名無しさん2012/12/30(日) 20:20:13.32
計算量の指数的増加の前に、容易く敗北する。
0275デフォルトの名無しさん2013/01/03(木) 08:24:30.05
"Scheme vs Common Lisp: Which characteristics made a difference in your project?"
http://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
twitter.com/mnzktw/status/286401275103428609
「どの言語つかってるの?」「Haskellです」「わー!すごーい!」「OCamlです」「わー!すごーい!」
「Agdaです」「わー!すごーい!」
「Lispしてます」「あ…そっち系…」
_人人人人人人人_
> あ…そっち系…<
 ̄Y^Y^Y^Y^Y^Y^Y
0277デフォルトの名無しさん2013/01/03(木) 11:59:54.49
レベル1 Lispわかんない
レベル2 レベル1を馬鹿にする
レベル3 レベル2を馬鹿にする
         :
0278デフォルトの名無しさん2013/01/03(木) 12:33:43.83
再帰ですか。
0279デフォルトの名無しさん2013/01/03(木) 15:14:40.34
>>276
ワロタw
0280デフォルトの名無しさん2013/01/03(木) 16:58:54.91
ICOTがPrologに浮気したせいで…
0281デフォルトの名無しさん2013/01/09(水) 20:11:32.42
暫くD言語を使ってたけど、CLに復帰しました。
replサイコー。replのない言語は滅ぶべし。
0282デフォルトの名無しさん2013/01/09(水) 20:14:43.87
そのへんが滅ぶと連鎖的にこっちも滅ぶんでやめてください
0283デフォルトの名無しさん2013/01/09(水) 22:31:39.27
どっかでみたschemeはリスト処理言語であって関数型言語ではないってツイートが
ずっと自分の中にあったもやもやを解消した気がする
当たり前かもしれないことをわすれてただけなんだけどさ
0284デフォルトの名無しさん2013/01/09(水) 23:42:24.66
リスト(データ)と関数の区別がないのがScheme
0285デフォルトの名無しさん2013/01/10(木) 00:12:53.38
sceme は関数型言語じゃないのは当然だと思ってた。
でも、リスト処理言語にしては () の扱いがダサいよ。
0286デフォルトの名無しさん2013/01/10(木) 00:47:59.99
scheme ってどうして () と #f を区別するようになったんだっけ?
nil や t というシンボルがダサいから変えたかった、というのはわかるけど…。
(car ()) や (cdr ()) が () 返してくれてもいいのになぁ。
0287デフォルトの名無しさん2013/01/10(木) 00:55:17.52
そりゃ型が違うからでしょ
0288デフォルトの名無しさん2013/01/10(木) 01:31:40.39
#fは分かる
()も分かる
しかし、nil や null は本当に必要だったのだろうか?
0289デフォルトの名無しさん2013/01/10(木) 01:41:49.40
関数型があって関数を変数に代入(束縛)できれば関数型言語だと聞いた
つまりコールバックがあるCも関数型言語
0290デフォルトの名無しさん2013/01/10(木) 01:41:55.05
理論的な整合性より利便性を重視するならCommon Lispの世界に来れば良いよ。
0291デフォルトの名無しさん2013/01/10(木) 01:57:57.44
ややこしい構文を確認することが少ない分だけschemeの方が使い易くて便利です
lispはライブラリとexeファイルが欲しいときしか使わなくなってしまった
0292デフォルトの名無しさん2013/01/10(木) 02:24:29.18
実用性を求めてCommon Lisp使ってるけど、処理系依存の部分をいちいち確認したり、
ライブラリを求めてClikiを漁っていると、Gauche使ったほうが楽な気がしてしょうがにあ。
0293デフォルトの名無しさん2013/01/10(木) 03:59:02.11
実用性を求めるならLispなんて使うなよ
0294デフォルトの名無しさん2013/01/10(木) 05:01:35.85
>>292
そりゃGaucheはその分のコストを開発者が払ってるわけだし。

R7RS以降はSchemeもCommon Lispと同じ道に突き進むことになると思う。
Common Lispでの#+や#-の代わりにcond-expand使うだけで。
CLikiやQuicklispに相当する物もそのうち誰かが作るんだろう。
0295はちみつ餃子 ◆8X2XSCHEME 2013/01/10(木) 09:39:39.57
>>289
C がプリミティブに扱えるのは関数じゃなくて関数ポインタ。
C++ ならなんとか関数型に数えられるかもしれない。
0296デフォルトの名無しさん2013/01/10(木) 10:23:25.25
Common Lispは激しく実用重視だとおもうけどなー。
あれこれ突っ込みすぎでとっ散らかっている部分もあるけど。
0297デフォルトの名無しさん2013/01/10(木) 12:06:13.64
コンパイル時レイトレーシングとか
C++やってる連中は頭がおかしい
0298デフォルトの名無しさん2013/01/10(木) 12:35:55.34
コンパイル時の処理でCommon Lispに勝てる言語って地球上に存在するの?
0299はちみつ餃子 ◆8X2XSCHEME 2013/01/10(木) 14:00:24.78
>>296
そのとっ散らかってるのがかなりマイナスだと思うなぁ。
Common Lisp ってモジュール化の仕組みはある (規格が曖昧っぽいけど)
のに標準ライブラリがさっぱり整理されてないし命名規則も一貫してないしでわけわかんね。
0300デフォルトの名無しさん2013/01/10(木) 15:11:47.35
>>299
まぁ、歴史的経緯ってやつだしね。

Common Lisp自体が先行するメジャーだった処理系で堆積した地層を
インタリーブして再度重ね直したようなもんだしな。

そもそも言語と環境がごった煮状態当たり前な、古代文明の遺跡なわけで、
プログラミングもライブラリを組み合わせてどうこうというよりも、Lisp環境自体を
対象に特化した問題解決器に仕立て上げていくという感じだしねぇ。

モジュールについては、あの死んでくれ状態な生のpackageからASDF -> ASDF2 -> QuickLispと
層が厚くなるにしたがって便利度はUPしてるし、生暖かく見守るべし。

まぁ、4〜5人くらいの少人数でゴリゴリと問題をやっつける道具としては、
かなり便利に使ってるけど、もっと大規模な開発とかで使う気にはなかなかなれないかな。

そういや、ちゃんと規格化しようって頑張ったISLISPって影薄いね。
0301デフォルトの名無しさん2013/01/10(木) 16:18:14.31
ANSI Common Lispにモジュール化の仕組みがあるという風潮。
requireとprovideはdeprecatedです。本当にありがとうございました。
推奨しない機能を使って整理できるわけねー。

命名規則については、assqとかassvとかそのまま採用しちゃってる上、
結局carとcdrで過去を引きずってるSchemeが人の事言えるんですかね。
0302はちみつ餃子 ◆8X2XSCHEME 2013/01/10(木) 18:19:43.17
>>301
確かに意味的には first と rest の方がいいと思う。
でも、 caadar みたいなのはどうするのって話になって一貫性も同時に議論する必要がでてしまうんじゃない?
別名を用意するのは Scheme 的じゃない気がするし。
Schemer が本気で議論しはじめたらかなり面倒臭いことになりそう。

そういや、 call-with-current-continuation だけは call/cc って別名があるね。
この場合は単に短縮した名前なので忌避感は感じないな。
R5RS では「call/cc という名前を使う人もいる」という微妙な書き方になってて R6RS で明確に規定されたんだけど、
どういう議論があったんだろう。
0303デフォルトの名無しさん2013/01/10(木) 23:04:13.66
モダーンなCLをもう一回作り直すべきだよ。scheme は何か変な方向に行ってるからあまり期待できない。
0304はちみつ餃子 ◆8X2XSCHEME 2013/01/10(木) 23:23:14.51
>>303
具体的にどこらへんが?
0305デフォルトの名無しさん2013/01/10(木) 23:49:48.94
そうして歴史は繰り返される。おもしろいからいいけど。
0306デフォルトの名無しさん2013/01/11(金) 00:29:55.76
>>302
最小主義的な思想を持ってるんだから、caadarとか規格に要らんと思うけど。
caadarとかを利用するのはあまり良くないとも言われてるし、そんな使う?
Andrew Wrightのmatchとか使って構造化代入すれば良いじゃない。
別名としてのcall/ccもそうだけど、入れるにしてもR7RS largeちゃうんかと。
0307デフォルトの名無しさん2013/01/11(金) 01:13:33.21
R5RS以降はユーザが自分で実装すればいいと思う
もうscheme処理系くらい1人ずつ持つ時代だと思う
0308デフォルトの名無しさん2013/01/11(金) 01:29:01.66
つまり……Gaucheってことだな
0309はちみつ餃子 ◆8X2XSCHEME 2013/01/11(金) 01:38:45.29
>>306
廃止なら廃止で、ライブラリの移動なら移動で議論が起こるよ。
どうするにしたってどこかで議論が起きてどうせまとまんないんだって。
いつものこと。
0310デフォルトの名無しさん2013/01/11(金) 01:43:23.15
R5RSでR7RS処理系を実装すれば全部解決するんじゃね?
0311デフォルトの名無しさん2013/01/11(金) 02:21:11.28
>>309
つまり、そういうしがらみに縛られてるのはSchemeも似たようなもんなわけで、
あんま堂々とCommon Lispについて言える立場じゃないんじゃないの、ってこと。
その上で敢えて口にするならそれこそ>>304でしょ。

個人的には多少古い設計だとは思うけど、そんなdisられる程とも思えんよ。
一部のSchemerって印象とかで適当にCommon Lisp批判し過ぎじゃない?
0312デフォルトの名無しさん2013/01/11(金) 02:50:33.33
「データとプログラムに区別がない」という視点から見れば、schemeこそが真のlispである
0313デフォルトの名無しさん2013/01/11(金) 08:17:00.29
r6rsで、納得できる仕様をまとめられないからREPLは仕様から外しました、ってのはびっくりした。
妥協でも不完全でも、とにかく決めなきゃ駄目だよ。
0314デフォルトの名無しさん2013/01/11(金) 10:14:49.35
>>312
schemeってプログラムを読み込むのがREADじゃないからダメだとか言われてなかったっけ
schemeマクロは*仕様的だけ見たら*LISPフォームの操作じゃねーじゃねーかってやつ
あれ変わったのか
0315はちみつ餃子 ◆8X2XSCHEME 2013/01/11(金) 10:19:29.23
>>313
Common Lisp は処理系ごと起動しっぱなしで対話的に開発するのが基本スタイルだけど、
R6RS の場合は C みたいなスタイルを前提にしていると思う。
仮に C に REPL を入れるとしたら無理筋だってのはわかるだろ。

そのスタイルが良いか悪いかというのは置くとして、
大元になる想定が違うものに無理矢理ねじこんでも歪になるだけだよ。

REPL のある R6RS 処理系はフェイズの方を有耶無耶にしてるけど、仕様として決めるなら、
R6RS 風のフェイズの概念か REPL のどちらかを捨てる、あるいは2種類のモードに分けるかってことになる。
モードを分けるのは巨大化の前兆でよろしくない。
REPL を外すのは仕方ない面もあるんじゃないかな。

個人的には Haskell (ghci) 風にすれば辻褄の合うように出来そうな気がしてるけど。
0316はちみつ餃子 ◆8X2XSCHEME 2013/01/11(金) 10:21:52.28
>>314
R5RS ではプログラムがS式であるとは明記されてなかったけど、 R6RS では変わったよ。
0317デフォルトの名無しさん2013/01/11(金) 11:00:44.29
>>315
>R6RS の場合は C みたいなスタイルを前提にしていると思う。
え、対話的な開発スタイルの長所は全部捨てちゃうの?それはそれで道だとは思うけど、ホントにそれでいいのかなぁ。
0318はちみつ餃子 ◆8X2XSCHEME 2013/01/11(金) 11:57:30.94
>>317
仕様で決めないっていうのは有ってはいけないってわけじゃない。
つーか大抵の R6RS 処理系に REPL 有るし。

厳密に決めようとしたらまとまんないから処理系の裁量で柔軟に対処しとけってことだよ。
0319デフォルトの名無しさん2013/01/11(金) 14:15:52.50
R6RSなんて始まってもいない規格どうでもいい
0320デフォルトの名無しさん2013/01/11(金) 15:44:46.31
>>299
> そのとっ散らかってるのがかなりマイナスだと思うなぁ。
> Common Lisp ってモジュール化の仕組みはある (規格が曖昧っぽいけど)
> のに標準ライブラリがさっぱり整理されてないし命名規則も一貫してないしでわけわかんね。
実際の所、C系とか、Python系とかと比べてとっ散らかり度はどうなの?
CLはLISPのとっ散らかりはずっと言われてきただろうから、多少他の言語よりマシなのかと
推測しているんだけど。言語で腕試しのためにその言語の処理系を作る文化なんて他の言語に
ないでしょ。
0321デフォルトの名無しさん2013/01/11(金) 16:02:37.41
モダンな言語しか知らない若者は、CLのあの関数群を標準ライブラリだと思っちゃってもしょうがないかな。
あれらは言語の一部であって、決してライブラリじゃないんだが。
ああ懐かしき(行番号必須だったころの)BASIC。あれもコマンドも関数もいっぱいあったねー。
0322デフォルトの名無しさん2013/01/11(金) 16:40:50.54
>>320
ANSIで定義されている関数やマクロのすべてが組み込みってだけ。
common-lispっていう名前空間にフラットに収録されてる。
R5RS Schemeと似たような事情だと思えば間違ってないと思う。

処理系独自のライブラリとかはちゃんと別の名前空間に入ってる。
03231912013/01/11(金) 17:14:03.54
>>321
> モダンな言語しか知らない若者は、CLのあの関数群を標準ライブラリだと思っちゃってもしょうがないかな。
標準ライブラリ、実質標準ライブラリって具体的に何?
0324デフォルトの名無しさん2013/01/11(金) 22:07:29.97
>>315
CではなくAlgolだと思う
0325デフォルトの名無しさん2013/01/11(金) 23:30:33.34
>>323
だからさ「標準ライブラリ」とか「実質標準ライブラリ」なんてもんは無いんだよ。

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.88
Lispマシンでプログラミングしてた時代の考えをまだ引きずっているのか…
0327デフォルトの名無しさん2013/01/11(金) 23:40:05.79
まぁ、そういうこった。
0328デフォルトの名無しさん2013/01/11(金) 23:48:38.81
予約語や演算子は文法要素だから違うだろ
CLの関数は文法に関与しないのでライブラリに近い
0329デフォルトの名無しさん2013/01/12(土) 07:15:00.14
>>318
>仕様で決めないっていうのは有ってはいけないってわけじゃない。
じゃあscheme仕様は何のために作ってるの?
仕様が定まらなきゃユーザは実用的にはREPL使えないじゃん。処理系毎のREPLの動作調べてね、じゃ、おれにはschemeのREPLは使うべきではない、と言われてるようにしか思えないよ。
0330はちみつ餃子 ◆8X2XSCHEME 2013/01/12(土) 09:38:42.22
>>329
Scheme の仕様は叩き台にすぎず、
処理系ごとに特色を出して実装するもんだって Shiro さんが言ってた。
https://twitter.com/anohana/statuses/285272500764569600

様々な考え方に対する意見 (実装) が出尽くしてからじゃないと議論のスタートにならないので、
REPL の詳細を決めるには時期尚早ってこともあると思う。

個人的には REPL は言語仕様の一部というより開発環境なので仕様に入れるのはどうかという気持。
0331デフォルトの名無しさん2013/01/12(土) 10:32:32.29
話を豚来ってすまんがeqv?で真偽値や文字が特別扱いされてるのはなんで?
0332はちみつ餃子 ◆8X2XSCHEME 2013/01/12(土) 10:46:38.06
>>331
それは実装の事情と関係がある。

一般的な Scheme の実装ではオブジェクトはヒープに割当てて変数にはオブジェクトへのポインタを入れるようになってる。
eqv? は変数同士、つまりはポインタ同士の比較をするんだけど、
真偽値や文字にといった小さいオブジェクトに限ってはヒープに割当てずに変数に直接入れることが出来るので、
そのまま比較すると同値性が比較できてしまうってことになる。

一方の equal? は変数が指す先にあるオブジェクトも見て判定するわけだね。

実装面から説明しなけりゃならない仕様って格好悪い気もする。
0333デフォルトの名無しさん2013/01/12(土) 16:51:54.94
>>332
ちょっと違うな。ポインタ同士の比較はeq?だ。仕様には明記してないけど。
eqv?は数値の比較にも使えるが、数値は直接値であるとは限らない(非整数な有理数や
非実数な複素数はだいたいの処理系でヒープに置くだろう)。
仕様のココロとしてはeqv?はimmutableなオブジェクトの同値性、equal?はmutableな
オブジェクトの同一性ってのに近いんだけど、Schemeは伝統的にmutabilityについて
ちゃんと考えてこなかったせいでそう仕様に書けない。
0334デフォルトの名無しさん2013/01/12(土) 16:55:35.23
やはり時代はRacket
0335はちみつ餃子 ◆8X2XSCHEME 2013/01/12(土) 17:06:02.70
仕様を叩き台にして実験するっていう思想に一番合致してるのは Racket かもしれない。
0336デフォルトの名無しさん2013/01/12(土) 18:19:09.63
eqv?の使い所謎過ぎ
0337デフォルトの名無しさん2013/01/12(土) 19:46:08.36
SCHEME餃子とはちみつ餃子は同じ人なの?
0338デフォルトの名無しさん2013/01/13(日) 01:24:49.42
他スレで見たけど、和田本にschemeでscheme処理系の作る方法が書いてあるってさ
学部演習レベルで作れるらしいから、仕様が気にいらなかったら、自分で作ればいいと思う
0339デフォルトの名無しさん2013/01/13(日) 09:38:57.95
>>332
ポインタって何
0340SCHEME餃子 ◆8X2XSCHEME 2013/01/13(日) 10:21:15.57
>>337
同じ人だよ。
0341SCHEME餃子 ◆8X2XSCHEME 2013/01/13(日) 10:22:17.33
>>339
Cスレ行け

C言語なら俺に聞け(入門編)Part 111
http://toro.2ch.net/test/read.cgi/tech/1355062693/
0342SCHEME餃子 ◆8X2XSCHEME 2013/01/13(日) 10:55:25.01
>>338
ここでの不満は仕様への不満であって処理系への不満じゃないと思うぞ。
「この機能が標準 (仕様) 化されればいいのに」であって「この機能が使える処理系がない」ってことでは無い。
0343デフォルトの名無しさん2013/01/13(日) 15:06:06.58
>>332
なるほど。 タグビットってそういう意味だったのか。
前にソース見て意味不明だったんだけどそう思ってあらためて読んだら理解できた。
0344デフォルトの名無しさん2013/01/13(日) 17:38:41.81
日本語でおk
0345デフォルトの名無しさん2013/01/13(日) 19:26:52.01
おっ、ILC2012の記録だ。
http://d.hatena.ne.jp/ranekov/touch/20121025/1351163479
回想も面白そうだけど、まだ新しいことも出てくるんだな。
0346デフォルトの名無しさん2013/01/13(日) 19:33:54.33
>>342
配布処理系は標準仕様に準拠させてるんだから、「仕様に不満がある=この機能が使える処理系がない」
(まさか、どの標準仕様もカバーしてない処理系を推薦したり、どの処理系もカバーしてない仕様を議論してるなんて馬鹿はいないよね)
0347はちみつ餃子 ◆8X2XSCHEME 2013/01/14(月) 09:08:51.84
>>346
ここでの Scheme に対する不満は REPL が外されたことを始めとして「足りない」とか「曖昧」とかいったものが多いように見受けられたので、
処理系の拡張まで含めてであれば満足できるものだと思うという回答をしたつもり。
0348デフォルトの名無しさん2013/01/15(火) 00:20:13.93
>>297
500行ぐらいのプログラムの型推論を真面目にやると2分ぐらい計算にかかる。
ついでに静的に計算できるの全部やってしまっても計算時間あまりかわらない
0349デフォルトの名無しさん2013/01/15(火) 07:34:56.56
最速のscheme処理系ってどれ?
0350デフォルトの名無しさん2013/01/15(火) 08:28:01.01
stalin
0351はちみつ餃子 ◆8X2XSCHEME 2013/01/15(火) 09:25:55.34
stalin は高速だが整数が int のサイズだし、桁溢れの検出もしてくれないので、数値計算向けという割には使い勝手が良くはない。
余計なことをしないというのも速度に寄与しているから、それが悪いとも言えないんだけどさ。
必要なチェックを入れたり自分でチューニングする前提でなら stalin は良い選択かもしれない。

chicken も似たようなものではあるけど、ライブラリ次第で手抜きもチューニングも出来るので、
速度にこだわってそこそこ楽に使える妥当な落とし所だと思う。

mosh は gmp を使っているので巨大整数の計算は速い。
node.js 風の非同期 I/O の導入で I/O の効率化を図ってるのも興味深い。

Ypsilon はマルチコアの性能を引き出せるように並列化のための仕組みを取入れて高速化してたりもする。

動作速度と一言で言っても色んな意味の速度があるので「これが最速」とひとつを挙げるのは無理だよ。
0352デフォルトの名無しさん2013/01/15(火) 10:21:29.57
速度が必要ならSchemeなんて使うなよ
0353デフォルトの名無しさん2013/01/15(火) 12:32:19.66
www.larcenists.org/benchmarksGenuineR6Linux.html
mosh速いね
0354デフォルトの名無しさん2013/01/15(火) 16:10:06.27
>>351
巨人が作ったArcでも旧racketを使われているし、racketの論評はどんな感じですか?
0355はちみつ餃子 ◆8X2XSCHEME 2013/01/15(火) 20:15:30.35
>>353
いくつか数値なしのところがあると思ったら、エラーで動かないんだね。
0356デフォルトの名無しさん2013/01/15(火) 21:59:57.69
速度を調べるなら、schemeマシンでやってくれないと…
0357デフォルトの名無しさん2013/01/16(水) 00:35:43.02
Racket開発者のベンチ測定
http://blog.racket-lang.org/2010/01/benchmarks.html
0358デフォルトの名無しさん2013/01/16(水) 01:26:30.28
同じ言語の別実装で性能が異なるのって、何が原因なんだろ
0359デフォルトの名無しさん2013/01/16(水) 08:06:48.83
>>358
ひとつの仕様を実装するのにいくつも方法があって、それぞれ長所と短所があって、
何をしたいかによって選択が変わってくるんだから、性能が違う方が自然じゃない?
0360はちみつ餃子 ◆8X2XSCHEME 2013/01/16(水) 08:16:44.00
>>358
処理系の開発に投入された手間、それとトレードオフの割り切り。
先述の stalin を例にとってみよう。

グローバルなフロー解析で高度な最適化を
するのは手間をかけてその機能を作ったから出来たのであって、
それをしていない処理系よりはそりゃ速くなる。

高度な最適化のためにコンパイル時間がやたらと長くなってるけど、
双方を秤にかけて最適化の方に針を振ると割り切っている。

前者については開発にかかわる人 (才能) が多くなれば解決するけど、
後者については犠牲にせざるを得ない部分が出てくるので、
それぞれの処理系の設計思想でどこに焦点をあててるかってことになる。
速度のために対話的な開発は無視するっていうのもひとつの設計思想だし、
逆に速度を犠牲にしてでも親切なエラーチェックしまくるのもひとつの考え方で、
どちらがいいというものじゃない。
他の条件が同じなら処理速度は速いに越したことはないがそううまい話もないわけで。
0361デフォルトの名無しさん2013/01/16(水) 13:23:59.12
>>352
速度が必要な処理の大部分は数値計算
数値計算プログラムは数式処理から生成できる
数式処理に一番向いてるのはLisp
0362デフォルトの名無しさん2013/01/16(水) 14:34:52.73
>>361
Lispで基本動作確認して、LispソースをCソースに変換・コンパイルというのを
続けたお蔭で、Cのバッドノウハウを忘れてしまった(^^;
0363デフォルトの名無しさん2013/01/16(水) 15:57:44.98
そういえばshiroさんのC In S-Expressionってどうなったの?
0364はちみつ餃子 ◆8X2XSCHEME 2013/01/16(水) 16:23:10.67
>>363
普通に 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.13
ラムダリフティングとかについてならThe Implementation of Functional Programming Languages
0367デフォルトの名無しさん2013/01/17(木) 01:16:24.17
>>365
scheme処理系なら和田本マジオススメ
遅延ストリームや非決定性ambの実装まで載ってる
0368デフォルトの名無しさん2013/01/17(木) 01:32:35.92
質問です
common lispのテキストPAIPのscheme実装(22章)を読んでいたら
「schemeの大半のミューテータは、set!のように末尾が「!」である」(日本語版p.711)と書いてあるのですが
このミューテータとはどういう意味なのでしょうか?
0369デフォルトの名無しさん2013/01/17(木) 01:36:04.32
変化させる演算子
代入など
0370デフォルトの名無しさん2013/01/17(木) 05:34:01.30
イミュータブルなもの JavaのStringなど 初期化したら変更できない
ミュータブルなもの   普通の変数とかC++のstringとか
0371デフォルトの名無しさん2013/01/17(木) 20:03:51.01
よく話題に出る和田本というのはSICPの翻訳本のことでしょうか?
0372デフォルトの名無しさん2013/01/17(木) 20:06:36.73
>>353
にあるlarcenistsってベンチマークみると高速だけど
誰か使ってみた人いますか?
0373デフォルトの名無しさん2013/01/17(木) 22:19:40.57
>>369-370
なるほど。わかりました
0374デフォルトの名無しさん2013/01/17(木) 22:22:17.19
Larceny速いけどGaucheやRacketみたいな至れり尽くせりだと思ってるとがっかりするよ。
ついでに言えばここ一年くらい絶賛開発停滞中だ。
0375デフォルトの名無しさん2013/01/17(木) 22:25:13.40
>>364
気付いてなかった。ありがと。
0376はちみつ餃子 ◆8X2XSCHEME 2013/01/18(金) 08:47:21.44
主要な R6RS 処理系が implicit phasing を採用しているけど、larceny はちゃんと run と expand を区別してくれるので
複雑なマクロを書いたときに確認のために larceny で動かしたりしてる。
ただ、メタレベル2以上やマイナスの場合を expand として指定しても動いちゃったりするのでそれほど厳密なわけでもない。

まぁ、そういう細かなところは置くとしても、 >>374 の言うように、普段使いにするには使い勝手が悪いかなと思えるのは確か。
0377デフォルトの名無しさん2013/01/18(金) 10:51:45.91
define-struct
define-class
は処理系で挙動が異なるけど
define-record-type
は大部分の処理系で挙動が同じってことでいいの?
0378はちみつ餃子 ◆8X2XSCHEME 2013/01/18(金) 11:02:44.29
>>377
いいえ。
srfi-9 と srfi-57 と srfi-99 と R6RS でそれぞれ異なる定義がされています。
R6RS 処理系を使う分には R6RS の define-record-type を安心して使えますが、
そうでない場合はどれを採用しているかわかりません。
0379デフォルトの名無しさん2013/01/18(金) 15:43:19.80
SRFI を無視しても規格準拠を名乗れるの?
0380デフォルトの名無しさん2013/01/18(金) 17:55:50.79
SICPの発音ってSICK PEEなんだってな。
血尿かなんかか(笑)
0381デフォルトの名無しさん2013/01/18(金) 20:50:23.21
>>379
約50ページのschemeの仕様書R5RSの中ではSRFIは必須ではない
0382デフォルトの名無しさん2013/01/19(土) 12:25:18.42
はちみつさんはブログとか書いてないの?
0383はちみつ餃子 ◆8X2XSCHEME 2013/01/19(土) 12:37:02.05
>>380
そのネタは Part31 で既出だぁー。
0384デフォルトの名無しさん2013/01/19(土) 18:37:16.72
>>332
だとすると、R5RSにある型で即値に出来るのは
「真偽値」「文字」「空リスト」「小さい数値」
の4つってことか。
0385はちみつ餃子 ◆8X2XSCHEME 2013/01/19(土) 19:02:22.26
>>384
即値って元々はアセンブリ言語で「オペコードのすぐ後にくる値 (定数)」という意味だから、
「ポインタを経由する必要がない値」という意味で使うのに違和感があるんだけど、
Scheme (LISP) 的には一般的なの? 単に >>384 が勘違いしてるだけ?
0386デフォルトの名無しさん2013/01/19(土) 19:08:59.76
Javaの、プリミティブ型の値、という意味で使う奴がいたり、
あとRubyでも使われてたりするんだが、あまり普通じゃないと思う。
0387デフォルトの名無しさん2013/01/19(土) 19:43:24.36
>>385
間違いだと思うけど、よく見掛ける。
0388デフォルトの名無しさん2013/01/19(土) 20:09:25.93
そうなの? >>384じゃないけど、
良く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.52
ググってみたら Ruby では公式用語になってるみたいだね。
http://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.11
非参照値?
0391デフォルトの名無しさん2013/01/19(土) 20:55:46.33
値型/参照型?
0392はちみつ餃子 ◆8X2XSCHEME 2013/01/19(土) 20:57:03.27
TaPL の邦訳にワクテカしすぎて間違えた。
「The Scheme Programming Language で」
に読み替えて下ちい。
0393デフォルトの名無しさん2013/01/19(土) 21:13:33.04
一応他の例も挙げとくと、Lisp Advent Calendar 2012の7日目とか、
SBCLのdoc/internals/objects-in-memory.texinfoとかでも登場する。
ある程度認知されてる表現ではあるんじゃないか。
0394デフォルトの名無しさん2013/01/19(土) 22:53:45.01
リテラル?
0395デフォルトの名無しさん2013/01/19(土) 23:19:48.45
即値って、1ワードに収まるかどうかじゃないの?
アセンブラでもlispでも同じ意味だと思うけど。
0396デフォルトの名無しさん2013/01/19(土) 23:24:11.70
違う。即値はイミディエイトの訳。
アセンブラ(というか機械語)で、命令語中に埋め込まれたデータのこと。
0397デフォルトの名無しさん2013/01/20(日) 06:02:44.27
Immediate value なんて、直接(〜でき、〜され)る値って意味で、
具体的な意味は文脈に依存するだろ

LISPならcarもしくはcdrに直接格納できる値って意味で使われるだろうし、
機械語ならマシンコード中に直接格納される値って意味
0398デフォルトの名無しさん2013/01/20(日) 10:22:37.83
>>397
だから専門用語は文脈に依存しちゃ駄目なんだって。
0399デフォルトの名無しさん2013/01/20(日) 10:31:58.53
クロージャーみたいに依存しちゃった専門用語もあるけどなw
0400デフォルトの名無しさん2013/01/20(日) 10:36:37.71
>>398
だからImmediate valueは専門用語じゃないだろうと言ってる
0401デフォルトの名無しさん2013/01/20(日) 13:08:44.34
そうか。
0402デフォルトの名無しさん2013/01/20(日) 20:39:38.01
そうだったのか。
0403はちみつ餃子 ◆8X2XSCHEME 2013/01/20(日) 21:26:36.13
Racket が Android で動くらしいよ。
http://www.wedesoft.de/racket-on-android.html
0404デフォルトの名無しさん2013/01/20(日) 22:18:23.02
>>403
使い勝手はどんなものですか?
0405はちみつ餃子 ◆8X2XSCHEME 2013/01/21(月) 08:09:16.35
Android 端末を持ってないから知らん。
(Virtual Box とかでも動くかもしれないけど、動作環境を用意するのは面倒。)
誰かレポートよろ。
0406デフォルトの名無しさん2013/01/21(月) 23:12:04.59
LispマシンみたいなLisp携帯作ってください
0407デフォルトの名無しさん2013/01/22(火) 07:30:54.32
自分で作れよ
0408はちみつ餃子 ◆8X2XSCHEME 2013/01/22(火) 09:50:22.41
>>382
書いてるよ。
0409デフォルトの名無しさん2013/01/22(火) 19:17:08.34
>>408
Island Lifeだったり?w
0410はちみつ餃子 ◆8X2XSCHEME 2013/01/22(火) 19:34:36.99
>>409
んなわけない www
あんな超人と比べないで欲しいッス。
0411デフォルトの名無しさん2013/01/22(火) 23:20:39.30
全然芸風が違うと思う
0412デフォルトの名無しさん2013/01/22(火) 23:27:00.87
まずは見当違いの方向でと反応させてから、次第に絞り込んでいくのは特定厨の常套手段。
0413デフォルトの名無しさん2013/01/22(火) 23:41:08.09
はちみつ氏にそんなに興味ないけど
話変わるけど、渋谷lispどうなったかな
0414デフォルトの名無しさん2013/01/23(水) 00:02:12.30
今日が月一開催予定のミートアップ初回だったか。
cl,scheme,clojure順々にやるってみたいだけど
0415デフォルトの名無しさん2013/01/23(水) 00:04:02.97
Racketなんだけど
(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
gosh> (eq? '(5 6) '(5 6))
#f
gosh> (eqv? '(5 6) '(5 6))
#f
gosh> (equal? '(5 6) '(5 6))
#t
0417デフォルトの名無しさん2013/01/23(水) 02:03:46.20
>>415
#((quote hoge)) => #('hoge)
0418はちみつ餃子 ◆8X2XSCHEME 2013/01/24(木) 08:06:59.79
Scheme48 が久々のバージョンアップ。
0419デフォルトの名無しさん2013/01/25(金) 01:07:34.70
Common Lispのloopマクロに相当するものが
Racketではforなんだね
しかしSUBSEQに相当するものが見当たらない
forで作れるからないのだろうか
0420デフォルトの名無しさん2013/01/25(金) 13:51:38.93
俺俺LISPは大量にあるけど俺俺SCHEMEはあまり無い気がする。
0421デフォルトの名無しさん2013/01/25(金) 13:54:28.25
lispとschemeの違いってなんですか?
0422デフォルトの名無しさん2013/01/25(金) 15:06:22.69
オレオレlispの間を埋めるのがscheme。
0423デフォルトの名無しさん2013/01/25(金) 15:12:10.17
黒板で殴り合うのがScheme
泥団子を投げ合うのがCommon Lisp
両方つかってキャットファイトがLisp
0424SCHEME餃子 ◆8X2XSCHEME 2013/01/25(金) 18:28:28.20
>>420
Lisp には明確な定義がないから Lisp っぽければそれは Lisp で、「俺俺」な Lisp が存在できるけど、
Scheme は規格で決まってるものだからその実装は (拡張等で個性はあるにせよ) Scheme 処理系のひとつなわけで、
「俺俺」を付ける余地がない。

それは置くとしても Lisp ⊃ Scheme ということになってるので、
Lisp より Scheme の方が少ないのは当然っちゃ当然な話。
0425デフォルトの名無しさん2013/01/25(金) 23:15:03.89
>>421
クォートとエバル
0426デフォルトの名無しさん2013/01/26(土) 00:31:57.06
オレオレLisp は平和でいいじゃないか。オレオレCommon Lisp が沢山ある世界はヤバい。
0427デフォルトの名無しさん2013/01/26(土) 01:43:07.39
> クォートとエバル
クォートとは置いとくとして、最近エバったことはないな
関数読んできてコンパイルすることは結構あるが
0428デフォルトの名無しさん2013/01/26(土) 09:15:27.36
>>426
Cltl満たしてればいいんじゃね?
満たしてないとCommonじゃないわー
0429デフォルトの名無しさん2013/01/26(土) 12:36:26.05
scheme48って何が48?
0430デフォルトの名無しさん2013/01/26(土) 12:55:53.79
製作に要した時間。
0431デフォルトの名無しさん2013/01/26(土) 13:38:41.80
R7RSってまだファイナルにならないの?
0432デフォルトの名無しさん2013/01/26(土) 14:10:10.92
OSが30日で出来るらしいから48日もあればSCHEME処理系くらい出来るのか
0433SCHEME餃子 ◆8X2XSCHEME 2013/01/26(土) 16:21:15.05
>>432
48 時間だよ。
http://s48.org/1.9/manual/manual-Z-H-2.html#node_chap_1
0434デフォルトの名無しさん2013/01/26(土) 16:47:29.45
R7RSが出たらR6RSは死ぬの?
0435デフォルトの名無しさん2013/01/26(土) 17:51:10.34
そんなこと言ってるとr6rs擁護派のはちみつさんに叩かれるぞ。
0436デフォルトの名無しさん2013/01/26(土) 18:06:23.84
R7RSはすこぶる評判が悪い気がする。
0437デフォルトの名無しさん2013/01/26(土) 18:11:17.87
R5RSは小さい、R6RSは実用/大きい、みたいなイメージあったけどR7RSはどんな感じ?
0438デフォルトの名無しさん2013/01/26(土) 19:13:04.54
不必要というイメージ
0439デフォルトの名無しさん2013/01/27(日) 04:00:36.24
>>438
クソ、こんなので…w
0440デフォルトの名無しさん2013/01/27(日) 04:40:13.87
一つにまとまらない時点で
標準なんて言えたもんじゃないよね
0441デフォルトの名無しさん2013/01/27(日) 08:07:29.92
R12cRS でクラウド対応するはず
0442デフォルトの名無しさん2013/01/27(日) 17:24:22.33
>>435
はちみつさんはr6rs好きなの?
0443デフォルトの名無しさん2013/01/28(月) 01:56:42.13
>>441
Schemeの仕様はもう十分、お腹いっぱい
Schemeの仕様を議論する暇があったら、SRFI実装のバグをなくして統一APIを拡充すべき
0444SCHEME餃子 ◆8X2XSCHEME 2013/01/28(月) 09:31:43.23
何度も書いているような気がするけど、
ライブラリ (モジュール化) の仕組みを変えるのは無いわー。
ライブラリの中身はいくらでも議論すればいいと思うけど、
土台を変えるのはいかん。
0445デフォルトの名無しさん2013/01/28(月) 09:54:43.33
>>343
さっぱりわからん。
どうしてポインタと即値の区別が付けられるのか。
0446デフォルトの名無しさん2013/01/28(月) 10:08:58.91
だからポインタとか整数の前(あるいは後)にビットが付くんだって。
32ビットマシンなら、メモリやレジスタが36ビットだったりするわけ。
0447はちみつ餃子 ◆8X2XSCHEME 2013/01/28(月) 10:19:27.99
Gauche のソースにメモがあるので参考にすればいいんじゃないか。
http://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.07
ちょっと訂正。 R6RS の fixnum は 24 ビット「以上」ってことになってる。
0449デフォルトの名無しさん2013/01/28(月) 13:15:10.05
>>447
> Gauche の場合はヒープオブジェクトは常に4バイト境界に配置することになっている

それだとオブジェクトの間にスキマが空いてメモリがもったいなくね
タグを使うためだけにそれだけ無駄にしてんの?
0450デフォルトの名無しさん2013/01/28(月) 13:15:49.42
>>447
てことは、下位2bitが0の数値はポインタorただの数値かわからないってことでOK?
0451デフォルトの名無しさん2013/01/28(月) 13:30:00.96
>>450
即値を格納するときは2bit左シフトして、タグのビットを立てるんだろ
0452はちみつ餃子 ◆8X2XSCHEME 2013/01/28(月) 13:32:37.27
>>450
その場合はポインタで確定。
数値として使う場合は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
>>449
いまどき、特殊な用途とかでも無い限り、4バイト境界配置の隙間を気にする奴なんていない
0454デフォルトの名無しさん2013/01/28(月) 13:47:23.72
こういうのってmatchマクロで実装するのでしょうか
(f '(a (b c)) '(1 (2 3)))
=> '( (a . 1) (b . 2) (c . 3))
0455はちみつ餃子 ◆8X2XSCHEME 2013/01/28(月) 13:47:38.23
>>449
別途タグ用の領域を設けるとしたらその分だけメモリを消費しちゃうわけだし、どっちもどっちだろう。
値の大きさを32ビットに抑えればレジスタに乗るから速度的にも有利な可能性が高いし。
それと、オブジェクトの配置が境界に合ってた方がメモリアクセス速度も速い。
半端なところへのアクセスはCPUの内部的に二回に分けてアクセスすることになると聞いたことがある。

ただ、キャッシュに乗ってしまえば速度的なペナルティはなくなるとか、
色々と複雑な構造になってるらしいんで、性能的な面でどれが有利かは実際にやってみないとわからん。
既存の処理系がだいたい似たようなものってことは少なくとも実用上問題にならない程度なんだろ。
0456デフォルトの名無しさん2013/01/28(月) 14:07:35.78
>>451-452
なるほど、丁寧な説明ありがとうございます。
0457はちみつ餃子 ◆8X2XSCHEME 2013/01/28(月) 14:15:38.59
>>454
Scheme で?
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
>>447
逆に上位ビットがゼロの場合に fixnum ってことにして、ポインタの場合に左シフトするって方針は有り?
0459デフォルトの名無しさん2013/01/28(月) 22:02:27.90
>>458
それでも構わないけど、プロセッサによっては上位タグ数bitをマスクする方がインストラクションが
増えることがあるんじゃない? 即値で#x7を持つのと#xe000000000000000を持つのじゃ前者の方が
短いことが多いでしょう。
fixnumとポインタしか無ければ、最上位の1ビットだけで区別できるから、レジスタ自身とandとって
サインフラグを見て分岐するって手があるけど。でもfixnumと分かった時に符号拡張するのめんどいな。
0460デフォルトの名無しさん2013/01/28(月) 22:54:50.60
いや、上位ビットが0であることをOSは保証してないんだから、ダメでしょ。
(MSBなら0というOSもあるかもしれないけど。)
64ビットならともかく32ビットはアドレス空間一杯なので上位ビットつぶすのは不利。

古文書によると大昔の68000とかCPUは上位8ビットがデコードされてなくて、
自由につかえたそこをタグに使った実装が多かったらしいけど。
0461デフォルトの名無しさん2013/01/28(月) 23:17:09.54
>>458
直接インデックス, アドレスできなくなるので却下.

インデックスアドレスは 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.69
そろそろビット関係の話は抽象化して仕様から隠してほしいです
0463デフォルトの名無しさん2013/01/29(火) 00:07:41.34
tagged-pointer 理解するときは、 consp とか numberp とかのプリミティブを
実装することを考えるといいよ。
1ワードのデータを受けとって、cons か number か判断できなくちゃいけない。
で、既に出てるけど、メモリ上には常にalignされていることを利用して、
下位2ビットを別の目的に利用する訳だ。
個人的にはこんなこと思いつく人は賢くて尊敬する。
0464デフォルトの名無しさん2013/01/29(火) 01:33:52.76
Lispマシンと互換できないような仕様は表に出さないでほしかったり
0465はちみつ餃子 ◆8X2XSCHEME 2013/01/29(火) 08:25:17.54
>>458
fixnum の速度に特化するならそういう方針も駄目とは言えないけど、常識的には遅くなると思う。
GC ライブラリを使う場合はその都合に合わせなきゃ駄目だしなぁ。
0466デフォルトの名無しさん2013/01/29(火) 08:43:45.62
このスレは年寄ばっかだな
0467デフォルトの名無しさん2013/01/29(火) 13:11:47.65
処理系にそういう工夫があるのはわかった。
処理系のユーザー側として性能のよいプログラムを書く重点ポイントとかある?
0468デフォルトの名無しさん2013/01/29(火) 18:22:51.16
>>467
典型的で素直な再帰、末尾再帰を中心にしてプログラムを書くとコンパイラが最適化
しやすいと思う。
0469はちみつ餃子 ◆8X2XSCHEME 2013/01/29(火) 21:32:12.91
末尾呼出の最適化は規格で決まってることだから要するに積極的に活用しろってことだよね。

処理系を実装する側も出現頻度の高い (典型的である) パターンから重点的に最適化する。
処理系のユーザーがよかれと思って小細工してもそのパターンから外れて逆効果ってのはよくあることなので、
細かいところは気にせず普通な書き方で書いた方がいい。

あとは GC の発生頻度を低くするのが定石かな。 一端確保したオブジェクトを使い回すとかして。
GC は割と重い処理なんだよ。
但し、「GC の発生頻度を低く」ばかりを意識していると「典型的なパターン」からずれてしまうこともあるので、
そのあたりのバランスは様子を見ながら。
0470はちみつ餃子 ◆8X2XSCHEME 2013/01/29(火) 22:03:55.77
ナイーブな GC はメモリが足りなくなったときに発動して、
それでも足りなければ領域を伸ばすという方法を取る。
(どの程度伸ばすのが良いかは諸説ある。)

最初にガッっとメモリを使ってあとはそれほどでもない
というプログラムは効率が悪いかもしれない。
それも GC の設計によるので一概には言えないけど。

いずれにせよ、まずは処理系のクセを把握することが必要。
0471デフォルトの名無しさん2013/01/29(火) 22:11:01.67
そこまで気にして作る物って何があるの?
大抵の物は末尾再帰じゃなくても十分だと思うけど
0472デフォルトの名無しさん2013/01/30(水) 00:53:41.93
miniKanrenとOn Lispのbindなんとかマクロ群が同じなことに気がついてしまった
車輪の再発明だったのか
0473デフォルトの名無しさん2013/01/30(水) 01:34:15.55
>>462
同意
0474デフォルトの名無しさん2013/01/30(水) 01:43:01.91
>>471
他言語だけど、携帯のプログラムの受注でGCとメモリ管理の職人芸が必要になった
schemeでスマホか携帯のアプリを作ってる人がいるのだろうか
0475デフォルトの名無しさん2013/01/30(水) 03:40:46.25
>>471
「大抵の物」がどういう範囲を見てるのか気になる。まっすぐ並んでるデータをナイーブに
再帰すると深さはO(n)だろ。非末尾再帰だとn=10^5〜10^6くらいで大抵の処理系は何らかの
壁に当たらないか? (クラッシュしないまでも、スタックGCが頻発して性能ががくんと落ちるとか)。
Clojureみたいに遅延シーケンスでの再帰なら別だが。
0476デフォルトの名無しさん2013/01/30(水) 07:55:04.15
>>469
話題をぶった切ってすまんが、最適化するのは末尾再帰じゃなくて末尾呼出なのか?
0477デフォルトの名無しさん2013/01/30(水) 08:12:23.23
「呼び出し」は「再帰」を含むよ
0478デフォルトの名無しさん2013/01/30(水) 08:28:42.83
>>477
いや、それはわかるんだが、規格でそこまで求めてるのかってこと。
0479はちみつ餃子 ◆8X2XSCHEME 2013/01/30(水) 09:02:16.96
「適切に末尾再帰せよ」と要求していて、その後の「アクティブな末尾呼出の回数に制限がないなら適切に末尾再帰している」で適切な末尾再帰とは何かを定義している。
よって末尾呼出の回数を無制限にせよというのが実質的な要求だと俺は理解してるけど、それでいいよな?

っていうか、実装者の気持になって考えると、末尾再帰の場合だけ最適化っつー方が難しいだろ。
変数は破壊的に更新 (set!) されることもあるんだからある呼び出しが再帰かどうかなんてコンパイル時に判断できない。

末尾文脈での呼出しのときにリターンアドレスをプッシュしないっていうだけの簡単なことを無駄に複雑にする必要はない。
0480デフォルトの名無しさん2013/01/30(水) 11:20:13.20
>>479
俺もそう理解している。
名称を "properly tail-recursive" としながら
その実 "tail call" についての要求しかしてないのが混乱の元だと思う。

> っていうか、実装者の気持になって考えると、末尾再帰の場合だけ最適化っつー方が難しいだろ。
r6rs では大分マシになったよね。
export された識別子の束縛は変更不能だし、
export されてない識別子ならコンパイル時に判定可能だし、
REPL もなくなったし。
色々文句はあるだろうけど。
0481デフォルトの名無しさん2013/01/30(水) 13:17:06.33
末尾コンテキストにあるものは必ずジャンプになる、という実装を必ずしも要求してないんじゃないか、ってことね。
CONS 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.61
define-structやdefine-classをdefine-record-typeに統一するなら
C++みたいにスタックやキュー等のコンテナを標準ライブラリにいれて欲しい
0483はちみつ餃子 ◆8X2XSCHEME 2013/01/30(水) 15:31:52.56
>>480
だよなぁ。
R6RS のライブラリの分量が多くなってるのはともかくとして、
方針としては処理系を作り易い方向に振ってるよな。
レコードも筋が悪いと言われつつも実装が楽な方に流れちゃったし。
0484デフォルトの名無しさん2013/01/30(水) 23:25:52.55
>>483
もっとくやしく
0485デフォルトの名無しさん2013/01/30(水) 23:32:20.15
仕様を書き換えるなら、そのままの形で論文に引用しても文句言われないような書き方にしてほしいです
0486デフォルトの名無しさん2013/01/31(木) 00:14:19.35
>>190
だいぶ古い話かもしれんがVAIO Pは女の子のジーパンのポケットに
入ることが売りだったよ。
0487デフォルトの名無しさん2013/01/31(木) 00:58:46.49
お前は何を言っておるのだ
0488デフォルトの名無しさん2013/01/31(木) 01:22:00.47
100% scheme on scheme の処理系ってあるでしょうか
scheme -> C のトランスレータを作ってるので、上手くいけば smalltalk みたいな自己完結する環境できるかもしれないので
0489はちみつ餃子 ◆8X2XSCHEME 2013/01/31(木) 09:34:55.67
>>484
だよなぁ。
R6RS のライブラリの分量が多くなってるのはともかくとして、
方針としては処理系を作り易い方向に振ってるよな。
レコードも筋が悪いと言われつつも実装が楽な方に流れちゃったし! (# ゚Д゚) ムッキー
( `Д´)フォオオオオオオオオオ!
0490デフォルトの名無しさん2013/01/31(木) 10:01:46.48
>>489
ちがうちがう。
もっとくやしくおながいします。
0491はちみつ餃子 ◆8X2XSCHEME 2013/01/31(木) 10:17:30.89
だよなぁ。
R6RS のライブラリの分量が多くなってるのはともかくとして、
方針としては処理系を作り易い方向に振ってるよな。
レコードも筋が悪いと言われつつも実装が楽な方に流れちゃったし!!! (ノ#`Д´)ノ⌒┻━┻
ヽ(`(`(`(`ヽ(`Д´)ノ ファ・フォァ・フワォオオオオオオオオオオオン!!
0492デフォルトの名無しさん2013/01/31(木) 13:46:38.02
処理系を作りやすい方に振ったにしては既存の処理系開発者にはR6RS反対派も多いと聞く。
0493デフォルトの名無しさん2013/01/31(木) 15:54:44.14
末尾再帰はともかく、それを満たしつつ多値って、
スタック1本で実装しようとすると難しいと思うんだけど
schemeだと多値(というか戻り値)専用のスタックを別に用意するしかない?
0494はちみつ餃子 ◆8X2XSCHEME 2013/01/31(木) 16:06:11.22
R6RS は処理系を作り易いというよりも、静的解析しやすいと言った方が良かったかな。
結果的にコンパイラが最適化の工夫をする余地が大きくなっている。 (コンパイル時にわかる情報が多い。)

例えば >>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.77
evalとの確執
0496デフォルトの名無しさん2013/01/31(木) 21:22:29.96
仕様がそちらへ向かうというのは、schemeに対しては効率面の需要が多いということなのかな?
0497デフォルトの名無しさん2013/01/31(木) 21:35:40.42
速いにこしたことないじゃん
だったら動的型なんてやめろって思うけど
0498デフォルトの名無しさん2013/01/31(木) 22:56:49.28
>>497
だったらSMLでいいんじゃね。
0499デフォルトの名無しさん2013/02/01(金) 00:37:40.54
みんなは継続理解できて使えてる?
俺は理解できてるつもりだけどcall/ccがいまいち分からん
contが沸いて出てきてなにがなんだか
0500デフォルトの名無しさん2013/02/01(金) 01:56:45.27
call/cc で常に1引数の関数を渡すだけでOKというのが理解できるかどうかが鍵かと…
0501デフォルトの名無しさん2013/02/01(金) 02:16:07.35
R6RSはJVMの上で動く言語としては実装できないという衝撃的な現実
0502デフォルトの名無しさん2013/02/01(金) 02:25:33.59
>>501
なぜ? 効率考えなければできるんじゃない?
0503デフォルトの名無しさん2013/02/01(金) 03:22:19.06
効率について指定されてんじゃないの?
しらんけど
0504デフォルトの名無しさん2013/02/01(金) 07:37:33.05
tail callがどうしても不可だからって話じゃないの<<clojureとか
0505はちみつ餃子 ◆8X2XSCHEME 2013/02/01(金) 10:37:46.06
ホスト環境のスタックを使うと末尾呼出最適化できないという問題はあるけど、
スタックを扱うクラスを自前で作れば大丈夫だよ。
効率は悪いけど不可能というわけじゃない。
0506はちみつ餃子 ◆8X2XSCHEME 2013/02/01(金) 10:44:08.44
>>496-497
速度の需要はあるよ。 Scheme に限らず他の Lisp でもね。
ただ、 Scheme のアプローチの仕方が伝統的な Lisp とは違うという話。

CL では、逆アセンブラやプロファイラや型宣言といった
「道具」を用意してプログラマに頑張ってもらうという方向で
速度の需要を満たしてるわけだが、
Scheme の場合はそんなダサいことやってないで
コンパイラで最適化を頑張ろうぜっていう方向という違い。
0507デフォルトの名無しさん2013/02/01(金) 11:01:36.16
頑張っているのか分からない程度の最適化だよね
0508デフォルトの名無しさん2013/02/01(金) 11:20:21.76
Stalin並の最適化をするモダンなScheme実装が求められる
0509デフォルトの名無しさん2013/02/01(金) 11:59:53.84
ゴルバチョフって名前は、まだ勝手に使ったら怒られそうだなw
0510デフォルトの名無しさん2013/02/01(金) 14:34:38.01
いつプー様の名前のSchemeが出るか楽しみだなw
0511はちみつ餃子 ◆8X2XSCHEME 2013/02/01(金) 15:42:11.56
>>495
eval もよくわかんないんだよな。 eval に渡せるのは datum value ってことになってるけど、
いっそ返却値も datum value に制限してしまえばもう少し作り易くて使い易いものになったと思うんだよ。
実行中のプログラムと eval の中の環境が混ざらないように出来るから。
Google Chrome の JavaScript で別プロセスとパイプで通信するときはシリアライズ可能な値しか送れないことになってるじゃん?
あんな感じ。

それと environment もゼロ引数を許すのは何の意味があるのかわからん。
0512デフォルトの名無しさん2013/02/01(金) 17:05:46.10
>>511
なってるじゃん? とか言われても。

知らんがな。
0513デフォルトの名無しさん2013/02/01(金) 21:47:00.30
>>511
大学の演習で scheme on scheme を作るのに必要な仕様だから我慢してもらわないと…
0514デフォルトの名無しさん2013/02/01(金) 23:39:46.19
マイナーな寄生型lisp系言語が、徐々に寄生先を増やしてる
http://shenlanguage.org/news.html
https://github.com/hraberg/Shen.java
0515デフォルトの名無しさん2013/02/01(金) 23:47:56.07
lispのコードをそのままコピペできない言語をlisp系と呼ぶのはやめてほしいです
0516デフォルトの名無しさん2013/02/01(金) 23:51:37.88
lispのコードをそのままコピペできるなら、それはlisp系でなくlispだろう。
0517デフォルトの名無しさん2013/02/02(土) 00:30:44.05
shenはカリー化とパターンマッチがちょっと面白かったけどそれだけだった
0518デフォルトの名無しさん2013/02/02(土) 01:30:41.90
lispのコードをそのままコピペできない言語をlisp系と称してわざわざ開発するということは、lispのどこかに失敗点があるということだろうか…
0519はちみつ餃子 ◆8X2XSCHEME 2013/02/02(土) 08:36:54.11
>>515
Lisp のコードって何よ
0520デフォルトの名無しさん2013/02/02(土) 11:08:46.15
論文にあるやつ
0521デフォルトの名無しさん2013/02/02(土) 11:12:48.77
lisp系は関数定義がdefunだったりdefuncだったり、コピーしただけじゃ動かない程度の
非互換は日常茶飯事。
0522デフォルトの名無しさん2013/02/02(土) 11:25:31.71
Ypsilonで(car'(1 2))がエラーになるのですがバグでしょうか。
0523はちみつ餃子 ◆8X2XSCHEME 2013/02/02(土) 11:36:37.25
http://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3a%E7%BF%BB%E8%A8%B3%3aR6RS%3a4.2%20Lexical%20syntax
> <identifier>、 .、 <number>、 <character>、 <boolean> は <delimiter> か入力の終端で終端されなければならない。

そんでもってデリミタの定義は

<delimiter> → ( | ) | [ | ] | " | ; | # | <whitespace>

となっていて、クウォートはデリミタに含まれないことから、 car の後には空白 (またはコメント) が必要。
昔の Lisp 処理系では補助的定義の名前の末尾にクウォートを付ける場合があったっぽいのでそういう拡張を可能にするためかも? 知らんけど。

結論として Ypsilon のバグではない。 そういう仕様。
0524デフォルトの名無しさん2013/02/02(土) 16:08:53.50
Haskellでも末尾がクォートの名前はよく使うな。
schemeの最近の習慣じゃ頭に%を付けるみたいだが。
0525デフォルトの名無しさん2013/02/02(土) 19:29:11.83
>>519
大学の演習でつくったlispプログラムのソースコードの断片
0526デフォルトの名無しさん2013/02/02(土) 23:26:57.83
>>524
どちらもユーザに直接触ってほしくないという点では同じかもしれないけど、Haskellなんかのクオートが補助的な関数であることを表してるのに対して、Lisp系の%は内部的な定義であることを表してて意味が違うと思う。
0527デフォルトの名無しさん2013/02/03(日) 01:33:19.20
>>523
関連の話題
http://chaton.practical-scheme.net/gauche/a/2010/05/20#entry-4bf4bb60-d191f
05283492013/02/03(日) 11:04:04.24
で、最速の処理系がどれか結論出た?
0529デフォルトの名無しさん2013/02/03(日) 11:20:37.68
>>470
再配置しないタイプのGCはそういう状況で効率悪そうだ
0530デフォルトの名無しさん2013/02/03(日) 15:56:36.70
餃子の一番のお勧め処理系はどれ?
0531はちみつ餃子 ◆8X2XSCHEME 2013/02/03(日) 17:56:22.32
用途によるんだっての。 処理系のトレードオフと用途のトレードオフがマッチするやつを選べよ。

俺が最も使ってる処理系ってことなら Gauche だな。
R6RS が好きな俺だけど、 R5RS 処理系である Gauche をメインで使っている理由は日本語のドキュメントが有るという一点。
(もちろん他にも Gauche の素晴しいところはあるが。)
だって英語あんまりわからんし。

好きな処理系ってことなら最近は Sagittarius かなぁ。 なんとなくバグが多いような気がしてたんだけど、
修正の経過を積極的にブログに書いてあるからそう錯覚してただけなんじゃないかと思って、ちゃんと見たら結構良かった。
日常的に使いそうなライブラリがひと通り入ってて、これまで Gauche で書いてたものも簡単に移植できそう。
リリースサイクルが定期的、しかも一月ごとという短いサイクルなのも、どんどん改良されている感じがして良い。
0532デフォルトの名無しさん2013/02/03(日) 19:10:38.35
>>517
http://sandycat.info/blog/deptypes-shen/
http://goto.ucsd.edu/~ravi/research/djs/
ここら辺の型システムもJITの型推論と違って、
速度最適化に結びついて無いんだよな。
0533デフォルトの名無しさん2013/02/03(日) 19:11:42.46
携帯用の処理系作れ
0534デフォルトの名無しさん2013/02/03(日) 23:10:58.33
> だって英語あんまりわからんし。
RnRSも日本語訳されなきゃ読めないの?
全然だめじゃん
0535デフォルトの名無しさん2013/02/03(日) 23:13:04.26
ガラケーなら国産のjakldをどうぞ
http://www.yuasa.kuis.kyoto-u.ac.jp/~yuasa/jakld/index-j.html
スマホなら色々あるけど取り合えずGambit
play.google.com/store/apps/details?id=org.keithflower.gambit&amp;hl=ja
0536デフォルトの名無しさん2013/02/03(日) 23:54:34.14
クオートは個人的にはすごくヤです、null並に。
0537デフォルトの名無しさん2013/02/04(月) 01:38:00.66
BiwaSchemeでCodecademyのようなプログラミング学習サイトを作れるかな
0538デフォルトの名無しさん2013/02/04(月) 01:44:05.21
define-record-typeが任意の新しい型を生成できるせいで
型推論作ろうとすると、かなりめんどくさくないか?
0539デフォルトの名無しさん2013/02/04(月) 04:23:54.45
本質的にはベクターの各要素を名前で扱えるようにしただけだよ
ただのコンテナ
0540はちみつ餃子 ◆8X2XSCHEME 2013/02/04(月) 08:47:15.84
>>534
駄目だよ。
0541はちみつ餃子 ◆8X2XSCHEME 2013/02/04(月) 10:33:56.47
>>533 >>535
Racket も忘れないで。 >>403
0542デフォルトの名無しさん2013/02/04(月) 13:55:21.95
syntax-case はクソ。 意味不明すぎ。
0543デフォルトの名無しさん2013/02/04(月) 14:42:54.29
iPod touchでも動くかな?
0544デフォルトの名無しさん2013/02/04(月) 16:20:29.53
Lispが嫌いって人って食わず嫌いだと思うのだけど、Lispスレ住人の意見ってどんな感じ?
;;;過去ログで同じ問答あったらポインタ希望
0545デフォルトの名無しさん2013/02/04(月) 18:05:23.16
>>542
何を今更。
0546はちみつ餃子 ◆8X2XSCHEME 2013/02/04(月) 19:29:52.16
>>544
食わず嫌いは多分にあると思う。 でも、それを助長するような事情
もあると思うんだよな。 例えば、入門の題材がすぐに日常で使える
ものでない場合が多いような気がするし、実際に 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.70
餃子は長文好きだな
0548デフォルトの名無しさん2013/02/04(月) 21:20:31.24
CourseraとかUdacityとかEdX見てると
もうみんなPythonなんだよな
Lispなんて誰も使ってない
0549デフォルトの名無しさん2013/02/04(月) 22:41:37.21
Commmon Lispのdefmethod
に相当するものってschemeにはないの?
0550デフォルトの名無しさん2013/02/04(月) 22:41:39.97
schemeを先に習うと、lispが汚く見える
0551デフォルトの名無しさん2013/02/04(月) 22:50:01.97
Scheme手洗い
0552はちみつ餃子 ◆8X2XSCHEME 2013/02/04(月) 23:08:21.52
>>549
規格にはない。
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.57
GaucheのCLOSはもどきだったのか…
0554デフォルトの名無しさん2013/02/05(火) 07:18:41.98
そもそもCLじゃない。
0555はちみつ餃子 ◆8X2XSCHEME 2013/02/05(火) 07:27:21.38
CLOS って Common Lisp Object System だぞ。
Common 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
schemeってせっかく仕様があるのに、
見てると主義主張が別れすぎてて選び辛くない?
しかも標準じゃ物足りない分処理系ごとの拡張が多くて
CommonLisp以上に汚れて見える
0557デフォルトの名無しさん2013/02/05(火) 09:02:32.13
それがむしろLisp的というか。

Common LispはLispのそういうところをなくしましょうということで、
巨大な仕様を作ったわけだから。
0558デフォルトの名無しさん2013/02/05(火) 19:35:07.68
LISPは仕様があるからポータブルです! というのは一種の冗談だよな
0559デフォルトの名無しさん2013/02/05(火) 21:04:59.65
CommonLispはCL-USERの名前空間に関数がんがん突っ込んであるから巨大って言われるけど
他言語のモジュールも含めて比較してやれば小さいほうなんじゃないの?
0560デフォルトの名無しさん2013/02/05(火) 21:41:11.68
実際に数えて比較してから言ってくれ
0561デフォルトの名無しさん2013/02/05(火) 21:44:59.76
>>556
拡張部分はschemeではない
schemeとはあくまでもRxRSだけだ

ゆえにschemeの拡張部分が汚いという主張は、バカ学生が作ったコードが汚い、と同レベルの主張でしかない
0562デフォルトの名無しさん2013/02/05(火) 22:27:32.41
>>556
同意。巨大で不格好なCLより、
美しいハズの scheme の方が独自機能で汚くみえるときがある。皮肉だ。
0563デフォルトの名無しさん2013/02/05(火) 22:28:57.41
>>561
煽りじゃなく素朴な疑問なんだが、rnrs だけで現実的なプログラム書けるのか?
0564デフォルトの名無しさん2013/02/05(火) 22:47:19.94
>>563
既存ライブラリを再発明せずに、という意味なら現実的ではない。
Schemeに限らないけどな。
0565はちみつ餃子 ◆8X2XSCHEME 2013/02/05(火) 22:56:19.69
Scheme には色々と足りてない。
Scheme の仕様は議論の土台となるべく、ある程度の合意が取れた部分だけを固めたもの。
つまり、 Scheme の仕様は言語のあるべき姿の一部に過ぎなくて、
しかもその一部は「ある程度の合意がとれるくらいには充分に出来の良い部分」なわけ。
綺麗に出来たところだけを抜きだして綺麗だって主張も馬鹿馬鹿しいと思うよ。

結局、 Scheme の綺麗さっていうのは汚い部分を未定義にしてるだけなので、実用のためには汚い部分を補う必要がある。
(将来的にはそれも綺麗な形に整理されることは有り得るけれど。)
Scheme の仕様は拡張を前提としているところがあるので、主要な拡張を議論の題材にするのは有りだと思う。
0566デフォルトの名無しさん2013/02/05(火) 23:08:24.73
>>560
python とか ruby とか java とか haskell とかだと,
言語をインストールした時点で含まれているライブラリの API 数は
「なにこれ? へそが茶沸かすじゃん > CLの仕様」
ってくらい数あるよな?
0567デフォルトの名無しさん2013/02/05(火) 23:10:08.53
>>559-560
COMMON-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
Ruby の規格ってことなら JIS のはかなり小さいけどな。
最新仕様と言えるのは RubySpec なのかなぁ?

「仕様」って何よってところから思想の違いがあるような気がするので、
公平な比較ってかなり難しくない?
0569デフォルトの名無しさん2013/02/05(火) 23:30:47.91
仕様を最小限満たすインタプリタなどを作っているときのデバッグでは、仕様に無いオペレーターが欲しくなる。
0570デフォルトの名無しさん2013/02/05(火) 23:46:12.73
「言語の使用」と「実装の仕様」があって、「言語の仕様」は美しいけどさほど実用的でははなく、
「実装の仕様」は実用的かもしれないけど別に美しくないし互換性も時々ない、とかいうのは、
論理的にはいいんだろうけど、なんだ、その、めんどくさい

どの言語でも大なり小なりそういうのあるけどさぁ……
0571デフォルトの名無しさん2013/02/06(水) 01:11:13.72
面倒臭いなら実装=仕様な言語を使えばいいじゃない
俺はごめんだけどな
0572デフォルトの名無しさん2013/02/06(水) 02:13:04.88
gaucheのdefine-method
racketのdefine/public

統一してほしいなあ
0573デフォルトの名無しさん2013/02/06(水) 02:37:57.20
言語仕様そのものの部分と拡張部分やAPIは完璧に分離すべき
理由は、コーディングの際に明確に両者を分離できないと、論文で「schemeで…」と書くと嘘になってしまうから
0574デフォルトの名無しさん2013/02/06(水) 18:21:54.78
Common Lispの仕様が大きいってのは制定当時の話。
0575デフォルトの名無しさん2013/02/06(水) 18:38:49.09
RnRSの範囲だけでSRFIが実装できるならSRFIは完全分離できるのに
実際は処理系毎にSRFIの実装を強いられてるのはなぜか
0576デフォルトの名無しさん2013/02/06(水) 19:28:47.89
>>575
そもそもRnRSの範囲だけでSRFIは実装できない
0577デフォルトの名無しさん2013/02/06(水) 19:33:48.42
RxRSで実装できない部分はいったい何と呼べばいいのだろうか
0578デフォルトの名無しさん2013/02/06(水) 20:27:20.83
処理系で拡張する時のガイドラインのようなもの?
0579デフォルトの名無しさん2013/02/06(水) 22:10:46.53
>>573
EuLispは真面目にやろうとていたのにね。
0580はちみつ餃子 ◆8X2XSCHEME 2013/02/07(木) 00:48:22.99
>>573
だからモジュール化の仕組みが重要視されていた。
R6RS でようやくライブラリという名前で制定されて、import を除く全ての語彙は何らかのライブラリに属すようになった。
ライブラリシステムはライブラリ同士が干渉や衝突を起こさないように (避けられるように) 慎重にが設計されている。
これを土台にして様々な拡張をくっつけられるようになってるわけ。

なのに R7RS ではライブラリの仕組を変更しようとしてるから、
ライブラリの中身はともかく土台の部分を変えるのはなんだかなーという感じがしてる。
0581デフォルトの名無しさん2013/02/07(木) 01:45:10.66
>>576
え、これマジなの?
マジだとしたらいくらなんでもヒドすぎないか?仕様がおかしいか、SRFIがおかしいか、どっちかだろ
0582デフォルトの名無しさん2013/02/07(木) 05:56:38.32
>>581
srfi-49をrnrsの範囲で実装してみろよオラ
0583デフォルトの名無しさん2013/02/07(木) 06:36:38.46
>>582
>srfi-49をrnrsの範囲で実装してみろよオラ
いや実装してみろよ、と言われても困るんだが…
もしRNRSでそれが実装できないのなら、そんなものがSRFIに入ってるのは何かおかしくないか?、と言うのがおれの主張だよ。
0584デフォルトの名無しさん2013/02/07(木) 06:54:16.04
>>583
srfi-49は特に顕著だから挙げたけど、srfiの中にはリーダーの拡張とか仕様を越えた変更を加えるものも少なくないよ
そもそもsrfiは単なるライブラリじゃなくて、その名の通り実装に対する拡張なんだし、それの何がおかしいのか全くわからん
0585デフォルトの名無しさん2013/02/07(木) 11:50:32.13
srfiには仕様の実験場みたいな意義もあるよ。srfiで新しい仕様を試してみて、
うまくいったらrnrsに取り込もう、っていうような。単なるライブラリとは違う。
どっちかというと、RFCが出る→みんなで実装→生き残ったやつがSTD、っていう流れに
近いんじゃないか。
0586デフォルトの名無しさん2013/02/07(木) 12:02:03.28
ただその仕様への取り込みは基本的に行われない。
コミュニティ的にもそれで特に困ってないし。
Javascript並みに開発者増えたら、裾野が広がったら、今のままでは困るだろうけど。
コミュニティが小さく人的リソースが少ないのだからこんなもんだ。
やるべきだと思う人はMLで議論始めればいいじゃね?
俺は今のままでいいや。
そんな感じの小さいコミュニティ。
0587はちみつ餃子 ◆8X2XSCHEME 2013/02/07(木) 12:58:11.02
そのまま取込まれたわけじゃないけど、
R6RS の文字列ポートや syntax-case は SRFI を元にしてるかなぁ。
r6rs-rationale に SRFI との関係が書いてあるよ。
0588デフォルトの名無しさん2013/02/07(木) 15:28:45.81
そもそも言語仕様の役割は処理系ごとの独自仕様の差異を減らすことだと思うんだがな
0589デフォルトの名無しさん2013/02/07(木) 16:52:47.23
>>588 仕様の役割については色々な考え方がある。Schemeの場合は、プログラムそのものの交換よりも、
新しい計算の抽象化を考えたけどどうよ、みたいな議論の共通言語として使いたい、って色が
強いんじゃないかな。最近はどうかわからんけど。
だから仕様を大きくするよりは、意味論をフォーマルにしとこうぜ、みたいな話の方がみんな喰い付く。
0590デフォルトの名無しさん2013/02/07(木) 18:56:21.82
食いつくほど人がいれば→R6RS→R7RSみたいな事にはなってないでしょ。
人がいるJavascriptは拙速気味のECMAScript4をちゃんと食い止めてる。
騒ぐのは気力、体力がいるからね。
0591はちみつ餃子 ◆8X2XSCHEME 2013/02/07(木) 19:55:22.36
機能には相互関係がある。

フェイズの概念とライブラリとマクロって個別に決められない。
ポートや入出力まわりだって文字列やバイトベクタと関係がある。
例外とコンディションは不可分だし、例外を発生し得る全ての機能と関係する。

きっちり決めようとすると関連する部分の規定も必要になって、
結果的にある程度の大きさになるのは仕方ないんじゃないかと思う。

Scheme が議論の土台だというのはわかっているけど、
その土台は案外大きいかもしれないというのが私の考えで、
R6RS に好意的な理由でもある。
0592デフォルトの名無しさん2013/02/07(木) 21:51:06.45
gaucheが1.0になったら始めようと思って5年が過ぎた
0593デフォルトの名無しさん2013/02/07(木) 21:57:41.86
うんこ仕様のR6RS使うくらいなら一生R5RS使うわ
0594はちみつ餃子 ◆8X2XSCHEME 2013/02/07(木) 22:04:18.79
>>593
問題点があると思っているならそれを言ってくれないと発展性がないぞ。
0595デフォルトの名無しさん2013/02/07(木) 22:34:57.29
青森県がλ(ラムダ)プロジェクト
http://www.mutusinpou.co.jp/news/2013/01/24462.html

青森県の「λ(ラムダ)プロジェクト」が本格始動しようとしている。
λは「入」の文字にも似ていることから、県は“大入り”を願ってプロジェクトの成功を目指す。

ラムダプロジェクト概要
http://www.mlit.go.jp/common/000226796.pdf
0596デフォルトの名無しさん2013/02/07(木) 22:36:52.15
CommonLispやろうず
0597はちみつ餃子 ◆8X2XSCHEME 2013/02/07(木) 22:50:26.41
ヤダ。
0598デフォルトの名無しさん2013/02/07(木) 23:08:59.62
>>582
SxRS公理系は原始帰納関数より刑さん能力が低いのか、SRFI49は原始帰納関数では計算不可能なのか
0599デフォルトの名無しさん2013/02/07(木) 23:29:14.32
>>598
仕様読んだこともないんだから口はさむな。
0600デフォルトの名無しさん2013/02/08(金) 00:37:59.49
srfi が何か難しいものってのはわかった。じゃあ、rnrs で使えるライブラリ集みたいなのは他にないの?
0601はちみつ餃子 ◆8X2XSCHEME 2013/02/08(金) 00:55:32.21
R6RS で書ける範囲で SRFI を実装したものならある。
R6RS でポータブルに実装するのが不可能なものとかは除かれてるけど。
https://code.launchpad.net/~scheme-libraries-team/scheme-libraries/srfi
0602デフォルトの名無しさん2013/02/08(金) 01:36:34.35
つか、ネットワークとかのハード依存の部分はおいておいて、そもそもR6RSで書けない範囲って何なの
0603デフォルトの名無しさん2013/02/08(金) 03:14:47.73
schemeで巨大なプログラム組んだ事あるけど
name spaceで分けれなかったり
define-methodつかって型で分けれなかったり
するのつらかった
0604はちみつ餃子 ◆8X2XSCHEME 2013/02/08(金) 07:57:27.40
>>602
SRFI-49 や SRFI-10 や SRFI-88 のようなリーダの拡張を要するものとかかな。
プリプロセッサ的なものでどうにかできなくもないけど、それはちょっと違うしなぁ。

SRFI-37 や SRFI-98 も無理っしょ。
先程 >>601 で紹介したライブラリでは場合分けして処理系が提供する機能を使って
実装しているけど、ポータブルな方法は無いはず。
0605はちみつ餃子 ◆8X2XSCHEME 2013/02/08(金) 08:24:18.31
R7RS の ドラフト 9 が出たよー
0606デフォルトの名無しさん2013/02/08(金) 08:28:34.47
で、最速の処理系はどれか結論でたか?
0607デフォルトの名無しさん2013/02/08(金) 11:49:50.01
R5RS仕様書勉強会とか誰か開いてくれー。
0608はちみつ餃子 ◆8X2XSCHEME 2013/02/08(金) 12:38:17.24
>>607
意味論の話ならこれが参考になるかも。
http://lambda.bugyo.tk/hatena/r5rs.html
0609デフォルトの名無しさん2013/02/08(金) 13:01:50.93
絶望的に意味不明だぜ!!
0610はちみつ餃子 ◆8X2XSCHEME 2013/02/08(金) 14:01:58.06
大人がジャイロゼッターを見るんじゃありません。
0611デフォルトの名無しさん2013/02/08(金) 17:01:25.68
澪「タハハ 意味不明ゾ」
0612デフォルトの名無しさん2013/02/08(金) 17:21:39.18
>>610
リンネがかわいいからしゃあねえだろ。
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.68
Land of Lisp って Schemer が読んでも役に立つような内容?
0616デフォルトの名無しさん2013/02/08(金) 21:50:52.26
ワロタwww

http://www.oreilly.co.jp/books/9784873115870/
0617デフォルトの名無しさん2013/02/08(金) 21:58:18.37
キターーーーーーーーーーー!
0618はちみつ餃子 ◆8X2XSCHEME 2013/02/08(金) 21:59:29.36
R6RS は静的解析しやすい仕様っていう話を >>494 に書いたけど、
Sagittarius も未束縛変数の検出を厳密にするように変更したみたいだ。
いいネ!!
0619デフォルトの名無しさん2013/02/08(金) 22:02:54.90
>>616
これはないわー。劣化しすぎ
http://nostarch.com/sites/default/files/imagecache/product_full/lisp.png

ついでに
http://nostarch.com/realmofracket
0620デフォルトの名無しさん2013/02/08(金) 22:20:22.40
HaskellのすごいHに対抗して出したのだろうか…
0621デフォルトの名無しさん2013/02/08(金) 23:52:30.55
これがオライリー書架の中にあったらひときわ浮くなwww
0622デフォルトの名無しさん2013/02/09(土) 00:06:51.32
オライリーはリリカルLispのパロディ本を蛸壺屋に書かせるべき
0623はちみつ餃子 ◆8X2XSCHEME 2013/02/09(土) 00:14:05.84
>>619
オライリーの定型と組合わせるからネタとして面白いんじゃないか。
0624デフォルトの名無しさん2013/02/09(土) 00:15:50.33
俺が中学生だったら絶対に興味持つね。
0625デフォルトの名無しさん2013/02/09(土) 00:21:59.43
読者層ってやっぱプログラミング経験者なんだろうか。
0626デフォルトの名無しさん2013/02/09(土) 01:07:23.71
>>623
そういう評価もわかるけど
原著の表紙は毒々しい紫と緑の配色にしっとりした手触りの艶消しビニール
裏地は表紙のスライムに合わせた緑色の紙が貼ってあって
なんともこだわりを感じさせる装丁に仕上がっていたんだよ
それをオライリーの定型的なフォーマットに押しこめたら残念感のほうが強い

でもネタ切れ感の強い動物ではなくリスプエイリアンを持ってきたことは評価すべきか
0627デフォルトの名無しさん2013/02/09(土) 01:27:35.20
オーム社で出したすごいHaskellは違和感なかったけど、
この表紙はオライリーという動物園に入れられたのかw
0628デフォルトの名無しさん2013/02/09(土) 01:50:05.93
>>607
> R5RS仕様書勉強会とか誰か開いてくれー。
どういう勉強会がお望みなの?
0629デフォルトの名無しさん2013/02/09(土) 07:37:06.97
>>626
なるほど。でもおれは今のでも好きだ。「lispなんかヤバイ」感がでてる。

clojure本の第二版も出るようだし、lisp 始まったな!
0630デフォルトの名無しさん2013/02/09(土) 08:57:27.57
阿澄佳奈は何故にLand of Lispの宣伝をしないのか
0631デフォルトの名無しさん2013/02/09(土) 11:50:42.77
http://www.oreilly.co.jp/books/images/picture_large978-4-87311-587-0.jpeg
うーん、キモい
0632デフォルトの名無しさん2013/02/09(土) 19:24:22.75
もっとも古い言語だからもっとも進化してしまった
0633デフォルトの名無しさん2013/02/09(土) 20:19:45.91
Amazon.comでなか見すると英語が平易っぽいので原著で読もうかな。

しかし、史朗さんの翻訳も読んでみたい。
0634デフォルトの名無しさん2013/02/09(土) 20:25:32.59
入門しようと思って来てみたんだけどGCに抵抗ある。
C++を使ってたから開けたら閉めるの感覚が染み付いてるし、
勝手に動いて動作速度の足を引っ張る気がして。
0635デフォルトの名無しさん2013/02/09(土) 20:29:53.19
GC使いは速度が必要なところでのみ開けたら閉めるをやるか、もしくは開け閉めが要らないように作ります
0636はちみつ餃子 ◆8X2XSCHEME 2013/02/09(土) 20:37:40.17
>>634
GC の種類や、それで何をするかにもよる。

GC 有りの方がスループットは下がる可能性が高いが、ターンアラウンドタイム
は上がる場合がある。 それというのも、一般的なアプリケーションソフトは待
機時間の方が長いから、 GC 発動のタイミングをそこに持ってくることが出来
るので本質的な処理時間からメモリ管理の時間が消えるというわけ。 それと
C++ の場合はデストラクタが動けばそれに連なるオブジェクトのデストラクタ
が連鎖的に動く場合が多いんだけど、インクリメンタル GC だとメモリ回収の
タイミングを分散できるので小さな空き時間でちょこちょこ回収することも出
来る。

要は GC の特性を理解して書けばむしろ性能が上がる場合もあるってこと。
0637デフォルトの名無しさん2013/02/09(土) 20:58:48.67
メモリ管理みたいな低水準なことをプログラマに考えさせるな!!!!
0638デフォルトの名無しさん2013/02/09(土) 21:09:14.84
低水準なこともかんがえたいなら CL がいいんじゃないかな。
dynamic-extent 便利だよ。エクステントを明示することで、
指定したオブジェクトをスタック上アロケートされてGCいらず。
0639デフォルトの名無しさん2013/02/09(土) 21:39:15.08
>>634
速度が重要な部分では、>>635が言うようにアロケーションが入らないようにしたり、
>>638が言うようにスタックにオブジェクトを配置したりする。
自分はやったことないけど、その部分でだけGCを停止したりもする。
処理系によってはGCの挙動をコントロールしたりもできる。起動条件とか。

ホットスポットでアロケーション入れたりすると、想像の通り酷い事になるけど。
ループの中でappendしたりとか、部分文字列を生成したりみたいな。
そういうコードを書く人も結構いる。
0640デフォルトの名無しさん2013/02/09(土) 22:15:45.71
>>634みたいな奴の思考って
GC→Java→C++使ってる俺すげー
じゃないのか
0641デフォルトの名無しさん2013/02/09(土) 23:01:20.27
時代遅れな俺のC++の知識によると、C++でもスマートポインタとか実用化されて、
メモリ管理を自動化する流れになってた気がするんだけど、実態は違うの?
0642デフォルトの名無しさん2013/02/09(土) 23:25:27.71
>>641
いや、それどころか、
GCのライブラリを構築できるように、規格のメモリモデルが改善されたよ。
sequence pointの後継のsequenced beforeを使って。
その辺をまとめたのはBoehmさん。Boehm GCの。
0643デフォルトの名無しさん2013/02/09(土) 23:37:01.09
ゲーム作っているけど、インクリメンタルGCなんて大して役にたたんけどな
0644デフォルトの名無しさん2013/02/09(土) 23:45:23.19
〜では役に立たない
それがどうしたの?
0645デフォルトの名無しさん2013/02/10(日) 00:03:31.06
今どき自前で開け閉めしている男の人って・・・って感じある
0646デフォルトの名無しさん2013/02/10(日) 01:24:41.28
自前でメモリ管理するには人生は短かすぎる
0647デフォルトの名無しさん2013/02/10(日) 02:02:28.79
何その名言
0648デフォルトの名無しさん2013/02/10(日) 05:35:20.08
C++のデストラクタの仕掛けが特殊なだけであって
Javaでも閉じる方は明示するか手動でやるわけじゃん
0649デフォルトの名無しさん2013/02/10(日) 12:13:58.75
いいかげんに、プログラマをメモリ管理から解放してください
06505442013/02/10(日) 12:23:27.37
>>546
亀でごめん、良いリンクありがとう
>>646
感動した!
0651デフォルトの名無しさん2013/02/11(月) 00:35:51.68
オススメの本って何がありますか?
SICPとかプログラミング言語SCHEMEとか定番のところは読んだ(全部理解できたわけじゃないですけど)と思うので、
変わり種とか、直接にはSCHEMEと関係ないものでもこれは読んどけっていうのとかを教えて下さい。
0652デフォルトの名無しさん2013/02/11(月) 00:46:23.22
>>651
0653デフォルトの名無しさん2013/02/11(月) 00:46:54.22
>>651
Concepts, Techniques, and Models of Computer Programming
0654はちみつ餃子 ◆8X2XSCHEME 2013/02/11(月) 01:00:53.00
>>651
「とらドラ」
これは絶対に読む価値あり。 大河たん萌え。
0655デフォルトの名無しさん2013/02/11(月) 02:14:24.21
ジュンク堂にいったらいろんな本が大量にあるので、目を通してみるといいかも。
let over lambda, land of lisp, 素数夜曲
達人プログラマー、Release it!、ハッカーと画家、情熱プログラマー
0656デフォルトの名無しさん2013/02/11(月) 02:59:31.42
>>651
実用的な, そこそこのサイズのプログラムを書いて, 自分なりに
リファクタリング(仕様のリファクタリングも含む)するのが一番

プログラム作る上では, 各言語の規格書なり SICP 系の本とかで
OK なんだろうけど, 与えられた問題をエレガントに解きたい場合は,
対象領域の専門書とかを読むしか無いんじゃないか?

計算幾科学的にはエレガントな手法でも, 具体的なシステム相手の
場合は役に立たないことも結構あるし
0657デフォルトの名無しさん2013/02/11(月) 04:16:28.70
>>651
オライリーのGauche本→R5RS→和田本 でschemeが分かった気になれる
0658はちみつ餃子 ◆8X2XSCHEME 2013/02/11(月) 09:44:30.43
誰も >>654 に突っ込んでくれなくてサミシイ
0659デフォルトの名無しさん2013/02/11(月) 10:15:49.23
とらドラは普通に面白いから突っ込めないなー
0660デフォルトの名無しさん2013/02/11(月) 10:39:13.17
便乗。手習いの後書きにある本は全部読んだ方が良いのかな?
0661はちみつ餃子 ◆8X2XSCHEME 2013/02/11(月) 12:34:08.07
技術系の読物で特に面白いと思ったのは「C++ の設計と進化」だな。 肥大化した仕様を DIS られる
ことも多い C++ だけど、ひとつひとつの機能についてそれが必要だった理由を順を追って読んでいく
と無駄なものなどひとつも無いことが理解できる。

発展の歴史には既存の開発ツールとの連携を壊さないようにだとか、 C と足並みを揃えていくことだ
とか、書籍の揃い具合、仕様に精通した人材の育成、ライブラリの成熟、上位互換性、その他諸々の
要素が絡み合っている。 理論上の正当性に拘泥せず現実との折り合いを付けてきた「実際に使われる
言語」の重みというのはただの仕様ではなく仕様に連なるそれらの要素が含まれているわけだ。

Lisp が C++ を見習うべきだとか、どちらが良い選択などと言うつもりはないんだけど、 Lisp が選
んだ歴史と選ばなかった歴史を比較するのは有意義だと思う。

例えば、「関数型言語」という概念が生まれた背景には当然だけど関数型でない言語があるわけで
(全ての言語が関数型なら関数型という言葉は必要ない) 、関数型が関数型たる根源は何かというと関
数型でない言語との差異によって関数型なんだということになる。 同様に Lisp とは何かを理解する
ためには Lisp ではない言語との差異を理解することは必要だと思う。 違う性質の言語のひとつか
ふたつくらいは習熟とまではいわずとも読物を読むくらいはしておいて損はない。
0662 ◆QZaw55cn4c 2013/02/11(月) 12:56:47.93
確かにalgol系に偏在した言語界にあって関数型は一種の福音なのだろうと、長年、格闘し続けてきたのだけれども、もう疲れてしまった‥‥
0663デフォルトの名無しさん2013/02/11(月) 13:11:19.40
>>661 三行で頼む
0664デフォルトの名無しさん2013/02/11(月) 14:11:40.34
「C++ の設計と進化」はC++の仕様や機能ができるまでの背景が丁寧に語られていて良い
LispにC++を真似ろとは言わんがLispが選ばなかった歴史を学んでみるのもまた有意義であろう
Lispが何者であるかをよく知るためにはLisp以外のことも知っておいたほうが良い
0665デフォルトの名無しさん2013/02/11(月) 15:48:37.86
CやJavaを一切経由しないLispの学習カリキュラムがあってもいいはずだ
0666デフォルトの名無しさん2013/02/11(月) 16:01:51.35
相変わらず餃子はグダグダな長文好きだな
0667デフォルトの名無しさん2013/02/11(月) 16:07:15.28
こじつけっぽくないか?
0668デフォルトの名無しさん2013/02/11(月) 16:20:07.92
>>665
Scheme手習い/修行、素数夜曲、SICPでは不足?
0669デフォルトの名無しさん2013/02/11(月) 18:55:41.63
>>665
何をいまさら…
0670デフォルトの名無しさん2013/02/11(月) 19:03:13.04
>>669
不足って言うか、ちょっと寄り道したいなーっていう感じ
0671デフォルトの名無しさん2013/02/11(月) 19:27:16.54
HtDPもあるし
0672デフォルトの名無しさん2013/02/13(水) 01:14:58.41
>>531
トレードオフがあるのはわかるけど、それでもあえてこの要素はおさえときたいっていう要素ってあるかな。
速度とかエラーチェックの親切さとか、ローカライズとか、どれ?
0673デフォルトの名無しさん2013/02/13(水) 01:43:34.41
schemeで処理系の性能のトレードオフを気にしなきゃいけないって、いったい何のアプリを作っているのだろうか…
0674デフォルトの名無しさん2013/02/13(水) 05:20:20.20
画像処理
0675デフォルトの名無しさん2013/02/13(水) 12:03:21.26
音響処理
0676はちみつ餃子 ◆8X2XSCHEME 2013/02/13(水) 12:51:53.36
>>672
信頼性。

フルメタルパニックってライトノベルがあるのを知ってるかな? その話の中で意思の力を物理力に変換するラム
ダドライバ (←どうでもいいけどこの名前が良い) という兵器が登場する。 主人公は意思なんて曖昧なものを使
うのは兵器として不適格だと主張する。 引き金を引いたら確実に弾が出ることこそ兵器として必要なのだと。
威力より信頼性が大事なのだと。

ゴルゴ13は主人公が超人的なスナイパーってことは誰でも知っているよね。 この主人公がメインで使っているラ
イフルがスナイパーライフルではなくアサルトライフルである「アーマライト M-16」ってのは知ってたかな?
スナイパーライフルは連射が出来ないので咄嗟の事態に対応できない (無防備な瞬間が出来てしまう) というこ
とと、充分なメンテナンスが出来る準備がないと使い物にならないということ等が理由として上げられている。
自分の命運を託すにはいつでも使えることが大事ってことだね。

そんなわけで、信頼性が大事。 で、言語処理系に必要な信頼性っていうのは書いた通りに動くっていうことが最
低限のラインだと思う。 十分に規格を満たすか、それが出来ないのならドキュメントに記載するくらいはされて
ないと。 変に動くぐらいならいっそエラーで停止してくれた方がいい。
0677デフォルトの名無しさん2013/02/13(水) 13:11:13.94
引き合いに出すのが漫画とラノベかよ〜
0678デフォルトの名無しさん2013/02/13(水) 14:30:19.93
>>676
処理系に信頼性が必要ってのには大賛成。
0679はちみつ餃子 ◆8X2XSCHEME 2013/02/13(水) 16:00:24.12
>>677
ラムダドライバって言いたかっただけ

>>678
信頼性とは何かということになると人によって言うことは違いそうだけどな。
0680デフォルトの名無しさん2013/02/13(水) 16:25:58.55
>>679
俺がLISP処理系作ったらラムダドライバって名前にするわwww
0681デフォルトの名無しさん2013/02/13(水) 20:00:34.05
>>676
信頼性重要ってところははげしく同意。
gccでさえたまにバグ踏むことがあるけどバグトラッキングがしっかりしててワークアラウンドもすぐ出るからそういう体制も含めるとかなり信頼性は高かったりする。
俺的には信頼性を評価する重要ポイントは物の出来だけでなくて支援(互助)体制だと思う。
やりすぎるとRUBYみたいにクソな質問ばっかりのコミュニティになるけどな。
0682デフォルトの名無しさん2013/02/13(水) 20:45:14.28
>>676
自分で信頼に足る処理系を作ればいいんじゃねーの。そのぐらいできるんだろ?
0683はちみつ餃子 ◆8X2XSCHEME 2013/02/13(水) 20:54:23.51
仮に規格に厳密でなくても自分で作ったものなら把握できるし、
いざというとき手を入れやすいというのは強みだよな。
モドキ程度のものなら作ったことはあるから発展させてみるわー。
0684デフォルトの名無しさん2013/02/13(水) 21:53:58.46
はちみつラムダドライバーくるー
0685デフォルトの名無しさん2013/02/14(木) 02:07:49.12
ラムダドライバはArmScheme略してASを作ってバージョンをM9まで上げてからだな
0686デフォルトの名無しさん2013/02/14(木) 02:18:56.99
schemeでscheme処理系モドキ作るなら半日でできる
規格厳守なら1週間あればできる
0687デフォルトの名無しさん2013/02/14(木) 02:38:31.54
寄り道書籍といえばスマリヤンの新しい本が翻訳されて出たよ。
記号論理学、数理論理学がテーマらしいので今更読む必要ない人が殆どだろうけど。
0688デフォルトの名無しさん2013/02/14(木) 05:53:18.81
>>686
そういうのは作ったうちに入らんだろう。
はちみつ餃子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
Rubyが広まったのはやはりRuby on Railsのおかげ。
新しい処理系とかよりもキラーアプリの存在が重要。

継続ベースのWebアプリフレームワークとか・・・
0692デフォルトの名無しさん2013/02/14(木) 14:55:42.99
>>691
Gaucheって継続ベースのWebアプリかけなかったっけ?
0693デフォルトの名無しさん2013/02/14(木) 15:03:38.11
だから kahua について言及したいんだろうと思われるが
0694デフォルトの名無しさん2013/02/14(木) 15:17:30.34
KahuaのHPの更新がしばらく止まってるみたいだけど。
0695デフォルトの名無しさん2013/02/14(木) 16:30:09.36
>>685
怖がられたりしませんか (震え声
0696デフォルトの名無しさん2013/02/14(木) 16:48:31.28
>>695
きっとそのときはアニオタさんがらむだっちゃドライブ作ってくれる
0697デフォルトの名無しさん2013/02/15(金) 00:25:13.08
じゃあ、俺はオメガドライブ作るわ。カルロスな。
0698デフォルトの名無しさん2013/02/15(金) 00:35:23.58
>>697
ハレーの雫を〜 ?
0699デフォルトの名無しさん2013/02/15(金) 11:06:00.47
初心者です
0700デフォルトの名無しさん2013/02/15(金) 15:34:40.05
>>676
信頼性を測るベンチマークみたいのはないのでしょうか
0701はちみつ餃子 ◆8X2XSCHEME 2013/02/15(金) 18:00:50.94
>>700
信頼性が何かっていうのは人によって違うけど、
俺が考えているように規格適合に重きを置くならベンチマークというよりテストだろ。
R6RS ではこれが有名だと思う。
http://svn.plt-scheme.org/plt/trunk/collects/tests/r6rs/

規格には適合した上で、実用にするなら堅牢性も重要項目かな。
堅牢性を測るならストレステストの類が有用だと思うんだけど、
定番というようなものは知らないなぁ。
Ypsilon のソースコードと一緒に入ってるテストの中に syntax-rules のストレステストは入ってるね。
0702デフォルトの名無しさん2013/02/15(金) 18:10:26.37
>>699
そうか。
0703デフォルトの名無しさん2013/02/16(土) 16:05:50.24
め ん つ ゆ
0704デフォルトの名無しさん2013/02/16(土) 17:15:44.74
そうか。
0705デフォルトの名無しさん2013/02/16(土) 17:51:56.84
せ ん べ い 。
0706デフォルトの名無しさん2013/02/16(土) 18:14:25.48
最近、GaucheでSchemeを勉強し初めのですが、エラーメッセージが
gosh: "error": unbound variable: ls1
みたいに行番号もバックトレースも出してくれず苦労するんですが、なんとかなりませんか?
それとも、皆さんこんな環境でプログラミングをしているのですか?
0707デフォルトの名無しさん2013/02/16(土) 18:31:47.91
variable ls1 だけで十分だ
0708デフォルトの名無しさん2013/02/16(土) 18:54:41.36
デバッグプリント用のリーダーマクロがあるからそれを使うといい。
ttp://practical-scheme.net/gauche/man/gauche-refj_16.html
0709デフォルトの名無しさん2013/02/16(土) 19:23:47.77
昔のRacketでは動いた記憶あるのだけど、今動かしたら動かなかった

(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
>>709
こうかけばいい。
(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
デバッグプリントはともかく、確かにgauche のエラーメッセージはちょっと不足だとは思う。
他の言語より短い関数を書くことが多いことを差し引いても、もう少し支援機能が欲しい。
0712デフォルトの名無しさん2013/02/17(日) 13:18:17.70
デバッグ機能は1.0までに実装する予定って話じゃなかったっけ?
忘れてるみたいだけど、あれまだ1.0前なんだぜ。

http://practical-scheme.net/gauche/devinfo-j.html
0713はちみつ餃子 ◆8X2XSCHEME 2013/02/17(日) 13:35:55.81
チェックには glint がかなり使える。
http://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.63
お前それ前に俺が「デバッグ機能が云々」って言ってた奴に
WiLiKiに書き込んでみたらって言ったら凄いこと書き始めて
うわなにをするやめろ的な以下略。
0715デフォルトの名無しさん2013/02/17(日) 14:35:08.99
今はどこでハッスルされておられるのだろう。
0716デフォルトの名無しさん2013/02/17(日) 14:49:25.71
むしろ、自分で scheme on scheme を作って、そこでデバッグをやればいいと思う
デバッグが終われば 高速のscheme処理系で実行すればいいと思う
0717はちみつ餃子 ◆8X2XSCHEME 2013/02/17(日) 15:30:11.72
そういう方針ならこういうのがあるね。
http://legacy.e.tir.jp/wiliki?eval-sv
0718デフォルトの名無しさん2013/02/17(日) 16:30:39.79
>>706
unbound variableみたいなエラーなら、書いたコードをモジュールにして
ユニットテストでtest-module流せば見つけてくれるよ。
実行時に高価なエラーチェックはテストでやるって方針らしいし。
Schemeは末尾呼び出し最適化があるので、もともとスタックトレースはあまり当てにできない。
0719デフォルトの名無しさん2013/02/17(日) 17:53:50.23
初心者って書いているのにscheme on scheme とか glintとか何か方向性違うくないか?
0720デフォルトの名無しさん2013/02/17(日) 17:54:32.94
>>714
あったな、そんな流れw
0721デフォルトの名無しさん2013/02/17(日) 18:31:35.64
>>713
oshiete-shiro-san
にわらた
無駄にARToolKitとかすげー
0722デフォルトの名無しさん2013/02/17(日) 19:49:24.42
>>720
今見たら四年も前だぜ。仲間が欲しいので、
餃子の中の人も同じ目にあえば良いと思います!
0723デフォルトの名無しさん2013/02/17(日) 19:52:32.85
>>719
初心者だから、ツールの情報を貰って自分で進めばいいじゃん。
学校じゃないんだし。
0724デフォルトの名無しさん2013/02/17(日) 22:16:50.07
>>719
初心者は和田本読んで scheme on scheme を作ろう
0725デフォルトの名無しさん2013/02/18(月) 04:34:03.11
関数型言語全体の中で一番高速なのはStalinじゃなくてMLtomなんじゃないのかな
0726デフォルトの名無しさん2013/02/18(月) 06:58:25.95
Stalinが「関数型言語全体の中で最速」って主張してる人いるの?
0727デフォルトの名無しさん2013/02/19(火) 02:05:30.46
速度が欲しけりゃ schemeマシン持ってこい
0728デフォルトの名無しさん2013/02/19(火) 09:07:47.34
そっちの方が遅いというのが歴史の結論
0729デフォルトの名無しさん2013/02/19(火) 19:45:16.11
他の言語使ってた期間が長いからなのか
1つの関数が長くなりすぎる

(define (f x)
(define (member-f1 ...
(define (member-f2 ...
(define member-ver 2)
...

まるでC++ のclassみたいになる。もっとLispらしいスタイルはないものか
0730デフォルトの名無しさん2013/02/19(火) 19:53:25.46
関数の中に関数作らないで外に出したら。
0731デフォルトの名無しさん2013/02/19(火) 21:34:16.70
(define (f x)
(define counter 1)
(define (inc-counter) (set! counter (add1 counter))
...
)
みたいなの多様してしまう。なかなか外に関数だせない
0732デフォルトの名無しさん2013/02/19(火) 21:56:58.88
>>729
> (define (member-f1 ...
> (define (member-f2 ...
これって, 個別に定義すべき関数?
0733デフォルトの名無しさん2013/02/20(水) 01:31:57.91
let を使えばいいのではなかろうか
0734はちみつ餃子 ◆8X2XSCHEME 2013/02/20(水) 13:57:41.47
>>729
オブジェクト指向風にするのは悪くないよ。
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
Win32APIのハンドル的な扱いができればとりあえず不便はないと思う
それで慣れてるからというのがあるけど
*nix系のAPIはいきなりexitとかアホなライブラリがあるから参考にならん
0736デフォルトの名無しさん2013/02/20(水) 22:04:33.86
いみふ
0737はちみつ餃子 ◆8X2XSCHEME 2013/02/21(木) 00:07:04.46
>>736
おそらく >>735 が言うハンドル的というのは、
具体的な意味をもつ値ではなくオブジェクトを表現するユニークなラベルとしての値という意味で言ってるんだと思う。
R6RS で「不透明 (opaque) 」と表現してるのが近いんじゃないかな。
0738デフォルトの名無しさん2013/02/22(金) 00:38:17.51
Racketのlset-union! はmutable listのこと忘れて
これに入れ替えてくれないものか
これならmutableでないlistでも動く

(define-macro (lset-union! l1 lst)
`(set! ,lst (lset-union ,l1 ,lst)))

他の!がついてる関数も同じ感じで入れ替えてほしい
0739デフォルトの名無しさん2013/02/22(金) 04:15:19.42
>>738
lset-unionに対してlset-union!が用意されてる唯一の理由は「セルを節約できる*可能性がある*」
ってことだけで、lstが指すリストが更新されることはもともと保証されてないよ。
何か違うものを欲しているように見えるが。
0740はちみつ餃子 ◆8X2XSCHEME 2013/02/22(金) 10:19:40.82
R5RS だと ! 付きのは割当て済みのストレージに値を格納する手続きで、返却値は未規定。
R6RS だと返却値は未規定という表記は無くなった。
こういうのと、セルの再利用の可能性があるってだけのものを一緒にしちゃってるのはあまり良くない気がする。
0741デフォルトの名無しさん2013/02/22(金) 20:55:43.05
lispやってみて、階乗から始まってフィボナッチ、ハノイの塔、クイックソート
正規表現抹茶あたり組んでみたけど、なんか飽きちゃったなあ。
なんか面白いテーマないかな。

プログラマとして勉強になるのかな、と思ってたけど、CでもRubyでもできるよ
ねこんなのは。
0742デフォルトの名無しさん2013/02/22(金) 21:00:15.23
マクロ
0743はちみつ餃子 ◆8X2XSCHEME 2013/02/22(金) 22:33:25.22
第一級継続でさえRubyにもあるからなぁ。
Lispにしかないものってやっぱマクロだよね。
Perlとかにも有るっちゃ有るがS式を前提としないものはなんか違うなーという感じ。
0744デフォルトの名無しさん2013/02/23(土) 01:59:31.32
>>741
マルチ乙
0745デフォルトの名無しさん2013/02/23(土) 02:06:52.76
perl のマクロなんてほとんど使われてないんじゃないの?
実用的なマクロがあるのが唯一、 lispだと思う
0746デフォルトの名無しさん2013/02/23(土) 02:12:27.16
c++にもある
0747デフォルトの名無しさん2013/02/23(土) 03:11:47.49
自分でテーマが見つからないんならやめれば?
0748デフォルトの名無しさん2013/02/23(土) 09:27:09.90
>>741

Lispコンパイラの作成(最適化を含む)
0749デフォルトの名無しさん2013/02/23(土) 12:10:01.59
> プログラマとして勉強になるのかな、と思って
略
> lispやってみて、階乗から始まってフィボナッチ、ハノイの塔、クイックソート
>
0750デフォルトの名無しさん2013/02/23(土) 12:12:05.54
この程度の奴は何やっても浅くかじってすぐに飽きるだろ。
0751デフォルトの名無しさん2013/02/23(土) 13:46:14.03
OCamlやScalaにもあるけど、サンプルコードを見る限りコレジャナイ感が凄い。
そう考えると伝統的なマクロは本当に手頃で実用的。

hygienic macro? syntax-caseにするのかsyntactic closuresにするのかexplicit renamingにするのか、
一定のコンセンサス得てから出直して来てください。
0752はちみつ餃子 ◆8X2XSCHEME 2013/02/23(土) 14:19:56.52
その 3 つは御互いをエミュレートできる。
そんでもって伝統的マクロも模倣できる。
言語のユーザーにしてみればどれでもいいんだよ。
使い難いなら適当な皮をかぶせればいいんだから。

どれかひとつに決まらないのは、使い勝手なんかよりも、どれがプリミティブにふさわしいかという点で合意できないからだと思う。
(R6RS で syntax-case を採用したのは失敗という意見が多いけど。)
Scheme の仕様を議論するときに手頃感や実用性は後付けでいいの。
プログラマが手頃にしたい、実用的にしたいと思ったときにそれが出来る仕組があるってことが必要なんだよ。
0753デフォルトの名無しさん2013/02/23(土) 14:41:37.43
はぁ?
0754デフォルトの名無しさん2013/02/23(土) 14:42:28.36
(笑) - 書評 - Land of Lisp
http://blog.livedoor.jp/dankogai/archives/51854832.html

スーパーハッカー子飼い先生もお勧め
0755デフォルトの名無しさん2013/02/23(土) 14:52:48.61
>>752
そういう合意を早く得てプリミティブを決めないの? って話だよ。決めにくいのはわかるけど。
APIが三種あるけどエミュレートは簡単にできるから、好きなの選べって初学者に言うの?
マクロが三種類あるAPIで書かれて、ふたつは消えると分かってて読む側は三種類覚えるわけ?
これって傍から見るとかなり微妙な話だよ。
0756デフォルトの名無しさん2013/02/23(土) 14:57:55.49
ちなみに、>>751は実用性以前の問題なのでまずは仕様を決めてくださいね、って話だから。
そういう意味でsyntax-rulesについて言及してない。
0757デフォルトの名無しさん2013/02/23(土) 16:10:20.95
最初はリスト操作が判れば使えるdefine-macroでいいよ
実用上ほぼ問題ないし
他はなんでhygienicじゃないとダメなのか理解した上で手を出したらいい
0758はちみつ餃子 ◆8X2XSCHEME 2013/02/23(土) 16:56:39.54
>>755
俺が >>752 で言いたかったのは、
Scheme の仕様は使い勝手の良さで決めるべきじゃないってことと、
伝統的マクロはプリミティブになりえないってことであって
決めなくていいってことじゃないよ。
0759デフォルトの名無しさん2013/02/23(土) 19:31:33.64
>>754
酷い書評だな
スーパーハッカーじゃなくスーパーバカの間違いだろ
0760デフォルトの名無しさん2013/02/23(土) 20:05:36.33
まあ書評にはなってないなw
敷居が低そうだし、これまでのどの本よりも入りやすそうではある。
数学数学しすぎてないし。
0761デフォルトの名無しさん2013/02/23(土) 21:42:21.35
>>758
ようやく意図を理解できたわ。hygienic macroのアプローチを扱き下ろしてる訳じゃない。
そういう風に勘違いさせたなら悪かった。皮肉ってるのはコミュニティの動きの鈍さの方。
五年前と状況が一緒に見えるんだけど、いつ議論は収束すんの? 来世?
0762デフォルトの名無しさん2013/02/23(土) 22:53:33.87
>>761 5年や10年でSchemeが変わると思ったら大間違いだぞ。
0763デフォルトの名無しさん2013/02/23(土) 23:29:17.41
実際に使われてる言語の中じゃ、Fortran と Lisp の次くらいに古い言語だっけ?
0764デフォルトの名無しさん2013/02/24(日) 01:28:33.11
http://ideone.com/BQu0Of
gaucheを使っています
なぜahogeが定義されないのかを教えてください
0765デフォルトの名無しさん2013/02/24(日) 01:33:43.40
r5rsのマクロはマクロの中と外の変数は共有出来ない
define-macro使えばいいよ
0766デフォルトの名無しさん2013/02/24(日) 02:07:02.42
>>754
今日早速購入
やっぱ日本語だとすらすら読めていいですね
これなら1週間ぐらいで読破できる
0767デフォルトの名無しさん2013/02/24(日) 02:12:54.61
>>765
そうだったんですね
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
>>768
(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.22
その発想はありませんでした・・・
0771はちみつ餃子 ◆8X2XSCHEME 2013/02/24(日) 16:18:53.28
>>761
理論的に明確な差がないならしばらく放置しといてデファクトスタンダードがどれになるか待つしかないんじゃねーの。
今のところは explicit renaming が優勢っぽいから R7RS large で一区切りつくと思う。
それでも R8RS ではまた覆る可能性もあるから安心できないのが Scheme だけどな。
0772デフォルトの名無しさん2013/02/24(日) 17:07:54.05
>>766
もの凄く読みたいのに
書籍で床が抜けそうで新規書籍購入禁止令中につきebook版待ってる状態で涙目(床がゆがんできてかなりやばい)
自炊用に裁断機とスキャナ買うかマジ悩み中
0773はちみつ餃子 ◆8X2XSCHEME 2013/02/24(日) 20:56:52.70
R4RS に低レベルマクロのこと書いてあるんだな。
仕様の一部というわけではなくて syntax-rules の土台になりうる方式の一例として紹介してるだけだけど。
syntax-case 方式からパターンマッチを無くしたような感じ。
0774デフォルトの名無しさん2013/02/24(日) 22:15:16.78
> 床がゆがんできてかなりやばい
うちの構造は? どんなとこにどのくらい住んでんの?
うちも長期間を考えるとやばいのかな?
うちは書籍だけで 1t くらいあるんで反面教師として知っておきたい
一昨年引越した時、引越し業者がトラック変えに行った覚えがある
0775デフォルトの名無しさん2013/02/24(日) 22:38:27.49
gaucheもgmp使えばかなり高速化できるんじゃないのかな
0776デフォルトの名無しさん2013/02/24(日) 22:38:29.19
そもそも古典的マクロって何が駄目なんだっけ?シンプルでいいとおもうんだけど。
0777はちみつ餃子 ◆8X2XSCHEME 2013/02/24(日) 22:47:00.87
>>776
健全性を維持できないケースがある。
http://blog.practical-scheme.net/shiro?20100425-scheme-macro
0778はちみつ餃子 ◆8X2XSCHEME 2013/02/24(日) 22:53:33.97
>>775
ライセンスの問題があって駄目って話だったような。
0779デフォルトの名無しさん2013/02/24(日) 23:03:29.11
床がたわむほど本持ってても読み返さないだろ。
調べる為に持ってるなら自炊した方が良い。
尤もLisperならその全てを卵焼き作る間に実装してしまうはずだがw
0780はちみつ餃子 ◆8X2XSCHEME 2013/02/24(日) 23:14:58.90
>>779
俺はそんなに大量の本を持ってるわけじゃないが、
コレクション欲は理解できる。
合理的に考えればデータ化すればいいんだけどなー
0781デフォルトの名無しさん2013/02/24(日) 23:21:30.76
俺は本棚用に部屋借りてるよ
0782デフォルトの名無しさん2013/02/24(日) 23:25:17.61
>>777
リンク先読んだけど、要はif とかを束縛しなきゃ問題にならないんじゃないの?
そんな回避策のあるレアなケースのために、シンプルさを犠牲にするのって割に合わなくない?
オレの読み方が違ってるのかなぁ。
0783デフォルトの名無しさん2013/02/24(日) 23:32:02.77
確かにLisp本は長い間希少だったから、読む予定なくても出れば買っちゃうけど。
それだけじゃ部屋いっぱいにはならない。
みなさんどんな本を集めておられるのか教えてくだされ。
0784デフォルトの名無しさん2013/02/24(日) 23:54:18.37
現在入手可能なlisp関連本でおすすめ10冊を聞きたい
0785デフォルトの名無しさん2013/02/24(日) 23:56:07.74
伝統的マクロだと展開するときにクロージャ使うじゃん
letとかでそのクロージャにifとかの実体を束縛してやることで、健全性を保つことはできないのかな

(define-macro hoge
(let1 _if if
(lambda args body ...)))
こんな感じで
マクロを展開するタイミングでは特殊形式の実態を値として扱うのもアリだと思うし
0786デフォルトの名無しさん2013/02/24(日) 23:57:07.97
Land of Lisp買うぐらいならまず素数夜曲をかっちりやった方がいいと思う。
0787はちみつ餃子 ◆8X2XSCHEME 2013/02/25(月) 00:00:47.74
>>782
if とかの構文に限らないよ。
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なんていうローカル束縛があると まずいわけだ。
0788はちみつ餃子 ◆8X2XSCHEME 2013/02/25(月) 00:01:43.69
>>785
おおぅ。
そんな方法があったか。
0789はちみつ餃子 ◆8X2XSCHEME 2013/02/25(月) 00:08:31.31
>>785
いや、やっぱそれは無理だわ。
if の内側を第一級にするんだと意味論の大幅な変更が要る。
識別子としての if を扱えるようにするのなら、
既出のハイジニックマクロと同じだし。
0790デフォルトの名無しさん2013/02/25(月) 00:29:33.47
>>789
マクロが展開されるのとifみたいな特殊形式が認識されるのはタイミングとしては同じだし、マクロが定義される環境をはっきりしてやれば特に矛盾はないと思うんだけど
そりゃ(define if2 if)みたいのを許可しようとしたら大変だろうけど、それとはまた別の問題なのでは?

evalの中で#<syntax>が使いたいみたいな話がgaucheで出たときに、似たような話になった気がするけど正直よくわかんない
0791デフォルトの名無しさん2013/02/25(月) 00:39:54.88
(define-macro (bar) `(,foo))
0792デフォルトの名無しさん2013/02/25(月) 00:43:04.03
gaucheなら785の方法で787は実装できる
最悪特殊構文については諦めるにしても、一貫性があって悪くない手段じゃないかと愚考する


と思ったけど、コンパイル時と実行時の環境が同じだからできる芸当だねこれ
インタプリタだけならいいけど静的にコンパイルする可能性を考えるとダメっぽい
0793デフォルトの名無しさん2013/02/25(月) 00:50:58.67
>>782
そういう考え方ももちろんあって、Paul GrahamのArcがそれ。

ただ、hygienic macroの方も実装がややこしいだけで、
使う側からすると伝統的マクロと同じくらい簡単。
0794デフォルトの名無しさん2013/02/25(月) 01:21:04.12
>>786
素数夜曲そんなにいい本なん?
0795はちみつ餃子 ◆8X2XSCHEME 2013/02/25(月) 01:44:50.73
>>792
ああそうか、 CL で伝統的マクロがうまくいってるのは Lisp-2 もそうだがフェイズの違いもあるんだな。
0796はちみつ餃子 ◆8X2XSCHEME 2013/02/25(月) 02:16:29.20
>>794
値段あたりの文字数では素数夜曲の方が上。 お得。
0797デフォルトの名無しさん2013/02/25(月) 02:33:53.51
そりゃSchemerならそう言うだろうさ。
でもLand of Lispの方が楽しそうじゃん。(←反論になってない)
0798はちみつ餃子 ◆8X2XSCHEME 2013/02/25(月) 02:57:33.16
テーマがゆるい感じなのが Land of Lisp の良さなんだろうね。
まぁ比較するようなものではないな。 両方読んどけばいいよ。
0799デフォルトの名無しさん2013/02/25(月) 03:02:25.45
スタバで読むにはどっちかといえばLand ofだろうな。
「表紙のエイリアンがかわいい!きっとあの人Lisperなのね!」
周りの女の子もそう思うはず。※
黒いふくろう表紙では、、
「あの人、夜のぞきやってるんじゃないの?キモヲタ通報するわよ!」
ってなるでしょ。
まあスタバで人の持ち物ヲチしてる女の知的水準なんてそんなもんだ。

ただ、個人的には素数夜曲は鞄に入らない。
それだけの理由でLand ofを先に読み終わると思う。
0800デフォルトの名無しさん2013/02/25(月) 05:47:01.01
>>787
そのbarの位置はfooがローカルに束縛されてるのだから、グローバルなfooを参照する普通の式は書けないよね?
つまり、「健全な」マクロは式変形以外のことをやっている訳で、個人的にはそれが気持ち悪い。
考え方が違うのだろうけど。
0801デフォルトの名無しさん2013/02/25(月) 05:51:43.84
>>793
健全なマクロってlispと違う言語に見える。でも試してみるよ。
arc も触ってみたい。(最近arcの名前聞かないね)
0802デフォルトの名無しさん2013/02/25(月) 13:08:00.79
「すごいScheme楽しく学ぼう」
「Head first Scheme」
「Steel & Sussman Programing Langage Scheme」
0803はちみつ餃子 ◆8X2XSCHEME 2013/02/25(月) 15:02:46.19
>>800
なるほど。 マクロが単に短く書くだけのものとして見るなら、
本来書けないものを書けるようにするのは余計っていうことか。
そういう発想はなかったな。

Scheme の特徴に第一級継続があるわけだけど、
継続の概念そのものは言語にかかわらずあるのであって、
陽に扱えるようにしたところに特徴がある。

それと同じように「文脈情報」も常に背後には有るものと考えていたので、
伝統的マクロは情報を捨てているというイメージだった。
0804デフォルトの名無しさん2013/02/25(月) 20:41:00.93
Land of Lispはお奨めなの?
バグ出しが終わる2刷りを待つか
0805はちみつ餃子 ◆8X2XSCHEME 2013/02/25(月) 20:45:41.10
>>801
syntax-rules や syntax-case がパターンマッチを軸に据えてるせいで
異質に見えるんだと思うけど、それが健全なマクロの全てではないよ。

なんだか皆が言う「健全なマクロ」ってそれぞれイメージしてるものが違うくない?
explicit renaming なら使い勝手としては伝統的マクロとそんなにかわんないよ。
健全性の話と具体的な API の話がごっちゃになってる気がする。

syntax-rules が嫌いっていうだけの人も健全性に懐疑的になってないか?
0806デフォルトの名無しさん2013/02/25(月) 22:32:16.29
コアな人以外にとっては、Schemeのマクロはsyntax-rulesとsyntax-caseなんだから、
そりゃそう思われることもあるだろ。Gaucheでもまだ使えんし、explicit renamingなんて普通知らねーよ。
0807デフォルトの名無しさん2013/02/25(月) 22:33:35.82
Land of Lisp買ってきたなう。これからよむ。
SchemerのためにGaucheでの実装も用意されているとは徹底してるなw
ttp://blog.practical-scheme.net/shiro/20130223-land-of-gauche
0808どうでもいいけど2013/02/25(月) 22:54:42.21
>>763
Cの方が若干古いです。
かなり少なくなってきているけどBASIC、COBOLってのもあるしね。
0809デフォルトの名無しさん2013/02/25(月) 23:02:18.97
>>807
Shiroさんすばらしい
0810デフォルトの名無しさん2013/02/26(火) 01:05:04.88
文脈情報ってのがよく分からない…
0811デフォルトの名無しさん2013/02/26(火) 01:36:12.39
コンテキストの事じゃないかと想像。
俺的には日本語で言うなら、環境の方がしっくりくる。
違ってたらゴメン。
0812デフォルトの名無しさん2013/02/26(火) 02:20:34.07
文脈自由文法 CDG
0813デフォルトの名無しさん2013/02/26(火) 06:42:51.70
>>807
gauche で land of lisp、やろうと思ってあのに先にやられてしまったw
0814デフォルトの名無しさん2013/02/26(火) 07:15:58.15
>>803
他の人も書いてるけど文脈情報って何?S式に書けること?
0815はちみつ餃子 ◆8X2XSCHEME 2013/02/26(火) 07:58:23.92
>>810-811 >>814
文脈情報は 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
>>816
>>811だけど、contextとenvironmentの明確な違いとか意識した事なかったわ。
なんとなく、グローバルな束縛とか式の評価に必要な情報をまとめて「環境」って理解してただけ。
自分で実装してみたりすると、やっぱり違うものなんだろうか?
0818デフォルトの名無しさん2013/02/26(火) 19:40:03.12
個人的には以下で捉えてるんだが, 間違ってるんだろうか?
context: レキシカルに参照できるもののスナップショット
environment: 実行時に参照できるもののスナップショット
0819デフォルトの名無しさん2013/02/26(火) 21:22:05.60
R5RSではcontextは式が配置されたコード上の場所という意味でしかない。
0820はちみつ餃子 ◆8X2XSCHEME 2013/02/26(火) 22:16:07.37
>>818
そんな感じでいいと思うけど、
環境を作るには字句上の対応付け (文脈) が解決されているのは大前提なので、
環境の情報には文脈も含まれていると思う。
マクロ (健全なマクロ) がない言語だったら、少なくとも言語のユーザーが
文脈の概念だけ切り取って考えることなんてなさそうだよなぁ。
0821デフォルトの名無しさん2013/02/26(火) 22:47:26.92
マクロ展開は実行に含まれますか?
0822デフォルトの名無しさん2013/02/26(火) 23:10:36.26
まず、実行という言葉をきちんと定義して説明してくれ
0823デフォルトの名無しさん2013/02/26(火) 23:48:50.16
contextを拡大解釈しすぎw
0824デフォルトの名無しさん2013/02/26(火) 23:48:56.02
実行とは評価なり
0825はちみつ餃子 ◆8X2XSCHEME 2013/02/27(水) 07:52:33.73
マクロ展開は実行に含まれないと思うけど、
トランスレータが走るのは実行だと思う。
0826デフォルトの名無しさん2013/02/27(水) 12:28:20.13
もうやめてあなたのライフは0よ〜
0827デフォルトの名無しさん2013/02/27(水) 22:11:05.39
Cなんかだとマクロ展開フェーズでプログラムの構文構造が確定して
それを実行するという2フェーズだけど、
schemeやLispの場合は、マクロ展開と式評価が行き来しながら進む過程
が実行なんだと理解している。

なので静的な「文脈」と動的な実行「環境」の区別は曖昧かも。
0828はちみつ餃子 ◆8X2XSCHEME 2013/02/27(水) 22:41:25.94
CL の defmacro では &environment で「(CL用語で言うところの) 環境」
を受け取れることになってるから、確かに区別は微妙なのかもしれないなぁ。
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
OpenCL とか NaCl とか、
最後に CL って付く単語が目に入ると Common Lisp かと思って「おっ?」ってなる。
0832デフォルトの名無しさん2013/02/28(木) 19:48:47.75
>>831
わかる。
0833デフォルトの名無しさん2013/02/28(木) 22:34:21.06
そらそうだけど、CLという文字列にたいする一般的な認知のされかたが変わるのは困るね。
逆ステマみたいなもんで。
0834デフォルトの名無しさん2013/02/28(木) 22:52:56.39
http://d.hatena.ne.jp/perlcodesample/20130227/1361928810
楽しそうだからSchemeも混ぜて欲しい
0835デフォルトの名無しさん2013/03/01(金) 09:06:17.96
Lispこそ日本的文化に最適な言語
1万行のC言語等のコードをいかにも「がんばって」書いた様に
自動生成できるし、バグ(ミス)もない
0836デフォルトの名無しさん2013/03/01(金) 11:50:30.29
CLよりもまぎらわしいのがクロージャ
関数閉包なのかClojureなのかClozure CLなのかGoogle Closure Libraryなのか・・・
0837デフォルトの名無しさん2013/03/01(金) 15:59:56.78
キーボード買おうと思うんだけどLispやるなら英語配列っ
0838デフォルトの名無しさん2013/03/01(金) 16:04:24.00
英語配列を基本にしつつ、
キーバインディングで括弧やセミコロンを入力しやすいように俺配列を定義している。
0839デフォルトの名無しさん2013/03/01(金) 16:07:30.01
セミコロンを?
0840デフォルトの名無しさん2013/03/01(金) 17:14:37.55
無変換、変換をctrlにしたらlispマシンの配列に近くなるから日本語の配列の方がいい
0841デフォルトの名無しさん2013/03/01(金) 17:30:11.00
()の打ち易さじゃないのか。
0842デフォルトの名無しさん2013/03/01(金) 17:38:08.26
>>839
本来のセミコロンの位置はShiftにしてる。
スラッシュの位置をMode_Switchに割り当てて、mod+Sでカッコ、mod+Dでコッカとかにしてる。
Lisp書くときホームポジションに括弧ないのはキツい・・・
0843デフォルトの名無しさん2013/03/01(金) 17:41:35.41
Lispマシンも一応括弧は入力しやすくなってるんだなー
ttp://www.pfu.co.jp/hhkeyboard/kb_collection/images/symbolics.gif
0844デフォルトの名無しさん2013/03/01(金) 18:54:02.85
話題沸騰『Land of Lisp』の特製ステッカーを全プレ!
http://www.oreilly.co.jp/sales/2013/02/web-direct-campaign-land-of-lisp-sticker.html
0845デフォルトの名無しさん2013/03/01(金) 22:16:29.16
オライリーは毎回後ろの方のページに表紙の動物や昆虫の解説が載ってるけど、さすがに今回の動物の解説はなかったな…
0846デフォルトの名無しさん2013/03/01(金) 22:57:43.26
情けないなオライリー
0847デフォルトの名無しさん2013/03/02(土) 05:31:38.38
次の渋谷Lispで
>>835
みたいなこと言ってひんしゅく買ってみたいな
0848デフォルトの名無しさん2013/03/02(土) 06:45:03.69
>>845
マンガが載ってるからOK
0849デフォルトの名無しさん2013/03/02(土) 09:13:08.94
CPS って何の意味があるの
0850はちみつ餃子 ◆8X2XSCHEME 2013/03/02(土) 09:27:42.17
>>849
普通の言語ユーザにとってはそれほど役に立たないかもね。

CPS 変換された世界では手続き呼出しは戻ってこないわけだけど、
それは第一級継続と同じ。 というわけで第一級継続の実装が簡単になる。

っていうか、 Scheme の形式的意味論では CPS で書かれてるらしい。
そのへんの意味論は読んでもあまり意味わからんけど。

それと前にも書いたことある気がするけど、
Chicken scheme だと CPS 変換処理直後のコードをファイルに吐き出させることが
出来るので眺めてみると面白い。
0851デフォルトの名無しさん2013/03/02(土) 13:53:52.17
>>849
コントールフローを直接扱いたい時。
高階関数含んだコードをコンパイラが最適化する時など。
0852デフォルトの名無しさん2013/03/02(土) 14:51:12.34
common lispの入門に実践common lispかrand of lispどっちを買おうか迷ってるんだけど
実践common lispの方が入門向きなのかな
両方買うのは金銭的にあれだし英語は読めない
0853デフォルトの名無しさん2013/03/02(土) 16:13:36.58
英語が読めないことは良く分かったw

で、とっつき易いのはland of lispじゃないかな。形式的にガリゴリ学びたい向きにはもう片方。
0854デフォルトの名無しさん2013/03/02(土) 16:51:19.54
ステッカー欲しいしland of lisp買うことにした
ありがとう
0855デフォルトの名無しさん2013/03/02(土) 20:30:32.59
Land Of Lispは読み物としても面白かったよ
0856デフォルトの名無しさん2013/03/02(土) 23:08:37.05
>>852
land of lispはloopの説明が面白い
実践common lispはformatの説明がある程度丁寧
応用部分はどちらも特徴的で、land of lispはゲームの改良を、
実践common lispはツールの改良をしていく
pratical common lispはネットで無料で見れるんじゃなかったかな
0857デフォルトの名無しさん2013/03/02(土) 23:12:41.93
Loopマクロ周期表はワラタよw
0858デフォルトの名無しさん2013/03/02(土) 23:13:55.43
>>856
詳しい解説ありがとう
さっきland of lispを注文して楽しみ
英語のpractical common lispをこの前読もうとしたけど断念した
0859デフォルトの名無しさん2013/03/02(土) 23:46:21.69
新宿紀伊国屋で勝ったら、ステッカー付いてた。
宇宙人じゃなくて、床下にストラウストラップ〜のイラストの方。
宇宙人あるんだったらよく見て選べばよかった。
0860デフォルトの名無しさん2013/03/03(日) 00:00:33.94
自分も紀伊国屋で買ったらステッカー付いてたばかりかオライリーのメモ帳もくれた
0861デフォルトの名無しさん2013/03/03(日) 00:03:22.29
>>849
・自動プログラミング
・論文を書くときに(理論で表現するときの)書式を統一できる
0862デフォルトの名無しさん2013/03/03(日) 00:07:01.43
>メモ帳
俺貰えなかったけど。どういうことなんだぜ。(当惑
0863デフォルトの名無しさん2013/03/03(日) 02:23:29.15
land of lisp注文したときに備考にステッカー希望と書くの忘れてた・・・
0864デフォルトの名無しさん2013/03/03(日) 02:43:31.33
冷静になって考えろ
いらんだろそんなもの
0865デフォルトの名無しさん2013/03/03(日) 09:49:31.72
床下にストラウストラップ、って元ネタどこなの?
0866デフォルトの名無しさん2013/03/03(日) 13:19:03.92
シンボリックスのキーボードって何だか凄いな。
0867デフォルトの名無しさん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.43
つまらんジョークだな。
0871デフォルトの名無しさん2013/03/03(日) 18:25:03.50
ジョークというより喜劇の一幕だな。
0872デフォルトの名無しさん2013/03/03(日) 18:34:36.18
ここだけ取り上げてアレコレ言ってもな。
0873デフォルトの名無しさん2013/03/03(日) 19:49:21.73
>>870
挿絵からセリフだけ抜きだしたから面白くはないね
「暗くてお靴がわからないわ」「どうだい明るくなったろう」みたいなもの

にしても文法に手を入れられるLispのユーザにとっては
他言語のユーザはあの家の住人のように見えてるんだろうか
0874デフォルトの名無しさん2013/03/03(日) 20:02:43.43
両方やりますが…
0875はちみつ餃子 ◆8X2XSCHEME 2013/03/03(日) 20:04:11.22
正誤表を見るのが面倒だから3刷あたりまで待ってから買うわ。
とか言ってたら絶版になるのが専門書なんだけど、そうなったら中古でもいいしな。

俺は C++ 好きだし。
0876デフォルトの名無しさん2013/03/04(月) 00:53:41.15
考えてみりゃ非プログラマにとってはLispだけじゃなくて
ほとんどのプログラミング言語は宇宙語みたいなもんだよな。
0877デフォルトの名無しさん2013/03/04(月) 03:11:25.91
schemeちょっとかじってcommonlispも興味があるんだけど、funcall気持ち悪い
関数呼ぶのに一手間かかるってに抵抗ある
でも、実用的なソフトの開発には後者が向いてるとか
schemeとcommonlispどっち勉強したらいい?
0878デフォルトの名無しさん2013/03/04(月) 10:13:15.21
Lisp-1とLisp-2についてならどっちもどっち。

実用的なソフトを作ることに興味があるなら、参考書(実践CommonLisp)のある
CLにしておけば?
0879デフォルトの名無しさん2013/03/04(月) 11:54:51.15
Javaも呼べて便利らしいKAWAを使うという選択肢
0880デフォルトの名無しさん2013/03/04(月) 12:11:21.15
Clojure「…」
0881はちみつ餃子 ◆8X2XSCHEME 2013/03/04(月) 16:16:59.52
Clojure は Java の資産を利用することを前提とした設計だから、
そりゃ Java を呼びやすいけど、
そのかわりに言語としての筋の良さをいくらか犠牲にしてるから、
そこらはトレードオフの問題だな。

ちなみに Java との連携なら Schluessel もあるでよ。
0882デフォルトの名無しさん2013/03/04(月) 18:39:05.70
Movitz周辺て最近どうなの?
0883電波いっぱい2013/03/04(月) 23:02:53.68
lisp系で実用的なソフトの開発って言ったら、今ならclojureだと思うけどな。
0884はちみつ餃子 ◆8X2XSCHEME 2013/03/04(月) 23:14:21.64
ライブラリの蓄積が多いと有利だよねぇ。
結局、現実の問題ってのほとんどの場合に誰かが解決した問題なわけで、
解決した結果がライブラリになっていくわけで。
少々の筋の悪さなどなんのそのって感じはわかる。
0885デフォルトの名無しさん2013/03/04(月) 23:52:38.56
>>882
ちょっとググったが何にも出てこない。残念ながら。
movitzみたいなハードよりの話は憧れるんだがなぁ。
0886デフォルトの名無しさん2013/03/05(火) 01:27:43.33
>880 は、
lisp-1がいいならclojureもあるよということじゃないかな?
0887デフォルトの名無しさん2013/03/05(火) 01:31:06.67
Movitz、Schemixの開発者はきっと昆虫族に幽閉されてるに違いない。
0888デフォルトの名無しさん2013/03/05(火) 01:34:10.60
>>887
助けに行きたいが我が師団はストラウストラップの軍団の前にすでに瀕死だ
0889デフォルトの名無しさん2013/03/05(火) 03:18:51.89
Clojureってlisp-1だったのか
でも、マクロ書くにはcommonlispがいいんでしょ?
0890デフォルトの名無しさん2013/03/05(火) 07:01:04.99
いつかmovitzやりたいんだよなぁ。lisp星人、力を貸してくれーー
0891デフォルトの名無しさん2013/03/05(火) 08:20:53.05
Stop! 他力本願
0892はちみつ餃子 ◆8X2XSCHEME 2013/03/05(火) 08:45:55.47
本願寺は浄土真宗の寺なのかー
0893デフォルトの名無しさん2013/03/05(火) 08:58:55.09
マジどうでもいい
0894デフォルトの名無しさん2013/03/05(火) 10:02:23.67
>>889
Clojureもマクロあるよ
他にもいろいろと面白い今時の機能が満載
0895デフォルトの名無しさん2013/03/05(火) 10:16:30.86
Clojure はlisp1なのにパッケージもあるんだっけ?イマイチ、パッケージ、モジュールとlisp1,2の違いがよく分からん。名前空間一個だけ、がlisp-1?
0896デフォルトの名無しさん2013/03/05(火) 10:28:08.38
Lisp-1/2は関数と変数の名前空間を分けるかどうか、という話。
モジュールやパッケージによる名前空間の分離は別。
0897デフォルトの名無しさん2013/03/05(火) 10:34:47.17
>>896
ありがとう、そういうことなのね。個人的にはlisp2がいいな。
0898デフォルトの名無しさん2013/03/05(火) 11:18:01.87
原論文でも、他にもいくつも名前空間はあるから、1とか2という名前は
厳密には名前空間の数とはいえない、とかそんなことが書いてある。
0899デフォルトの名無しさん2013/03/05(火) 11:26:40.53
"Technical Issues of Separation in Function Cells and Value Cells"ってタイトルだけど、
fletとかあるからcellの話だけでは収まらないしなあ。
0900デフォルトの名無しさん2013/03/05(火) 13:25:45.42
>>897
funcallなしで記述できるのでclojureの方が好きになってしまった。
名前の衝突もパッケージで回避できるし。
0901デフォルトの名無しさん2013/03/05(火) 21:03:06.57
みんなSchemeをどういう用途に使ってるの?
0902デフォルトの名無しさん2013/03/05(火) 22:18:59.42
スケルトンからjavaのコードを出力してる
0903デフォルトの名無しさん2013/03/06(水) 02:32:18.62
sicpって面白い?
読みたいけど高い
0904デフォルトの名無しさん2013/03/06(水) 02:34:07.12
おもしろいよ
0905デフォルトの名無しさん2013/03/06(水) 02:41:22.35
日曜のパチンコですったと思って3冊買えばいいと思う
0906デフォルトの名無しさん2013/03/06(水) 02:53:36.58
買いに行こうかな
本格的にlisp勉強したくなってきた
Closureも触ってみるか
0907デフォルトの名無しさん2013/03/06(水) 03:20:29.85
SICPの原書は名教科書なんだけど、訳書は解読困難な迷訳なんだよね。
MITのサイトで原文無料公開してるから、そっちを読むのがいいと思う。

あと、SICPはプログラミング全般の基礎を解説してる本で、Lisp/Schemeについての解説はほとんどない。
Lispについて学ぶには別の本が要ると思う。
0908デフォルトの名無しさん2013/03/06(水) 03:47:02.47
そうはいっても英語はよくわからないからなあアメリカンジョークとかとばされたらおしまいだ
0909デフォルトの名無しさん2013/03/06(水) 03:50:27.62
>>907
何が学べる?
関数型言語を使った抽象化の訓練とか?
0910デフォルトの名無しさん2013/03/06(水) 05:12:16.36
式や変数とかの基本概念から始まって、並行処理や遅延評価、論理型プログラミングなんかの基本とか、処理系制作の基本とか。
プログラミングのいろんな側面に触れさせてくれる、ってのがメインだったと思った。
0911デフォルトの名無しさん2013/03/06(水) 06:00:23.14
>>907
というか、scheme処理系の作成方法が載ってなかったっけ?
0912デフォルトの名無しさん2013/03/06(水) 07:50:17.96
訳書はいい加減絶版にするべき
0913デフォルトの名無しさん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.76
ということにしたくて必死、ということはわかった
0917デフォルトの名無しさん2013/03/06(水) 11:03:27.88
自分も見たけど訳はダメですね
0918デフォルトの名無しさん2013/03/06(水) 11:13:53.58
SICPの原文はCreative Commons BY-NCなので自ら訳すという手もある。
一章も完成してないがこういうのもある。
http://www21.atwiki.jp/sicpaho/pages/1.html

個人的には全訳しないでも要約があればいいと思うんだが。
0919はちみつ餃子 ◆8X2XSCHEME 2013/03/06(水) 13:33:21.04
英語わからんし。
0920デフォルトの名無しさん2013/03/06(水) 15:39:48.87
読めると主張する人は内容がすでに分かっている人
ということになると思う
0921デフォルトの名無しさん2013/03/06(水) 15:42:47.55
なんだそりゃ
0922デフォルトの名無しさん2013/03/06(水) 18:48:43.46
普通に読めるとか言っている奴は頭がおかしい
内容が間違っているってのに
0923デフォルトの名無しさん2013/03/06(水) 19:06:54.99
>>922
読める≒理解だからなあ。
本格的にやる気があるなら、英語ぐらい読めるようになっておいたほうが良いとは思うが。
0924デフォルトの名無しさん2013/03/06(水) 20:29:32.91
SICPの翻訳の話はもうおなかいっぱいだろ
0925デフォルトの名無しさん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.46
「The Schematics of computation」は平易な英語でいい感じ

Guy.Steeleの昔の論文も平易な英語を使ってるね
内容は高度だけど
0927デフォルトの名無しさん2013/03/07(木) 07:56:01.86
ハイハイ。 英語読めて偉いでちゅねー。

なんでそんなに原文を勧めるのかわかんね。
多少まずい訳でも母語の方がわかりやすいのは当然だろ。
0928デフォルトの名無しさん2013/03/07(木) 08:12:04.37
本気で言ってんの?
0929デフォルトの名無しさん2013/03/07(木) 08:17:14.99
わかりやすいかどうかは個人差がある
当然と断ずるあたり釣り
0930デフォルトの名無しさん2013/03/07(木) 08:29:48.56
TaPL って何て読むの?
0931はちみつ餃子 ◆8X2XSCHEME 2013/03/07(木) 08:48:24.98
タぷぅ
0932デフォルトの名無しさん2013/03/07(木) 10:26:09.20
>>927
>多少まずい訳でも母語の方がわかりやすいのは当然だろ。
日本語は漢字・平仮名・片仮名あるからまだいいが、ハングルだと600万もの組み合わせがあるのに同音異義語・同文字異義語が
多すぎるので(防水と放水が同じとか)、技術書読むときは英語表記の本も必須だそうな。
0933デフォルトの名無しさん2013/03/07(木) 22:13:22.04
lispみたいなマイナー言語を使うのに、英語は読めなくていいって態度はそぐわないと思う
だったらJavaかRubyでも使ってろよ
0934はちみつ餃子 ◆8X2XSCHEME 2013/03/07(木) 23:39:44.49
>>932
ひらがなだけで書いてあるようなもんか。
それならさすがの俺も英語の方がマシと思うわ。
0935デフォルトの名無しさん2013/03/07(木) 23:42:05.93
まあ訳がひどくなるのは英語がひどいからだけどね
0936デフォルトの名無しさん2013/03/08(金) 02:13:38.08
訳はひどくないと思うのは俺だけだろうか…
0937デフォルトの名無しさん2013/03/08(金) 03:48:40.29
>>933
”読めなくていい”範囲で出来る事は限られてるが、趣味レベルなんだろうから人に押し付けさえしなければいい。
0938デフォルトの名無しさん2013/03/08(金) 03:50:36.06
英語はひどくないけど、訳はひどい
0939デフォルトの名無しさん2013/03/08(金) 07:00:51.33
「人工無能に訳させました」って言われれば納得するレベル。
0940デフォルトの名無しさん2013/03/08(金) 07:01:57.27
お前は人工無能を何だと思ってるんだ
0941デフォルトの名無しさん2013/03/08(金) 08:34:53.51
>>936
俺もひどくないと思うよ
0942デフォルトの名無しさん2013/03/08(金) 10:19:50.54
おかしな奴が必死で「訳がひどい」ことにしようとしている。
0943デフォルトの名無しさん2013/03/08(金) 11:21:20.65
前書きは確かに酷い。
読む気が失せる超絶悪訳。
しかし本編はそこまで酷くない。
ちょっと悪ふざけがすべってる程度。
0944デフォルトの名無しさん2013/03/08(金) 11:28:41.24
前書きは原書も読みづらいよ。そこだけ妙に教授レベルで過剰に文学的な英語。
0945デフォルトの名無しさん2013/03/08(金) 11:34:33.52
Lispを思い起こさせる比喩に満ち満ちてるから、
英語分かる人はprefaceは英語で読みましょう。
0946デフォルトの名無しさん2013/03/08(金) 14:07:25.98
SICPの訳の話になると和田さんが必死になるからやめてあげて
0947デフォルトの名無しさん2013/03/08(金) 14:16:18.44
おまえが必死に騒いでるだけだろが
0948デフォルトの名無しさん2013/03/08(金) 14:27:41.01
前書き以外で具体的にどこがおかしいって話聞いたことない
0949デフォルトの名無しさん2013/03/08(金) 14:41:25.16
指摘出来ないんだよ。
0950デフォルトの名無しさん2013/03/08(金) 15:09:29.05
おかしいだけでなく間違っているらしいよ
0951デフォルトの名無しさん2013/03/08(金) 15:22:42.72
訳がひどいかどうかは知らんが、和田訳が好きなのは俺だけか…
0952デフォルトの名無しさん2013/03/09(土) 04:59:24.55
堅いけどちゃんと一意に解釈できるし嫌いじゃない
大学の教科書みたいな文
ってか俺の大学の教科書だった
0953デフォルトの名無しさん2013/03/09(土) 05:17:30.81
和田さん人気あるのね
0954デフォルトの名無しさん2013/03/09(土) 12:22:26.00
>>952
京大乙
0955デフォルトの名無しさん2013/03/09(土) 14:15:10.93
どんな訳か見てみたいけど日本語版はサンプルPDFとか流れてないのかい?
本屋行かないとダメか
0956デフォルトの名無しさん2013/03/09(土) 16:46:25.08
訳の話はもういいよ
0957デフォルトの名無しさん2013/03/09(土) 17:33:17.96
かわいそかわいそなのでもう止めるか
0958デフォルトの名無しさん2013/03/10(日) 21:43:21.20
引数の型をstringで返してくれる関数ってあります?
(type->string `foo) ; => "symbol"
みたいな。
0959デフォルトの名無しさん2013/03/10(日) 21:48:57.09
prin1-to-string
0960デフォルトの名無しさん2013/03/10(日) 22:13:28.48
(format #f "~a" x)
0961はちみつ餃子 ◆8X2XSCHEME 2013/03/10(日) 23:41:11.44
>>958
Scheme の話だったらそういう関数は無い。
なんだか意味論上のややっこしい理由があるみたいなことをどこかで見たことはあるんだけど、
どこで読んだのだったか忘れた。
0962デフォルトの名無しさん2013/03/10(日) 23:49:57.48
実装みるとデータに型ごとにタグつけてるからやろうと思えばできそうな気が…
0963はちみつ餃子 ◆8X2XSCHEME 2013/03/11(月) 00:08:50.11
Gauche なら describe 関数で見れるね。
この関数は標準出力に表示するようになってるからちょっとラップすれば文字列で返す関数を定義できなくはない。
0964デフォルトの名無しさん2013/03/11(月) 00:57:48.04
>>963
環境はGaucheだったので describe で期待の情報が得られました。ありがとうございます。
scheme汎用としては難しいんでしょうかね? symbol? とか string? があるので
存在しててもおかしくないと思っていました。
0965デフォルトの名無しさん2013/03/11(月) 01:02:54.73
typed racketも型情報をユーザーにいじらせてくれればいいのに
0966デフォルトの名無しさん2013/03/11(月) 01:54:50.68
コンパイラ志向の環境でunboxingした時に型情報取るのが難しい、というかコストかかる。
まあC++でさえ、typeid使うと隠れフィールド増えるけど型情報取れるから、なんとかしたいところ。
0967デフォルトの名無しさん2013/03/11(月) 04:18:08.00
>>964
それらを使ってひとつずつ検査すれば自分で書けるよ。
コストとか難しい理由とか気にしなければ。
(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
>>967
ごめん。"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
>>968
またまたごめん。6行め "pair?" は "pair" が正しい。
0970デフォルトの名無しさん2013/03/11(月) 07:06:17.79
>>967
cond使いなYo!
Schemeでは「型」というのは「どの型判定述語に#tと答えるかによって決まるもの」なので
type-of みたいな関数で取り出せる「何か」がある必要はない。
Gaucheではclass-ofでオブジェクトのクラスが取れるけどね。
0971デフォルトの名無しさん2013/03/11(月) 15:10:36.17
こんどにする
0972デフォルトの名無しさん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
Clozure CL 1.9 リリースされていたね。
オメ
0974デフォルトの名無しさん2013/03/11(月) 18:33:51.57
type->stringって引数に型(type)がくる関数に見える
0975デフォルトの名無しさん2013/03/11(月) 18:47:29.17
今度はcond、こんどぶし じゃないよん
0976はちみつ餃子 ◆8X2XSCHEME 2013/03/11(月) 21:39:56.18
>>972
数値の型は階層化されているので、そこらへんの扱いをどうするかも考えないとな。
例えば数値の 1 は integer? で真になるけど、rational? でも real? でも真だ。
最も特殊な型を返すのが筋だろうから 1 は integer でいいのかな。

それと正確性や変更可能性は階層と独立した属性なので型の一部と見做すべきかどうか。
(例えば正確な有理数と非正確な有理数は違う型だろうか? )
0977デフォルトの名無しさん2013/03/11(月) 22:06:52.62
>>976
前半は集合論的な包含関係を考慮して内側の集合から調べる順番にすればok
後半は質問者がどこまで要求しているかにもよるが条件分岐を深くしてたとえば
((integer? arg) (if (exact? arg) "exact-integer" "inexact-integer"))
などとすればok
0978デフォルトの名無しさん2013/03/11(月) 22:42:33.33
集合論的→集合的
0979デフォルトの名無しさん2013/03/12(火) 02:41:00.66
Lispって今となってはCOBOLより世の中の役に立ってないよね
なのに糞Lisperの態度のでかさはなんなんだろうね
0980デフォルトの名無しさん2013/03/12(火) 06:11:56.07
(define a (cons 1 '()))
(define b a)
(set-car! b 10)
ってやってaが(10)になるかどうかって規定されてるんですか?それとも処理系依存?
もしconsセルを値として持ってたらaは変化しないと思うんですけど
0981デフォルトの名無しさん2013/03/12(火) 06:37:55.39
>>980
処理系には依存せず、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.06
オブジェクト参照しかない言語はいくらでもあると思うが。
0983デフォルトの名無しさん2013/03/12(火) 08:07:31.94
というよりリストを値として変数に入れる言語なんてあったっけ
0984デフォルトの名無しさん2013/03/12(火) 08:08:31.74
(set-car! b 10) は
b->car = 10; ってことかいな。
0985デフォルトの名無しさん2013/03/12(火) 09:34:19.83
Lisp処理系作ろうと思った時、cons型が二つのポインタを持つのかconsへの参照を持つのかで悩んだ
二つのポインタを持つだけだったら>>980の言うところの「値として持っていたら変化しない」になりそう
こんな扱いしてる処理系少しはありそう
0986デフォルトの名無しさん2013/03/12(火) 12:32:36.66
>>985
ない
0987デフォルトの名無しさん2013/03/12(火) 14:04:20.12
consセルを値として持つっていうのが意味わからんよw
0988デフォルトの名無しさん2013/03/12(火) 14:45:41.31
関数呼ぶときセルをコピーして渡す仕様だったら set-cdr! は実装できない
0989デフォルトの名無しさん2013/03/12(火) 14:46:59.07
set-car! だった
同じだけど
0990デフォルトの名無しさん2013/03/12(火) 15:05:16.52
それ特殊形式じゃん
0991デフォルトの名無しさん2013/03/12(火) 17:27:35.80
>>990
釣りなのか、マジなのか
0992デフォルトの名無しさん2013/03/12(火) 19:25:09.67
>>985
struct 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.48
http://www.youtube.com/watch?v=HM1Zb3xmvMc
0995デフォルトの名無しさん2013/03/13(水) 18:39:39.96
SAN値が下がる
0996デフォルトの名無しさん2013/03/13(水) 18:50:55.43
>>994
一回Amazonの締め切り落として(なの?)予約注文キャンセルされてさらに三年とかいうことかいね?
0997デフォルトの名無しさん2013/03/13(水) 19:48:14.76
次スレ立てるよ
0998デフォルトの名無しさん2013/03/13(水) 19:51:11.70
Lisp Scheme Part36
ttp://toro.2ch.net/test/read.cgi/tech/1363171842/
0999デフォルトの名無しさん2013/03/13(水) 21:13:17.17
bashに負けとる
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
1000はちみつ餃子 ◆8X2XSCHEME 2013/03/13(水) 22:02:40.86
>>1000 なら長門は俺の嫁
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。