2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Lisp Scheme Part35

1 :デフォルトの名無しさん: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/

2 :デフォルトの名無しさん:2012/09/19(水) 10:45:52.34
SICP taught in Python 3
http://www-inst.eecs.berkeley.edu/~cs61a/sp12/book/index.html

3 :デフォルトの名無しさん:2012/09/19(水) 12:23:00.73
前スレであった学会の話だけど
参加費高いのがネックだけど
知り合いか友達がつくれれば結構よい機会になると思うよ
例えば Emacs 好きな人だったら
チュートリアルやる Didier Verna さんは XEmacs 開発者だし日本滞在経験があるって
英語が片言でもいざとなったら lisp で話せば通じる
なので月曜日の excursion や火曜日の banquet への参加をおすすめする

4 :デフォルトの名無しさん:2012/09/19(水) 16:02:10.29
予稿集だけほしい

5 :デフォルトの名無しさん:2012/09/19(水) 17:31:43.08
目次がS式。

6 :デフォルトの名無しさん:2012/09/19(水) 21:07:27.32
コンティニュエーションって
Ctrl-Z食ってお休みしてるプロセスみたいなもの?

7 :デフォルトの名無しさん:2012/09/19(水) 21:43:58.02
そういうこともできるが
要は次に行なうべき計算
何の「次」なのかの説明が必要になるが・・・

8 :デフォルトの名無しさん:2012/09/19(水) 22:40:39.57
ウィキペディアが、なんかgdgdに加筆されてるな

9 :デフォルトの名無しさん:2012/09/19(水) 23:03:25.60
何がどういう順番で実行されるかというのは
Schemeに慣れていないと直観的に分かりにくい

10 :デフォルトの名無しさん:2012/09/19(水) 23:24:51.83
引数の渡し方とかね

11 :デフォルトの名無しさん:2012/09/19(水) 23:43:06.33
前スレの2進数と10進数の例え、LispはS式で表現するから16進数だろ。少々慣れればこれほど効率の良いものは無い。

12 :デフォルトの名無しさん:2012/09/19(水) 23:50:18.15
(a (b (c) (d)) (e))
とかでbcdeに副作用があると副作用がどの順番に起こるか保証されない
が、大抵は左から右、右から左のどっちか
どっちか決めろよ

13 :デフォルトの名無しさん:2012/09/19(水) 23:53:23.15
じゃあ左で

14 :デフォルトの名無しさん:2012/09/19(水) 23:54:17.60
cdbeやebdcになった程度で混乱するとでも思って?
馬鹿にしないで欲しいわ

15 :デフォルトの名無しさん:2012/09/19(水) 23:56:05.56
ebdcはないわー
edcbだった
混乱するじゃないか!

16 :デフォルトの名無しさん:2012/09/19(水) 23:57:03.86
左から右だと可変引数が取れないんだよな

17 :デフォルトの名無しさん:2012/09/20(木) 00:04:33.75
>>15
最適化でdcbeやdcebになるかもしれんぞ
まあ仕様が決まってるならバグだが

18 :デフォルトの名無しさん:2012/09/20(木) 00:48:29.21
継続を使ってむりやり順序を変える方法を模索するのが真のschemer


19 :デフォルトの名無しさん:2012/09/20(木) 01:31:58.49
(format "~S ~S" (read) (read)) がどうなるかは処理系依存なの?

20 :デフォルトの名無しさん:2012/09/20(木) 02:52:29.72
ご存知、ないのですか!?

21 :はちみつ餃子 ◆8X2XSCHEME :2012/09/20(木) 07:33:44.00
>>19
その通り。
一旦 let* 等で変数に束縛するか、
よく使うものならそう展開されるようなマクロでくるむべし。

22 :デフォルトの名無しさん:2012/09/20(木) 11:47:03.44
スタックに積む順と評価順が一致してなければならない、という法はない。

23 :はちみつ餃子 ◆8X2XSCHEME :2012/09/21(金) 10:07:51.32
そういえば C も引数の評価順は決まってなかったんじゃね?
C は最適化の可能性という錦の御旗があるけど、Scheme の場合は理論上の背景がありそう。
単に万人が納得する順序を決められないってことかもしれんけど。

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

引数の評価順を決めてしまうと、その順序に意味があるのか無いのか見た目でわからなくなる。

24 :デフォルトの名無しさん:2012/09/21(金) 19:18:17.40
http://www.youtube.com/watch?v=sWAfHjx0igU

25 :デフォルトの名無しさん:2012/09/21(金) 20:48:29.39
r6rs では Rationale の 9.1. に評価順を決めない理由が書いてあるね。
1. たぶん読みやすい
2. もしかしたらコンパイラが良いコードを吐いてくれるかも
だそうだ。

26 :デフォルトの名無しさん:2012/09/21(金) 23:36:01.69
カリー化があるから、引数の並び順で評価順が決まるのはナンセンス

27 :デフォルトの名無しさん:2012/09/21(金) 23:37:43.97
いくらなんでも違う、真逆だ。

28 :デフォルトの名無しさん:2012/09/22(土) 01:44:15.26
もんだい1まぎゃくとまさかのちがいをSしきでかんけつにのべよ

29 :デフォルトの名無しさん:2012/09/22(土) 08:15:25.74
一般的に λ x y z.M は λ x. λ y. λ z.M の略であるからだ。

ざっと調べたが、>>25 以外に評価順序を定めなかった元々の理由としては
継続渡しによるプログラミングを前提にしていたからだそうだ。
ちゃんと一次資料調べろよ。

30 :デフォルトの名無しさん:2012/09/22(土) 21:21:56.48
資料名もあげてないのに納得とはすごいな。31pだ。

31 :デフォルトの名無しさん:2012/09/23(日) 10:17:06.14
Schemeにおけるエラー処理の作法みたいのが知りたいんですが
何か参考になるものはありますか?

32 :はちみつ餃子 ◆8X2XSCHEME :2012/09/23(日) 13:44:01.16
R6RS には例外処理の仕組が用意されてる。 Java や C++ とよく似てるけど、
例外オブジェクト (R6RS用語ではコンディションオブジェクト) が継承関係だけでなく合成があるのが特徴的。
こういった形で用意されている以上、典型的なエラー処理方式のひとつなんだと思う。
SRFI にも例外処理関連のがいくつかあるからそれらも併せて参考にすればいいんじゃないかな。

でも、 Scheme は規格の序章に書かれている通り、機能を追加することより言語の弱点を取り除くことに主眼がある。
つまり、今回の例で言えば例外処理の機能を提供することよりも例外処理をしたいとプログラマが思ったときにそれを邪魔しないという意味。
プログラマがどういう方法でエラー処理したいと思っても Scheme 的には間違ってない。
多値で返すのだって、継続渡しで分岐するのだってそれらを使い分けるのだって自分でやりやすければいいと思う。


33 :デフォルトの名無しさん:2012/09/23(日) 13:57:32.13
三行で頼む

34 :デフォルトの名無しさん:2012/09/23(日) 16:56:03.26
とりあえず
#f
を返しとけ。

35 :デフォルトの名無しさん:2012/09/23(日) 18:00:22.69
>>32
多値のないscheme処理系に多値は追加できないし
機能拡張つっても結局schemeの可能な範囲内でってことでしょ
5命令から構文糖作ったりできる程度

36 :デフォルトの名無しさん:2012/09/23(日) 18:20:48.71
弱点取り除くのもいいけどさ、必要なものを持ってない、ってのは普通にダメだと思う
例外とかモジュールとか必須だろ?REPLはまだ仕様にないんだっけ?
いまのRNRSは何か中途半端だよ

37 :はちみつ餃子 ◆8X2XSCHEME :2012/09/23(日) 18:22:14.99
>>35
R5RS で多値が追加されたのは言語としてそれがないとプログラマが追加できないのがわかってるからだよ。
だから、多値のない処理系を前提として出すのはナンセンス。


38 :デフォルトの名無しさん:2012/09/23(日) 18:38:28.52
作法を聞いているので回答するなら作法。
ただ、特に作法は聞いたことがないので一般的な作法を用いるしかない。
CodeCompleteの上が参考になると思う。
http://www.amazon.co.jp/dp/489100455X

39 :はちみつ餃子 ◆8X2XSCHEME :2012/09/23(日) 18:41:51.97
>>36
例外は call/cc と dynamic-wind があればその上に構築可能なので、
言語のコアとして必須とは言えないと思う。

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

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

中途半端なのは仕方ない。 Scheme は完成されてないんだ。
言語に完成なんて無いけど Scheme はまだ活発に発展してるんだから
必要だと思うことがあれば声を上げろよ。
R7RS はまだまだこれから。

40 :デフォルトの名無しさん:2012/09/23(日) 18:50:02.08
そういう意見もあるから動作が変わるような構文は使わない方がいい。
FortranやCobolも時代に合わせて機能追加されているけれども、
全然使われてないらしいし、対外的にアピールするためだけの機能と
実際使う機能を区別していくべき。

41 :デフォルトの名無しさん:2012/09/23(日) 19:09:19.94
scheme コミュニティは、決めることを恐れているように見える。例え80点の解でも決めないよりマシだと思うんだが。

42 :デフォルトの名無しさん:2012/09/23(日) 19:15:24.16
違う違う。単に人材が偏っているだけだ。
そういう「個人が決意を新たにすればなんとかなる」なんて信じられないだろ。

43 :はちみつ餃子 ◆8X2XSCHEME :2012/09/23(日) 23:08:36.93
>>41
プログラミング言語の機能はそれぞれの機能の連携で動くものだから、
80 点の機能同士を組み合わせたら64点だよ。
組み合わせるほどにぐだぐだになっていく。

CL はいい感じの妥協点を見出してはいるけど Scheme で同じようにやるのは芸がない。
っていうか CL に対する反発みたいな意識はあると思う。

44 :デフォルトの名無しさん:2012/09/24(月) 01:55:24.65
>>41
决めることを怖れているのではない
决めたのに誰も従わず、その決まりの権威がなくなり、いろんな決まりが好き勝手に大量発生することを怖れているのだ


45 :デフォルトの名無しさん:2012/09/24(月) 05:01:52.03
分かるけど、そのせいで、undefinedオブジェクトみたいなアホなモノが定義されるハメになってる。そして結局、独自エラー処理や独自オブジェクトで書かれた scheme プログラムが世に満ちる。
schemeのこだわりは分かってるつもりだし、実現したら格好いい。でも、決めるのがあまりに遅くないか?それも人手不足のしいかもしれないけど。

46 :デフォルトの名無しさん:2012/09/24(月) 07:20:48.45
例外とかヒアドキュメントぐらい定義しとけって感じ
規格オプショナルで
SRFIだと実装する気にならね

47 :はちみつ餃子 ◆8X2XSCHEME :2012/09/24(月) 07:28:00.55
現実路線なのが欲しいなら CL 使えってことじゃないの。


48 :はちみつ餃子 ◆8X2XSCHEME :2012/09/24(月) 08:07:37.48
>>46
例外は R6RS で定義してるだろ。
複数行に渡る文字列も使えるようになってるので
あらためてヒアドキュメントなんてものが必要とは思えないな。
テキストから読み込んで文字列リテラルに展開するマクロとかも書けるし。

49 :はちみつ餃子 ◆8X2XSCHEME :2012/09/24(月) 08:09:01.41
>>45
返す値が未定義っていうのは使うなって意味だぞ。
これはまだ決まってないというよりは議論した上で未定義だと決めたものだ。
将来的に覆る可能性は低いと思う。

50 :デフォルトの名無しさん:2012/09/24(月) 08:12:23.92
R○RSなんかに頼らないで
俺Lisp作ったほうがよさそうだな

51 :デフォルトの名無しさん:2012/09/24(月) 12:30:55.57
>>39
> REPL が削除されたのは
> (中略)
> R6RS の形式に対してそぐわないからだと思う。

もっとくやしく。

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



53 :デフォルトの名無しさん:2012/09/24(月) 15:55:12.74
schemeって並行プログラミングの類については
どういう議論がされてるの?

54 :デフォルトの名無しさん:2012/09/24(月) 20:53:30.44
Scheme使っている人はおしなべて新しい機能追加を求めているという前提が間違ってんだよ。
本当にScheme使っている人は途中で仕様変更するなんて望むわけ無い。
少なくとも俺はR5RSの機能が使えればそれでいい。

もろこの話だよ↓
http://msdn.microsoft.com/ja-jp/magazine/jj133828.aspx

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

っていうかよく見たら R5RS でも REPL については無くてもいいことになってるな。

56 :デフォルトの名無しさん:2012/09/25(火) 01:59:25.32
自作処理系がRxRS に沿ってるかどうかチェックするプログラムってあるのでしょうか
自作処理系があるけど、自身を持って公開できない


57 :デフォルトの名無しさん:2012/09/25(火) 04:24:38.53
letrecとletrec*て、どう違うんだっけ???

58 :デフォルトの名無しさん:2012/09/25(火) 05:38:42.74
>>57
束縛する変数の評価順序が保証されているのがstar付きletrec
でなかった?

59 :デフォルトの名無しさん:2012/09/25(火) 11:47:31.27
>>35 >>37
多値のない処理系に多値を追加することは簡単にできるよ。
valuesは1引数以外のときに値をパックして、call-with-valuesがパックされた値を展開する。
受け取る値と返す値が一致してないとパックされたオブジェクトが見えちゃうけれど、
R5RSではわざとそういう場合を処理系依存にして、後付けの実装を許すようにしている。
R5RSで多値が追加されたのは、処理系による最適化を許すためと、コールとリターンの対称性のため。


60 :デフォルトの名無しさん:2012/09/25(火) 12:29:29.92
>>59
追加できるっていってもそれは多値というより分配束縛だろ。
継続に複数の値を渡せるってこととセットで初めて概念的にも多値って言えると思う。


61 :デフォルトの名無しさん:2012/09/25(火) 12:41:54.70
Sussmanが、多値って別に特別なデータ型である必要なくね?
とかR7RSの投票の中で言ってた気がする。

62 :デフォルトの名無しさん: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)))))))
って感じで。

63 :デフォルトの名無しさん:2012/09/25(火) 19:45:21.55
>>48
マクロはそんなに万能じゃねーよ
バーヤ

64 :デフォルトの名無しさん:2012/09/25(火) 20:18:13.93
マクロっていうか、リーダマクロかな。
Schemerにはあまり馴染みのない機能だと思うけど。

65 :デフォルトの名無しさん:2012/09/25(火) 20:23:19.77
リーダーマクロと普通のマクロの違いって何?
evalに組み込まれてるマクロ機能か
readに組み込まれてるマクロ機能かの違いって事?

66 :はちみつ餃子 ◆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)))))

言葉が足りなかったかも。
テキストっていうかテキストファイルってことね。

67 :デフォルトの名無しさん:2012/09/25(火) 23:38:24.26
>>66
それいいな。
でも結局ファイルを読み込むならマクロ展開時でも実行フェイズでも効率に差なくね?


68 :デフォルトの名無しさん:2012/09/25(火) 23:57:49.08
2pass の処理書くときにいいの、か?

69 :デフォルトの名無しさん:2012/09/26(水) 06:41:35.86
バッチコンパイルする処理系ならマクロ展開はコンパイル時に済ませられるから実行時に
読み込みオーバヘッドは無いしファイルそのものさえ無くてもいい。
そのかわり実行時に切り替えることはできないんで、どっちを取るかだが。

70 :デフォルトの名無しさん:2012/09/26(水) 12:16:40.81
Scheme はオワコンなの?

71 :デフォルトの名無しさん:2012/09/26(水) 12:17:13.58
>>61
多値は型じゃなくね?

72 :デフォルトの名無しさん: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.

73 :王大人:2012/09/26(水) 15:03:40.52
>>70
死亡確認

74 :デフォルトの名無しさん:2012/09/26(水) 19:27:17.87
Racket のロゴマークはペプシコーラのパロディなの?
http://racket-lang.org/logo.png
http://www.pepsi.co.jp/images/logo.png

75 :デフォルトの名無しさん:2012/09/26(水) 19:36:20.52
ナウなヤングにバカウケだからな

76 :デフォルトの名無しさん:2012/09/26(水) 22:55:04.08
>>73
生存フラグ乙www

77 :デフォルトの名無しさん:2012/09/26(水) 23:36:18.04
>>70
大学生が実習で処理系を作れてしまうという枯れた仕様という意味で、オワコン

78 :デフォルトの名無しさん:2012/09/26(水) 23:45:29.11
Schemeの仕様が枯れてるとか意味わからんな。
現在進行形で仕様改訂真っ最中じゃん。

79 :デフォルトの名無しさん:2012/09/26(水) 23:52:29.10
>>70に反応ないから自分でレスつけたんだろ
予定を繰り上げて

80 :デフォルトの名無しさん:2012/09/26(水) 23:56:47.69
>>78
仕様が枯れている = 大学生でもバグ少なく処理系を実装できる

オワコンだからこそ普及した言語なのに、仕様を複雑にして衰退の道を歩もうとしているのがSchemer

81 :はちみつ餃子 ◆8X2XSCHEME :2012/09/27(木) 02:08:03.77
仕様を複雑にというのはちょっと違うと思う。
曖昧になってた部分を埋めたという感じだろ。
R6RS はライブラリを過剰にしてしまったところはあるけど、
基本的な部分はそれほど複雑さが増してるわけじゃない。
R7RS が samll と large を分けたのは R6RS の反省もあってのことだろうし、
そう極端に複雑になることはないよ。

82 :デフォルトの名無しさん:2012/09/27(木) 08:01:00.65
枯れてると大学生でも以下略ってことは、ANSI INCITS 226-1994 (R2004)もそうなのか。
大学生すげえなw

83 :デフォルトの名無しさん:2012/09/28(金) 01:56:53.03
大学生なら実習でscheme処理系作ってユニフィケーションの高速化やってprologの実装までやってくれないと


84 :デフォルトの名無しさん:2012/09/28(金) 03:44:51.01
>>83
それ何処の大学?

85 :デフォルトの名無しさん:2012/09/28(金) 04:00:18.03
valuesって型で実装するものだと思ってた

86 :デフォルトの名無しさん:2012/09/28(金) 05:23:39.86
どんな実装であれvaluesを扱うにはそれ用のフラグがどっかにある
つまり型であると見做せる
では何故これがファーストクラスではないのかと疑問に思う

87 :デフォルトの名無しさん:2012/09/28(金) 07:58:42.99
関数引数の個数が関数の型の一部であるのと同じ程度には型に関係してるけど。
>>86 フラグって? 多値の個数を判定する仕組みがどこかにあるのは確かだけれど、
その実装はいろいろあるよ。それとも>>86は「n引数の関数なんて無い。あれはn個の
要素をもつ1つのタプルを渡してるんだ」っていうタイプ?

88 :デフォルトの名無しさん:2012/09/28(金) 08:15:35.99
>>77
すばらしいことではないか

89 :デフォルトの名無しさん:2012/09/28(金) 23:38:27.26
>>77 は「枯れた」の意味を勘違いしてんのか

90 :デフォルトの名無しさん:2012/09/29(土) 00:06:18.15
>>89
「UNIXは枯れたOS」とかで使う「枯れた」だと思う
http://e-words.jp/w/E69EAFE3828CE3819F.html

91 :ニート26:2012/09/29(土) 15:57:17.40
lispのschemeを、やってみたい。
プログラミング初級ですが、できますかね?ニート26歳高卒。

92 :デフォルトの名無しさん:2012/09/29(土) 16:10:38.88
>>91
とりあえず始めてみたら?
始める前に結果知りたがるからニートになるんだよ。

93 :ニート26:2012/09/29(土) 17:59:42.14
>>92
了解
始める

94 :デフォルトの名無しさん:2012/09/29(土) 21:18:45.24
Sagittarius Schemeってライブラリとか結構充実してるんだね。
キーワード引数とか、機能面ではGaucheの影響が強い印象。

http://code.google.com/p/sagittarius-scheme/

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

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

もちろん、筋の悪さに目を瞑りすぎるとカオスになるのでそこらへんの匙加減の上手さが使い勝手を良くしているんだけど、
そういうバランス感覚はセンスというか現場の感覚なのかな。

96 :デフォルトの名無しさん:2012/09/30(日) 18:31:41.94
はちみつ餃子とSCHEME餃子は同一人物?
コテの由来も気になる。

97 :デフォルトの名無しさん:2012/09/30(日) 18:40:10.92
全部俺の自演
俺とお前しかいない
だとしたら?

98 :デフォルトの名無しさん:2012/09/30(日) 19:00:07.72
昔のログを読み返してたらハンバーグ餃子のときもあった

99 :デフォルトの名無しさん:2012/09/30(日) 22:32:34.59
>>92
名言だな

100 :デフォルトの名無しさん:2012/10/01(月) 01:15:42.17
行動した後に軌道修正するのが一番コストがかかる
行動はありとあらゆる手段で情報を収集した後にするべき


101 :デフォルトの名無しさん:2012/10/01(月) 01:20:25.17
好きにしろ

102 :デフォルトの名無しさん:2012/10/01(月) 08:19:47.51
ニートさんはC言語とかメジャー言語はできるんかな?
LISPとかはその後だよ
いきなりLISPなんかやり始めたら
基地外ニートに昇格するぞ

103 :デフォルトの名無しさん:2012/10/01(月) 20:27:08.70
LISPが出来ないバカのご意見、たいへんありがとうございますwwwwwww

104 :デフォルトの名無しさん:2012/10/02(火) 02:15:06.98
LISPはCよりも難しいが、継続とマクロを除けば、CよりもSchemeの方が簡単だと思う
コンピュータのレジスタとかの構造とコンピュータ言語を知らないバカに何か言語を教えろと言われたら、迷わずSchemeを教える


105 :デフォルトの名無しさん:2012/10/02(火) 02:19:01.10
コンピュータ言語を知らないのがバカというのはものすごくおかしな話だ

106 :デフォルトの名無しさん:2012/10/02(火) 02:29:33.81
俺なら迷わず「面倒くさいから教えねえよ」って言ってしまうだろう。
見上げたものだ。

107 :デフォルトの名無しさん:2012/10/02(火) 02:36:57.05
>>105
Lispしかできない馬鹿にありがちな発想ですな

108 :デフォルトの名無しさん:2012/10/03(水) 00:43:28.90
Cとか経由せずにLISPしかマスターさせない教育課程って哲学科とかだろうか


109 :デフォルトの名無しさん:2012/10/03(水) 01:23:03.11
ハードというのは人間に従わせるものであって、人間がハードに付き合わなければならない云われはない。

110 :デフォルトの名無しさん:2012/10/03(水) 07:10:45.07
>>109
従わせたいのは現実なり問題なりであって、
ハードはそのための道具で味方だろう。

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

たとえば、車やバイクの上手い人はそう言う。

111 :デフォルトの名無しさん:2012/10/03(水) 08:14:48.80
LIPS は双方歩み寄り。

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

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

112 :デフォルトの名無しさん:2012/10/03(水) 10:15:15.16
LISP は、まず理論があってそれに人もハードも歩み寄らせてる感じじゃないかい?
で、その理論と現実問題との接点が見えづらい、っていう。

113 :デフォルトの名無しさん:2012/10/03(水) 11:52:22.66
Cのポインタを理解することと現実問題との接点はどこにあるんだ?
それを理解することはプログラマにとってのみ現実であって、
プログラムを使う人の現実ではないだろ。
初心者にとってそれをわかれというのも酷な話じゃないか。

114 :デフォルトの名無しさん:2012/10/03(水) 15:10:21.69
> 従わせたいのは現実なり問題なりであって、
それは100%頭おかしい。

115 :デフォルトの名無しさん:2012/10/03(水) 17:17:42.94
自動車バイクに精通していても、道は直せないからな。

116 :デフォルトの名無しさん:2012/10/03(水) 17:39:28.10
お前らそういうLispに直接関係ない抽象的な議論にだけ喰い付くよな。

117 :デフォルトの名無しさん:2012/10/03(水) 21:07:29.16
Lispは今時の言語と比べて非人間的すぎる

118 :はちみつ餃子 ◆8X2XSCHEME :2012/10/03(水) 21:35:53.19
だがそれがいい。

119 :デフォルトの名無しさん:2012/10/03(水) 23:39:49.13
()がある以外は他のLL言語と
大差ないと思うが…
インデントさえきちんとしてれば
()とかもあんまり気にならん
Schemeとかどこにでも実装されるから
覚えるとこれほど武器になりそうな言語ない気がする
CommonLisp派だけど


120 :デフォルトの名無しさん:2012/10/04(木) 00:53:06.69
>>117
LISP以上に非人間的な道具「ソロバン」
だが人がソロバンに合わせることで計算力があがってしまう。

非人間的だってのはいけない事かね。


121 :デフォルトの名無しさん:2012/10/04(木) 02:14:59.90
いちいち相手にするとは人間味ありすぎ

122 :デフォルトの名無しさん:2012/10/04(木) 13:27:05.20
にんげんだもの

123 :デフォルトの名無しさん:2012/10/04(木) 14:07:37.04
人工知能研究での結論
ネットの向こうで応答しているのが、人間か機械かは原理的に判別できない

124 :デフォルトの名無しさん:2012/10/04(木) 15:21:31.33
チューリングテストに結論が出たという話は初耳だが

125 :デフォルトの名無しさん:2012/10/04(木) 16:05:58.87
CommonLispは50万だしてアレグロ買えないと
実用にはならないのでは?

126 :デフォルトの名無しさん:2012/10/04(木) 16:20:03.31
それはこまりすぷ

127 :デフォルトの名無しさん:2012/10/04(木) 16:30:26.48
ハッカーの必須言語だというから、どのマシンでも実用になると思ってたのに…

128 :デフォルトの名無しさん:2012/10/04(木) 17:42:29.21
ACLって優れた処理系なのは間違いないけど、そんな神格化されるような存在じゃないだろ。
ネイティブスレッドひとつとっても、まともにサポートされたの、今年に出た9.0からだぞ。
他の処理系の方が得意な分野だってある。

129 :はちみつ餃子 ◆8X2XSCHEME :2012/10/04(木) 19:26:36.75
Allegro はかなり丁寧なサポート込みでその値段だって話だからなぁ。
そう考えると業務用としてはそんなに高価ってわけでもないんじゃねーの。


130 :デフォルトの名無しさん:2012/10/04(木) 22:59:03.44
ポール・グレアムのヤフーショップはCLISPじゃなかったっけ。

131 :デフォルトの名無しさん:2012/10/05(金) 01:21:42.80
保守まで面倒みるとなると高い金もらわないとやってられない
柔軟性が高いのが裏目に出てる


132 :デフォルトの名無しさん:2012/10/05(金) 01:25:09.60
業務でなんか使えないし

133 :デフォルトの名無しさん:2012/10/05(金) 02:08:48.94
>>132
・Webサーバ系ではけっこう使ってる
・大学で開発されたシステムを企業に移植するときに使わざるをえないときがある
・勘違いした会社がライセンス買った場合は当然使う


134 :デフォルトの名無しさん:2012/10/05(金) 08:33:51.90
まともな技術者ひとり雇ったら50万なんてひと月で消える。

135 :デフォルトの名無しさん:2012/10/06(土) 03:47:11.84
50万円が消えるか、会社からまともな技術者が消えるか


136 :デフォルトの名無しさん:2012/10/09(火) 16:26:08.93
JavaScriptをそれなりに書いてるひとならLisp系はわりとすぐに理解できるとおもうんだけどなあ・・・

137 :デフォルトの名無しさん:2012/10/09(火) 16:28:55.54
Lispなんて使う意味がわからん
JavaScriptでいいじゃん

138 :デフォルトの名無しさん:2012/10/09(火) 18:15:56.29
よくわからないトラウマを抱えた人にLispは無理

139 :デフォルトの名無しさん:2012/10/09(火) 18:23:11.19
http://www.hikaritaxi.co.jp/blog/wp-content/uploads/2009/09/ba5b2e81727a0decc596da87c68e15ad.JPG

140 :デフォルトの名無しさん:2012/10/09(火) 19:35:46.18
仕事でいざ限られた時間で使う事を考えると
LISPは構造が単純なこと以外には特にメリットは見えないな
複雑にしてどうすんだと思う
例えば最低限の処理系が数百〜数千行だから
数時間から数日あれば実装できる
しかしそういう用途では選択肢の中にGC付き言語はなかったりするが

141 :デフォルトの名無しさん:2012/10/09(火) 20:15:09.88
http://picolisp.com/5000/!wiki?home
http://www.newlisp.org/
C 系の人は単純さを極めた PicoLisp や JavaScript 的名前空間の newLISP とかから入ると
やがては Scheme の凄みも分かるようになるかも。ちなみに newLISP は Docs にマニュアル
和訳あり。

142 :SCHEME餃子 ◆8X2XSCHEME :2012/10/09(火) 20:22:04.22
>>140
前提がよくわかんない。 組込み言語として使うみたいなことを考えてるのかな?
Lisp はピンキリなのでそのあたりがはっきりしないと話が噛み合わなかったりするよ。

143 :デフォルトの名無しさん:2012/10/10(水) 06:05:27.78
racketをemacsに設定できないhelpme
まず、ubuntu用の.shってのがよく分からなかったからunix用の.tgzを展開してsitelisp下においたんだけど、mzscheme.exeが見当たらないしpathの通し方もイマイチわからない

144 :デフォルトの名無しさん:2012/10/10(水) 17:29:26.34
まず環境を書こうか。LinuxなのかWindowsなのか。
あと、パス自体はどんなものか分かってる? 通し方が分からないだけ?
ついでにEmacsの使い方は知ってると思っていいの?

145 :デフォルトの名無しさん:2012/10/10(水) 17:38:41.75
お前にLispは無理
IDEの付いたJavaかC#でもやれ

146 :デフォルトの名無しさん:2012/10/10(水) 17:45:25.15
いや、Racketって普通にIDE付いてるから。

147 :SCHEME餃子 ◆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 に設定するときに絶対パスを指定すれば必ずしもパスを通さなくてもいいんだけど、
空白を含むパスをちゃんと解釈してくれなくておかしなことになるので環境変数をセットしといた方が簡単。

148 :デフォルトの名無しさん:2012/10/10(水) 22:14:18.28

男ならメモ帳だろ…


149 :デフォルトの名無しさん:2012/10/10(水) 23:09:36.18
Typed Racket初めて触ってみた。
http://docs.racket-lang.org/ts-guide/
DrRacket上で固有の情報も確認出来るんだね。すごい。
ClojureでTyped Racketを参考にして実装してみてるものがあるけど、ツール類まで用意するのは大変そうだ。

使い方をぱっと見た感じ、型の指定がQi IIみたいに簡潔に書ければ良さげなんだけど、使い方がちょっと手間かな。

150 :143:2012/10/11(木) 09:16:50.35
環境はUbuntu12.04
パス自体がどんなものか、正確にはわからないがその前に
とりあえずRacket.exeが見つからない。Ubuntu用の.shファイルの扱いが分からなかったからUnix用の.tgzファイルを展開したのだが

151 :143:2012/10/11(木) 09:17:46.28
ちがったMzscheme.exeが見つからない

152 :デフォルトの名無しさん:2012/10/11(木) 11:23:01.40
あらしなのか天然なのかわからないけど、
そのレベルならWindowsでracket使う方がいいと思うよ。


153 :SCHEME餃子 ◆8X2XSCHEME :2012/10/11(木) 13:09:44.77
>>150
Unix source って書いてあるやつはソースコードが入ってるだけだから、
その中には実行バイナリは無いよ。 さすがにこれは >>152 と同意見だわ。
sh が何か、ソースコードが何かくらいはググって調べてね。

154 :デフォルトの名無しさん: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から使えば良いよ。


155 :デフォルトの名無しさん:2012/10/11(木) 13:58:34.98
cKanrenが素晴らしすぎる
これあったらcall/ccいらない

156 :デフォルトの名無しさん:2012/10/11(木) 14:38:00.08
>>154参考にしてるサイトはもうひとつのscheme入門、分からないことは逐一ググってる。scheme学ぶのにscheme手習い→SICPとやろうと思ってるのだけど、どうでしょう?

157 :はちみつ餃子 ◆8X2XSCHEME :2012/10/11(木) 15:02:23.31
>>156
その手順で学ぶのは良いと思う。
Racket は統合環境が有って初心者に使い易い選択だと思うし。


158 :143:2012/10/11(木) 15:03:47.50
おかげさまで出来ました。thx

159 :デフォルトの名無しさん:2012/10/11(木) 15:56:26.11
子供が小学生になったら豆腐配達システムの仕事を
手伝わせるんだ。言語はもちろんLisp。

160 :デフォルトの名無しさん:2012/10/11(木) 16:29:05.22
自作パーツとかの在庫管理をLISP(scheme)でしたいんだけど
保存するファイル形式はやっぱりS式がいいんでしょうか

(データベース
(品名1 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
(品名2 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
(品名3 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
)
こうしてくと、値段が変動したりした時に混乱するのですが、
同じ品名でも値段が違ったら分けた方がいいんですかね


161 :デフォルトの名無しさん:2012/10/11(木) 16:31:08.36
あ、何に使ったかが増えていくので
(品名 使った日時 使った数 何に使ったか)
を別にするとよさそうですね
うん

162 :デフォルトの名無しさん:2012/10/11(木) 16:34:47.01
(購入DB
(品名1 値段 購入日時 購入場所 購入数)
(品名2 値段 購入日時 購入場所 購入数)
(品名3 値段 購入日時 購入場所 購入数)
)
(消費DB
(品名1 使った日時 使った数 用途)
(品名2 使った日時 使った数 用途)
(品名3 使った日時 使った数 用途)
)
これで購入DBから品名で検索して消費DBの使った数から引くと
在庫がいくつあるか判りますね
これでいいかな

163 :デフォルトの名無しさん:2012/10/11(木) 16:56:15.25
登録日時とかでソートしたいから、自動で入ってくれるといいな
日付に型なんてないから、32bit値でいいかな?
文字列のがいいかな?
日付と時刻は項目として分ける意味がないから文字列だな
"12/10/11 16:49:00"
"121011 未明"
"今日"
"忘れた"
とかありえるし

あ、使ったのを在庫に戻した場合どうすればいいんだろう?
書き換えるのは論外だから、消費DBに
(品名 戻した日時 -戻した数(負数) "戻した")
を追加するしかないか

164 :はちみつ餃子 ◆8X2XSCHEME :2012/10/11(木) 17:56:05.43
規模が小さいものならS式でいいと思う。
でも、規模が大きくなってデータベース的なことをするならそれに特化して進化してきたシステム
(リレーショナルデータベースや key value store) を使う方が効率的。

柔軟性こそ Lisp の本領なので、
今の段階ではそんなこと気にせずとりあえず思い付いたように書いていけばいいんじゃないの。
問題があればそのときに修正できるだけの柔軟性があるのが Lisp ってもんだろ。

165 :デフォルトの名無しさん:2012/10/11(木) 20:28:41.80
>>164
会社で使うならともかく、
個人でデータベースなんか使うと、
存在自体忘れたり、面倒になって使わなくなるので、
なるべく小規模で、どこでも見れるようにテキストベースにしたく、
そうなるとLISPかなーと思いました


166 :デフォルトの名無しさん:2012/10/11(木) 20:44:07.37
取り敢えずデータのスキーマについてのアドバイスが欲しいなら、
ム板よりデータベース関係の板の方が本職が居て良いと思うぞ。
>>160-163とか思いっきりそういう話だし。

167 :デフォルトの名無しさん:2012/10/11(木) 21:23:25.81
何も考えずにメモ帳に追加していって、後で全文検索
これ最強

168 :はちみつ餃子 ◆8X2XSCHEME :2012/10/11(木) 21:44:03.37
Google Drive でスプレッドシート使えばスマホでも見れるよ。

169 :デフォルトの名無しさん:2012/10/12(金) 15:55:32.89
グーグルに個人情報は検索ワード以外もう与えたくないな
こわい

170 :デフォルトの名無しさん:2012/10/19(金) 14:53:47.96
SCHEMEのTOY処理系(マクロとか無し)を作ろうとしてるので名前募集。

171 :デフォルトの名無しさん:2012/10/19(金) 16:20:00.34
マクロ・末尾呼び出し最適化・継続を実装してないやつはschemeとは認めない

172 :デフォルトの名無しさん:2012/10/19(金) 16:52:50.94
マクロは IEEE にはなくて R4RS でも付録で示唆してるだけ。
末尾再帰最適化や継続が不完全な実装も多 (特に C や Java とのやり取りが主のもの)。
だから、静的スコープで単一名前空間なら Scheme、でいいんじゃない?

173 :デフォルトの名無しさん:2012/10/19(金) 17:06:43.71
>>170
Schmiz

174 :デフォルトの名無しさん:2012/10/19(金) 17:20:33.57
しゅ…しゅみず

175 :はちみつ餃子 ◆8X2XSCHEME :2012/10/19(金) 17:26:24.95
>>172
マクロはともかく (まだ議論がぶれているので) として、
末尾再帰最適化や継続は Scheme の顔なので、
それなしで Scheme を名乗るのはちょっと微妙だと思うなぁ。
あえて Scheme を名乗らなくても、
(部分的に Scheme 風の) 新しい Lisp 方言のひとつってことでいいんじゃね。

176 :はちみつ餃子 ◆8X2XSCHEME :2012/10/19(金) 17:27:20.58
>>173
スク水www
鬼才現るwww

177 :デフォルトの名無しさん:2012/10/19(金) 21:33:26.33
スクール水着っていうと女子のスクール水着だけを
指しているよね。不思議だ。

178 :デフォルトの名無しさん:2012/10/19(金) 22:45:00.22
男のは海パンとか言ったりするな。
これも不思議だな

179 :デフォルトの名無しさん:2012/10/19(金) 22:49:08.91
そういう名前はpythonだけで十分だろw

180 :デフォルトの名無しさん:2012/10/19(金) 23:52:10.83
イメージカラーは紺色で決まりだなw

181 :デフォルトの名無しさん:2012/10/20(土) 02:59:43.44
>>170
デキがショボければShameと呼ばれるのは間違いない。

182 :デフォルトの名無しさん:2012/10/20(土) 21:37:56.94
schemale

183 :デフォルトの名無しさん:2012/10/20(土) 21:50:03.48
SCHE

184 :デフォルトの名無しさん:2012/10/20(土) 22:44:33.71
schebe

185 :デフォルトの名無しさん:2012/10/20(土) 23:31:44.31
名前だけの話だけど、scheme 処理系はかっこいい名前多いね。イカロスとかゴーシュとかガンビツトとか。
CLはsbclとかなんか味気ない。

186 :デフォルトの名無しさん:2012/10/20(土) 23:36:07.19
>>170
SCHEYAKI すき焼きスキーム

187 :デフォルトの名無しさん:2012/10/20(土) 23:44:37.11
shample

188 :デフォルトの名無しさん:2012/10/21(日) 22:23:53.06
https://raw.github.com/strangeloop/strangeloop2012/master/slides/sessions/Flatt-TheRacketWay.pdf

RacketがClojureみたいに総合的な開発者向けイベントに参加して広報してた。

189 :デフォルトの名無しさん:2012/10/24(水) 23:53:10.42
+チック姉さんの親戚で
(チック姉さん
というのを思いついたので誰か薄い本をはよ

190 :デフォルトの名無しさん:2012/10/25(木) 00:01:38.28
しかし今日は暑いな

191 :デフォルトの名無しさん:2012/10/31(水) 15:05:08.07
女の子のポケットに入るscheme端末(ネット機能は
問わない)を具現化した・具現化しやすい環境って
なんだろう。生活の中でケータイの電卓以上のこと
がしたいし、計算履歴を残せるとうれしい。入力支
援があるとなお良い。
数年後、タッチパネルにUbuntuを入れられる世の中
になるなら開発せずに待つんだけど。

192 :デフォルトの名無しさん:2012/10/31(水) 23:34:07.45
これはどう?
http://www.sony.jp/CorporateCruise/Press/200901/09-0108/

193 :デフォルトの名無しさん:2012/11/02(金) 01:56:43.43
JVMがワンチップに入るんだから、Scheme処理系も入ると思います


194 :デフォルトの名無しさん:2012/11/02(金) 22:17:34.71
FPGAにlispマシンを実装するのは、どっかで見たな。

195 :デフォルトの名無しさん:2012/11/02(金) 23:14:31.74
末尾最適化がネックなのかな
clojure もJVMの都合で末尾最適化を仕様に入れなかったという話だし

196 :デフォルトの名無しさん:2012/11/04(日) 15:25:21.55
λ...

197 :デフォルトの名無しさん:2012/11/04(日) 21:29:20.88
Scheme で書かれたものを github で検索したら何かの演習課題のこたえみたいなのばっかりなんだが、
こういうのを github に上げる奴は見てもらう価値があると思ってやってんの?
それとも単なるバックアップ先として使ってるだけ?

198 :デフォルトの名無しさん:2012/11/05(月) 09:44:24.19
何かを公開するとき、「見てもらう」なんて卑屈になる必要はないんだよ。


199 :デフォルトの名無しさん:2012/11/05(月) 15:54:27.02
GitHubの検索機能が貧弱なのが悪いんだよ。キーワードで除外できれば良いのに。

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

「scheme -sicp」みたいな感じでこの辺使ってみたらどうよ?

200 :191:2012/11/05(月) 18:14:56.02
やっと書き込めた。
>>193
もうすぐ2013年だし、2009年1月は古くない?
http://kakaku.com/pc/note-pc/ma_0/s5=-10/
ミニノートって言うんだっけ?いわゆるEeepc系ってタブレットに変わっちゃったんだね。
どこのメーカーも作っていないようだ。
http://kakaku.com/pc/pda/ma_0/s1=1/s2=-5/
一万円切ったほぼ最新Androidも時間の問題で発売されそうだから、Androidで開発して
おくのが一番の近道なのかな。
>>193
誰か作っていそうだけど、マイコンで作るのも楽しそうだね。
ネットに繋げないとして入力デバイスは何がいいんだろ。

201 :デフォルトの名無しさん:2012/11/06(火) 00:21:13.62
androidでいいならこんなのとか
http://android.allappli.net/d_jp.gr.java_conf.hilite.schemepad.html

202 :デフォルトの名無しさん:2012/11/06(火) 19:33:07.28
gentooのracketパッケージがドキュメントを入れないのは嫌がらせかなにかなのか
racketが一番いいのはドキュメントなのに

203 :はちみつ餃子 ◆8X2XSCHEME :2012/11/17(土) 19:15:45.62
>>202
そういうことは gentoo スレで言った方がいいんじゃね?

204 :デフォルトの名無しさん:2012/11/18(日) 08:40:41.95
おまいらなら部屋を掃除することを「ガーベージコレクション」って言うよな!

205 :デフォルトの名無しさん: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を使うと空文字が返ってきます

206 :デフォルトの名無しさん:2012/11/18(日) 14:49:29.24
http://chaton.practical-scheme.net/gauche/
ここで聞いた方が早いかも

207 :はちみつ餃子 ◆8X2XSCHEME :2012/11/18(日) 15:42:00.08
>>205
time の結果は標準出力ではなく標準エラー出力に表示することになっているので、
標準エラー出力を捕えないといけない。
こんな感じかな。

(call-with-output-string
(cut with-error-to-port <>
(cut time (list 1 2))))

208 :はちみつ餃子 ◆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))))

209 :デフォルトの名無しさん:2012/11/18(日) 19:31:40.33
文字列じゃなくてかかった時間を数値として取り出したいなら、time-thisというのもある。
マニュアルのgauche.timeのところ見てみ。

210 :デフォルトの名無しさん:2012/11/19(月) 02:18:32.99
>>206-209
ありがとうございます。
標準エラー出力が出力先だということを見落としていたのはまずかったです。
勉強になりました。数値を取得できるのは意外でした。いじってみます。

211 :デフォルトの名無しさん:2012/12/03(月) 06:56:39.61
gosh> (iota 3 1 0.1)
(0.9999999999999999 1.0999999999999999 1.2)
これ理解できないのですが
誰かご説明お願いいたします。

212 :デフォルトの名無しさん:2012/12/03(月) 08:23:43.55
結果から憶測すると、最初に1.2を計算しておいてそれから引いてみたいだね。
逆順で作る理由はリスト作るの簡単だからかな。

213 :デフォルトの名無しさん: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])))

なるほど、確かに。

214 :デフォルトの名無しさん:2012/12/03(月) 14:31:12.96
>>212 213
ありがとうございました。

215 :デフォルトの名無しさん: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

スルーされそうなので、超亀レスでもいいのでレスください。私はサクッと具現化する
能力はないのでプログラム作成者が現れずにレスの状況によっては私が作ることを検討
しないといけないのかもしれない。

216 :デフォルトの名無しさん:2012/12/06(木) 13:07:18.64
http://kohada.2ch.net/vote/

217 :デフォルトの名無しさん:2012/12/06(木) 13:09:11.05
何で処理系のアンケート取る程度で、「ぼくのかんがえるさいきょうのしすてむ」作んなきゃいけないの……。
しかも他人に作らせるつもり満々とかなにそれこわい。

218 :デフォルトの名無しさん:2012/12/06(木) 13:35:31.81
意味がわからない
こわい

219 :デフォルトの名無しさん:2012/12/06(木) 14:01:24.45
報酬支払うなら作ってやるよ。

220 :デフォルトの名無しさん:2012/12/06(木) 22:00:49.60
はやってる しょりけい
はやってない しょりけい
そんなの LISP じたいの マイナーさ かんがえたら ごさ

221 :デフォルトの名無しさん:2012/12/07(金) 00:30:31.09
>>215
ありがとうございました。

222 :デフォルトの名無しさん:2012/12/09(日) 13:16:30.41
syntax/macro/functionみたいな、適用可能な要素一般の呼び方ってなにかあります?
applicableとかですかね

223 :デフォルトの名無しさん:2012/12/09(日) 14:04:53.39
map/operator

224 :デフォルトの名無しさん:2012/12/09(日) 15:21:45.00
gaucheだとApplicable objects(適用可能なオブジェクト)と呼んでるね。

225 :はちみつ餃子 ◆8X2XSCHEME :2012/12/09(日) 15:23:03.08
>>222
Lisp 全般はわからないけど Scheme の用語の中には相当する言葉はないと思う。
apply という言葉もマクロには使わないし。 (マクロ展開の実体を use という)
operator もマクロに使う言葉じゃないなぁ。
見た目に同じでもプログラム的な作用としては違うから、どうしてそういう一般化した用語が欲しいのか気になる。

強いて妥当な言葉をひねり出すなら「式の先頭」くらいじゃね?

226 :はちみつ餃子 ◆8X2XSCHEME :2012/12/09(日) 15:24:39.22
>>224
マクロはオブジェクトじゃないよ。

227 :デフォルトの名無しさん:2012/12/09(日) 15:31:07.24
command/instruction

228 :デフォルトの名無しさん: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でもオブジェクトだし。

229 :デフォルトの名無しさん:2012/12/22(土) 13:59:08.93
学習始めたばっかりの初心者の感想だけどSchemeのリストってすごく難しいね
'(1 2 3) == '(1 . (2 . (3 . ()))) == (cons 1 (cons 2 (cons 3 '())))
どれがどれのシンタックスシュガーなのかサッパリ分からん

230 :229:2012/12/22(土) 14:06:09.07
あと、だいたいのScheme入門には()がリストの終端を表すって書いてあるのに、実際には
'(1 . ((). (2 . ()))) これが (1 () 2) こんな感じで通っちゃうし

(length '(1 . ((). (2 . ())))) これは 3 になるし、終端判定に()は利用されてないんじゃね?
だったら終端に()付ける必要なくね?って思っちゃう

231 :デフォルトの名無しさん:2012/12/22(土) 14:33:02.55
http://www.shido.info/lisp/scheme3.html
初めてだと、listが見た目分かりやすいような気がする
(list 1 2 3)

232 :デフォルトの名無しさん:2012/12/22(土) 14:34:22.09
>>230
コンスセルはテキストに載ってないか?
コンスセルを書いて、よく考えて見ろ。理解が早まる。

233 :デフォルトの名無しさん:2012/12/22(土) 14:36:21.30
最初のうちはこんな感じで図を描くのがいいよ
http://www.geocities.jp/m_hiroi/func/abcscm02.html

234 :はちみつ餃子 ◆8X2XSCHEME :2012/12/22(土) 15:01:57.51
>>230
そのリストの最後は () で終わってるよ。

235 :229:2012/12/22(土) 15:17:11.00
>>230-233
ありがとう。lengthの実装見てなんとなく理解できた。
()が要素にあったらそこを終端と判断する、ってわけじゃなく、cdrの戻り値が()であれば終端と判断する、ってことか
と、理解してからコンスセルの形を見れば一目瞭然だったw

んー、ドット対の利用価値がイマイチ分からんけど(consで説明すりゃいいじゃん……)もう少し読み進めてみます

236 :デフォルトの名無しさん:2012/12/22(土) 15:17:57.98
漏れてた。>>234もありがとうございます
名無しに戻ります

237 :はちみつ餃子 ◆8X2XSCHEME :2012/12/22(土) 15:45:06.32
>>235
ドット対はコンスセルの外部表現で、cons はコンスセルを生成する手続という違いがある。
文字列で言えば "ab" と (string #\a #\b) の違いと説明すればわかるかな?

238 :デフォルトの名無しさん:2012/12/22(土) 20:11:21.84
consは無視して、car, cdrが使えればいいんじゃないの。
リストで実用的なプログラムをいっぱい書いてから戻って考えた方が
理解が速いんじゃないの。
cons回りにかけた10時間が意味があったのかよくわからん。

SICPはいつ読めばいいのかね?

239 :デフォルトの名無しさん:2012/12/22(土) 20:54:14.44
>>235
ドット対は関数の可変長引数が楽になる

240 :デフォルトの名無しさん:2012/12/23(日) 11:30:21.02
ドット表記なしに連想リスト書くと、罰ゲームワロタって思って偉大さが分かるよ!

241 :デフォルトの名無しさん:2012/12/23(日) 11:54:07.78
'((key1 . val1) (key2 . val2) ...)

242 :はちみつ餃子 ◆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

243 :デフォルトの名無しさん:2012/12/23(日) 13:42:12.44
リテラルで書く場合は定数として扱え、それが嫌ならcons使え、ってこと?

244 :デフォルトの名無しさん:2012/12/23(日) 13:48:18.26
そう。Schemeじゃなくてもそう。

http://www.faqs.org/faqs/lisp-faq/part3/section-14.html

245 :デフォルトの名無しさん:2012/12/23(日) 19:11:24.37
確かにリストが分かっていればあんまり困らない、ように思えるかもしれない。でも、ちゃんとコンスセルを理解してないと、マクロを沢山書くようになってから地味にハマる。というかオレはハマった。コンスセルはリストより基本的な構造だよ。だから大事。

246 :デフォルトの名無しさん:2012/12/23(日) 20:26:15.95
>>245
わかっててツケにしているんだからマクロを沢山書くようになってハマってから
ツケが回ったと思ってその時に考えればいいんじゃないの?
その頃にはSchemeの語彙も増えているだろうし、開発環境も整っていて解析も
しやすいでしょ。中学校の連立方程式を振り回して難しい問題を解いている
イメージだ。微分積分で楽な解法があるんじゃないの。

247 :はちみつ餃子 ◆8X2XSCHEME :2012/12/23(日) 20:37:54.88
それは一理あるな。

言語の機能は相互に関連して成り立っているので、
簡単な方から難しい方へ学んでいけばいいというわけじゃない。
どうせ行きつ戻りつするのだから、
意義をわからずに学ぶよりは実際につっかえるところまで一旦先に進むのも有りだと思う。

248 :デフォルトの名無しさん:2012/12/23(日) 21:31:18.42
マクロは楽で生産性が高いけど、5年前に自分で作ったマクロ見たらワケわかんねぇ

249 :デフォルトの名無しさん:2012/12/23(日) 21:49:15.78
マクロなんざ展開したら余裕で把握できると思うんだけど、どんな複雑なマクロ書いてんだよ。

え? Series? 僕もさっぱり理解できません。

250 :デフォルトの名無しさん:2012/12/23(日) 22:09:34.22
>>249
読みやすくするために展開するってことは、はじめからマクロにしなけりゃいいんじゃ…

251 :デフォルトの名無しさん:2012/12/23(日) 22:33:30.28
>>250
マジレスすると、macroexpandとそれに類する機能の話。
マクロのデバッグには必須だと思う。知らなかったら便利だから使ってみて。

252 :デフォルトの名無しさん:2012/12/23(日) 22:52:15.39
読みやすくするためではなく、独自に発見したフレームやイデオムをマクロにするから、時間が経つと忘れる
結果、似た構造を持つマクロが大量生産される
定期的にマクロだけあつめてリファクタリングしたい

253 :デフォルトの名無しさん:2012/12/24(月) 00:21:22.08
>>252
意味論の世界へようこそ。

254 :デフォルトの名無しさん:2012/12/27(木) 02:14:26.09
ハッカーがLISPを使うと聞いてLISPの勉強をはじめました
そもそもハッカーはどこでどういうふうにLISPを使っているのでしょうか

255 :デフォルトの名無しさん:2012/12/27(木) 04:41:03.35
あなたが過去にした質問とその答を読み返してみてはどうでしょう

256 :デフォルトの名無しさん:2012/12/27(木) 11:28:03.97
http://cruel.org/freeware/hacker.html

LISP は、それをモノにしたときのすばらしい悟り体験のために勉強しましょう。
この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。
たとえ、実際には LISP そのものをあまり使わなくても。

257 :デフォルトの名無しさん:2012/12/27(木) 20:23:39.58
悟りを開くために修行するなら、SchemeとかHaskellとかがいいんでね?
Common Lispは実用向けの泥玉だしな。

258 : ◆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とかいうカッコだらけですごくわかりにくい言語があることは知っているが、 最強とか主張する信者がいるらしいのでなるべく関わらないようにしている。

> 最強とか主張する信者がいるらしいので
> 最強とか主張する信者がいるらしいので
> 最強とか主張する信者がいるらしいので
> 最強とか主張する信者がいるらしいので

259 :デフォルトの名無しさん:2012/12/28(金) 03:17:18.03
ロボット同士で壊しあいをした場合、生き残った最強のマシーンの頭脳にはLISPが使われている

260 :デフォルトの名無しさん:2012/12/28(金) 11:42:54.30
>>259
空想みたいな話にしているけど、少ない予算で殺し合いってできるでしょ。

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

あとはルールがシンプルな新しいボードゲームを考えて、n日後に大会開催。
ゲーム中のプログラミングの内容の書き換えはありで戦わせるとか。

261 :はちみつ餃子 ◆8X2XSCHEME :2012/12/28(金) 12:21:34.50
将棋等のボードゲームだと各局面での意思決定の賢さよりも読みをとにかく深く広くしたほうが勝利に繋がるみたい。
(現時点では実際にそうなっているというだけでしっかりとした理論的な裏付けがあるわけではない。)

何をどうすりゃいいのかわからない状況での試行錯誤がし易いのが LISP の強みなので
>>260 の条件なら LISP は強いかもね。

262 :デフォルトの名無しさん:2012/12/28(金) 14:00:07.03
大会中にエラーでゲーム中断は1回だけはありでm分後に再開しないといけないと条件を付け
加えるとして。
Cプログラマの人口が一番多いのにCプログラマのエントリーがゼロでしたというのは自分の
主観が入り過ぎているのかな。


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

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

それこそゲームの有利不利を解析するのはプロトタイプの進化をさせやすいLISPが有利だね。
新しいゲームで殺し合うという話になっても、ゲームのプラットフォームを考える人も骨を
折らないといけないんだよなあ。
はは。こういう締めになるとは思わなかった。

263 :デフォルトの名無しさん:2012/12/28(金) 22:06:26.17
言いたいことまとめてから書けよ。

264 :デフォルトの名無しさん:2012/12/28(金) 23:22:45.33
同意。長すぎて読みづらい。整理して。

265 :デフォルトの名無しさん:2012/12/29(土) 23:23:02.73
>>264
「試合自体が難しいんじゃね? 色々あるし。」

266 :デフォルトの名無しさん:2012/12/30(日) 00:07:50.11
>>260
> チェス、将棋、囲碁の世界は計算スピードが物言う世界でC一択なのか。
言語は何でもいい, 強力な盤面評価技法を持った奴が勝ち
盤面評価技法次第で刈り取れる枝の数が大幅に増減する
それでも, 計算量は必要だけど

267 :デフォルトの名無しさん:2012/12/30(日) 12:36:53.28
ニューラルネットで人間の脳細胞を完全再現すれば言語いらないと思う

268 :デフォルトの名無しさん:2012/12/30(日) 13:21:28.92
つ、釣られんぞ・・・

269 :デフォルトの名無しさん:2012/12/30(日) 13:50:04.15
ファミコン程度でいいから、50万年の間は絶対に壊れない演算システムがあれば人間には勝てる
人間はあと10万年で絶滅するから

270 : ◆QZaw55cn4c :2012/12/30(日) 14:35:30.19
>>266
>強力な盤面評価技法
それほしいですねえ。いや、自分のために。
二桁級からなかなか腕があがらないんだ、今日もウッテガエシを食らってしまったorz

271 :デフォルトの名無しさん:2012/12/30(日) 18:34:31.76
そりゃダメ詰まりへの注意が甘いだけでは……

272 :デフォルトの名無しさん:2012/12/30(日) 18:51:31.19
検索ではない必勝法アルゴリズムが開発されたりして

273 :デフォルトの名無しさん:2012/12/30(日) 19:49:24.43
数百万台のpcをインターネットで繋いで分割演算、は有りだろうか?

274 :デフォルトの名無しさん:2012/12/30(日) 20:20:13.32
計算量の指数的増加の前に、容易く敗北する。

275 :デフォルトの名無しさん: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

276 :デフォルトの名無しさん:2013/01/03(木) 09:41:42.04
twitter.com/mnzktw/status/286401275103428609
「どの言語つかってるの?」「Haskellです」「わー!すごーい!」「OCamlです」「わー!すごーい!」
「Agdaです」「わー!すごーい!」
「Lispしてます」「あ…そっち系…」
_人人人人人人人_
> あ…そっち系…<
 ̄Y^Y^Y^Y^Y^Y^Y

277 :デフォルトの名無しさん:2013/01/03(木) 11:59:54.49
レベル1 Lispわかんない
レベル2 レベル1を馬鹿にする
レベル3 レベル2を馬鹿にする
         :

278 :デフォルトの名無しさん:2013/01/03(木) 12:33:43.83
再帰ですか。

279 :デフォルトの名無しさん:2013/01/03(木) 15:14:40.34
>>276
ワロタw

280 :デフォルトの名無しさん:2013/01/03(木) 16:58:54.91
ICOTがPrologに浮気したせいで…

281 :デフォルトの名無しさん:2013/01/09(水) 20:11:32.42
暫くD言語を使ってたけど、CLに復帰しました。
replサイコー。replのない言語は滅ぶべし。

282 :デフォルトの名無しさん:2013/01/09(水) 20:14:43.87
そのへんが滅ぶと連鎖的にこっちも滅ぶんでやめてください

283 :デフォルトの名無しさん:2013/01/09(水) 22:31:39.27
どっかでみたschemeはリスト処理言語であって関数型言語ではないってツイートが
ずっと自分の中にあったもやもやを解消した気がする
当たり前かもしれないことをわすれてただけなんだけどさ

284 :デフォルトの名無しさん:2013/01/09(水) 23:42:24.66
リスト(データ)と関数の区別がないのがScheme

285 :デフォルトの名無しさん:2013/01/10(木) 00:12:53.38
sceme は関数型言語じゃないのは当然だと思ってた。
でも、リスト処理言語にしては () の扱いがダサいよ。

286 :デフォルトの名無しさん:2013/01/10(木) 00:47:59.99
scheme ってどうして () と #f を区別するようになったんだっけ?
nil や t というシンボルがダサいから変えたかった、というのはわかるけど…。
(car ()) や (cdr ()) が () 返してくれてもいいのになぁ。

287 :デフォルトの名無しさん:2013/01/10(木) 00:55:17.52
そりゃ型が違うからでしょ

288 :デフォルトの名無しさん:2013/01/10(木) 01:31:40.39
#fは分かる
()も分かる
しかし、nil や null は本当に必要だったのだろうか?

289 :デフォルトの名無しさん:2013/01/10(木) 01:41:49.40
関数型があって関数を変数に代入(束縛)できれば関数型言語だと聞いた
つまりコールバックがあるCも関数型言語

290 :デフォルトの名無しさん:2013/01/10(木) 01:41:55.05
理論的な整合性より利便性を重視するならCommon Lispの世界に来れば良いよ。

291 :デフォルトの名無しさん:2013/01/10(木) 01:57:57.44
ややこしい構文を確認することが少ない分だけschemeの方が使い易くて便利です
lispはライブラリとexeファイルが欲しいときしか使わなくなってしまった

292 :デフォルトの名無しさん:2013/01/10(木) 02:24:29.18
実用性を求めてCommon Lisp使ってるけど、処理系依存の部分をいちいち確認したり、
ライブラリを求めてClikiを漁っていると、Gauche使ったほうが楽な気がしてしょうがにあ。

293 :デフォルトの名無しさん:2013/01/10(木) 03:59:02.11
実用性を求めるならLispなんて使うなよ

294 :デフォルトの名無しさん:2013/01/10(木) 05:01:35.85
>>292
そりゃGaucheはその分のコストを開発者が払ってるわけだし。

R7RS以降はSchemeもCommon Lispと同じ道に突き進むことになると思う。
Common Lispでの#+や#-の代わりにcond-expand使うだけで。
CLikiやQuicklispに相当する物もそのうち誰かが作るんだろう。

295 :はちみつ餃子 ◆8X2XSCHEME :2013/01/10(木) 09:39:39.57
>>289
C がプリミティブに扱えるのは関数じゃなくて関数ポインタ。
C++ ならなんとか関数型に数えられるかもしれない。

296 :デフォルトの名無しさん:2013/01/10(木) 10:23:25.25
Common Lispは激しく実用重視だとおもうけどなー。
あれこれ突っ込みすぎでとっ散らかっている部分もあるけど。

297 :デフォルトの名無しさん:2013/01/10(木) 12:06:13.64
コンパイル時レイトレーシングとか
C++やってる連中は頭がおかしい

298 :デフォルトの名無しさん:2013/01/10(木) 12:35:55.34
コンパイル時の処理でCommon Lispに勝てる言語って地球上に存在するの?

299 :はちみつ餃子 ◆8X2XSCHEME :2013/01/10(木) 14:00:24.78
>>296
そのとっ散らかってるのがかなりマイナスだと思うなぁ。
Common Lisp ってモジュール化の仕組みはある (規格が曖昧っぽいけど)
のに標準ライブラリがさっぱり整理されてないし命名規則も一貫してないしでわけわかんね。

300 :デフォルトの名無しさん:2013/01/10(木) 15:11:47.35
>>299
まぁ、歴史的経緯ってやつだしね。

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

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

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

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

そういや、ちゃんと規格化しようって頑張ったISLISPって影薄いね。

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

命名規則については、assqとかassvとかそのまま採用しちゃってる上、
結局carとcdrで過去を引きずってるSchemeが人の事言えるんですかね。

302 :はちみつ餃子 ◆8X2XSCHEME :2013/01/10(木) 18:19:43.17
>>301
確かに意味的には first と rest の方がいいと思う。
でも、 caadar みたいなのはどうするのって話になって一貫性も同時に議論する必要がでてしまうんじゃない?
別名を用意するのは Scheme 的じゃない気がするし。
Schemer が本気で議論しはじめたらかなり面倒臭いことになりそう。

そういや、 call-with-current-continuation だけは call/cc って別名があるね。
この場合は単に短縮した名前なので忌避感は感じないな。
R5RS では「call/cc という名前を使う人もいる」という微妙な書き方になってて R6RS で明確に規定されたんだけど、
どういう議論があったんだろう。

303 :デフォルトの名無しさん:2013/01/10(木) 23:04:13.66
モダーンなCLをもう一回作り直すべきだよ。scheme は何か変な方向に行ってるからあまり期待できない。

304 :はちみつ餃子 ◆8X2XSCHEME :2013/01/10(木) 23:23:14.51
>>303
具体的にどこらへんが?

305 :デフォルトの名無しさん:2013/01/10(木) 23:49:48.94
そうして歴史は繰り返される。おもしろいからいいけど。

306 :デフォルトの名無しさん:2013/01/11(金) 00:29:55.76
>>302
最小主義的な思想を持ってるんだから、caadarとか規格に要らんと思うけど。
caadarとかを利用するのはあまり良くないとも言われてるし、そんな使う?
Andrew Wrightのmatchとか使って構造化代入すれば良いじゃない。
別名としてのcall/ccもそうだけど、入れるにしてもR7RS largeちゃうんかと。

307 :デフォルトの名無しさん:2013/01/11(金) 01:13:33.21
R5RS以降はユーザが自分で実装すればいいと思う
もうscheme処理系くらい1人ずつ持つ時代だと思う

308 :デフォルトの名無しさん:2013/01/11(金) 01:29:01.66
つまり……Gaucheってことだな

309 :はちみつ餃子 ◆8X2XSCHEME :2013/01/11(金) 01:38:45.29
>>306
廃止なら廃止で、ライブラリの移動なら移動で議論が起こるよ。
どうするにしたってどこかで議論が起きてどうせまとまんないんだって。
いつものこと。

310 :デフォルトの名無しさん:2013/01/11(金) 01:43:23.15
R5RSでR7RS処理系を実装すれば全部解決するんじゃね?

311 :デフォルトの名無しさん:2013/01/11(金) 02:21:11.28
>>309
つまり、そういうしがらみに縛られてるのはSchemeも似たようなもんなわけで、
あんま堂々とCommon Lispについて言える立場じゃないんじゃないの、ってこと。
その上で敢えて口にするならそれこそ>>304でしょ。

個人的には多少古い設計だとは思うけど、そんなdisられる程とも思えんよ。
一部のSchemerって印象とかで適当にCommon Lisp批判し過ぎじゃない?

312 :デフォルトの名無しさん:2013/01/11(金) 02:50:33.33
「データとプログラムに区別がない」という視点から見れば、schemeこそが真のlispである

313 :デフォルトの名無しさん:2013/01/11(金) 08:17:00.29
r6rsで、納得できる仕様をまとめられないからREPLは仕様から外しました、ってのはびっくりした。
妥協でも不完全でも、とにかく決めなきゃ駄目だよ。

314 :デフォルトの名無しさん:2013/01/11(金) 10:14:49.35
>>312
schemeってプログラムを読み込むのがREADじゃないからダメだとか言われてなかったっけ
schemeマクロは*仕様的だけ見たら*LISPフォームの操作じゃねーじゃねーかってやつ
あれ変わったのか

315 :はちみつ餃子 ◆8X2XSCHEME :2013/01/11(金) 10:19:29.23
>>313
Common Lisp は処理系ごと起動しっぱなしで対話的に開発するのが基本スタイルだけど、
R6RS の場合は C みたいなスタイルを前提にしていると思う。
仮に C に REPL を入れるとしたら無理筋だってのはわかるだろ。

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

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

個人的には Haskell (ghci) 風にすれば辻褄の合うように出来そうな気がしてるけど。

316 :はちみつ餃子 ◆8X2XSCHEME :2013/01/11(金) 10:21:52.28
>>314
R5RS ではプログラムがS式であるとは明記されてなかったけど、 R6RS では変わったよ。

317 :デフォルトの名無しさん:2013/01/11(金) 11:00:44.29
>>315
>R6RS の場合は C みたいなスタイルを前提にしていると思う。
え、対話的な開発スタイルの長所は全部捨てちゃうの?それはそれで道だとは思うけど、ホントにそれでいいのかなぁ。

318 :はちみつ餃子 ◆8X2XSCHEME :2013/01/11(金) 11:57:30.94
>>317
仕様で決めないっていうのは有ってはいけないってわけじゃない。
つーか大抵の R6RS 処理系に REPL 有るし。

厳密に決めようとしたらまとまんないから処理系の裁量で柔軟に対処しとけってことだよ。

319 :デフォルトの名無しさん:2013/01/11(金) 14:15:52.50
R6RSなんて始まってもいない規格どうでもいい

320 :デフォルトの名無しさん:2013/01/11(金) 15:44:46.31
>>299
> そのとっ散らかってるのがかなりマイナスだと思うなぁ。
> Common Lisp ってモジュール化の仕組みはある (規格が曖昧っぽいけど)
> のに標準ライブラリがさっぱり整理されてないし命名規則も一貫してないしでわけわかんね。
実際の所、C系とか、Python系とかと比べてとっ散らかり度はどうなの?
CLはLISPのとっ散らかりはずっと言われてきただろうから、多少他の言語よりマシなのかと
推測しているんだけど。言語で腕試しのためにその言語の処理系を作る文化なんて他の言語に
ないでしょ。

321 :デフォルトの名無しさん:2013/01/11(金) 16:02:37.41
モダンな言語しか知らない若者は、CLのあの関数群を標準ライブラリだと思っちゃってもしょうがないかな。
あれらは言語の一部であって、決してライブラリじゃないんだが。
ああ懐かしき(行番号必須だったころの)BASIC。あれもコマンドも関数もいっぱいあったねー。

322 :デフォルトの名無しさん:2013/01/11(金) 16:40:50.54
>>320
ANSIで定義されている関数やマクロのすべてが組み込みってだけ。
common-lispっていう名前空間にフラットに収録されてる。
R5RS Schemeと似たような事情だと思えば間違ってないと思う。

処理系独自のライブラリとかはちゃんと別の名前空間に入ってる。

323 :191:2013/01/11(金) 17:14:03.54
>>321
> モダンな言語しか知らない若者は、CLのあの関数群を標準ライブラリだと思っちゃってもしょうがないかな。
標準ライブラリ、実質標準ライブラリって具体的に何?

324 :デフォルトの名無しさん:2013/01/11(金) 22:07:29.97
>>315
CではなくAlgolだと思う

325 :デフォルトの名無しさん: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." ってとこだ。

326 :デフォルトの名無しさん:2013/01/11(金) 23:38:33.88
Lispマシンでプログラミングしてた時代の考えをまだ引きずっているのか…

327 :デフォルトの名無しさん:2013/01/11(金) 23:40:05.79
まぁ、そういうこった。

328 :デフォルトの名無しさん:2013/01/11(金) 23:48:38.81
予約語や演算子は文法要素だから違うだろ
CLの関数は文法に関与しないのでライブラリに近い

329 :デフォルトの名無しさん:2013/01/12(土) 07:15:00.14
>>318
>仕様で決めないっていうのは有ってはいけないってわけじゃない。
じゃあscheme仕様は何のために作ってるの?
仕様が定まらなきゃユーザは実用的にはREPL使えないじゃん。処理系毎のREPLの動作調べてね、じゃ、おれにはschemeのREPLは使うべきではない、と言われてるようにしか思えないよ。

330 :はちみつ餃子 ◆8X2XSCHEME :2013/01/12(土) 09:38:42.22
>>329
Scheme の仕様は叩き台にすぎず、
処理系ごとに特色を出して実装するもんだって Shiro さんが言ってた。
https://twitter.com/anohana/statuses/285272500764569600

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

個人的には REPL は言語仕様の一部というより開発環境なので仕様に入れるのはどうかという気持。

331 :デフォルトの名無しさん:2013/01/12(土) 10:32:32.29
話を豚来ってすまんがeqv?で真偽値や文字が特別扱いされてるのはなんで?

332 :はちみつ餃子 ◆8X2XSCHEME :2013/01/12(土) 10:46:38.06
>>331
それは実装の事情と関係がある。

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

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

実装面から説明しなけりゃならない仕様って格好悪い気もする。

333 :デフォルトの名無しさん:2013/01/12(土) 16:51:54.94
>>332
ちょっと違うな。ポインタ同士の比較はeq?だ。仕様には明記してないけど。
eqv?は数値の比較にも使えるが、数値は直接値であるとは限らない(非整数な有理数や
非実数な複素数はだいたいの処理系でヒープに置くだろう)。
仕様のココロとしてはeqv?はimmutableなオブジェクトの同値性、equal?はmutableな
オブジェクトの同一性ってのに近いんだけど、Schemeは伝統的にmutabilityについて
ちゃんと考えてこなかったせいでそう仕様に書けない。

334 :デフォルトの名無しさん:2013/01/12(土) 16:55:35.23
やはり時代はRacket

335 :はちみつ餃子 ◆8X2XSCHEME :2013/01/12(土) 17:06:02.70
仕様を叩き台にして実験するっていう思想に一番合致してるのは Racket かもしれない。

336 :デフォルトの名無しさん:2013/01/12(土) 18:19:09.63
eqv?の使い所謎過ぎ

337 :デフォルトの名無しさん:2013/01/12(土) 19:46:08.36
SCHEME餃子とはちみつ餃子は同じ人なの?

338 :デフォルトの名無しさん:2013/01/13(日) 01:24:49.42
他スレで見たけど、和田本にschemeでscheme処理系の作る方法が書いてあるってさ
学部演習レベルで作れるらしいから、仕様が気にいらなかったら、自分で作ればいいと思う

339 :デフォルトの名無しさん:2013/01/13(日) 09:38:57.95
>>332
ポインタって何

340 :SCHEME餃子 ◆8X2XSCHEME :2013/01/13(日) 10:21:15.57
>>337
同じ人だよ。

341 :SCHEME餃子 ◆8X2XSCHEME :2013/01/13(日) 10:22:17.33
>>339
Cスレ行け

C言語なら俺に聞け(入門編)Part 111
http://toro.2ch.net/test/read.cgi/tech/1355062693/

342 :SCHEME餃子 ◆8X2XSCHEME :2013/01/13(日) 10:55:25.01
>>338
ここでの不満は仕様への不満であって処理系への不満じゃないと思うぞ。
「この機能が標準 (仕様) 化されればいいのに」であって「この機能が使える処理系がない」ってことでは無い。

343 :デフォルトの名無しさん:2013/01/13(日) 15:06:06.58
>>332
なるほど。 タグビットってそういう意味だったのか。
前にソース見て意味不明だったんだけどそう思ってあらためて読んだら理解できた。

344 :デフォルトの名無しさん:2013/01/13(日) 17:38:41.81
日本語でおk

345 :デフォルトの名無しさん:2013/01/13(日) 19:26:52.01
おっ、ILC2012の記録だ。
http://d.hatena.ne.jp/ranekov/touch/20121025/1351163479
回想も面白そうだけど、まだ新しいことも出てくるんだな。

346 :デフォルトの名無しさん:2013/01/13(日) 19:33:54.33
>>342
配布処理系は標準仕様に準拠させてるんだから、「仕様に不満がある=この機能が使える処理系がない」
(まさか、どの標準仕様もカバーしてない処理系を推薦したり、どの処理系もカバーしてない仕様を議論してるなんて馬鹿はいないよね)

347 :はちみつ餃子 ◆8X2XSCHEME :2013/01/14(月) 09:08:51.84
>>346
ここでの Scheme に対する不満は REPL が外されたことを始めとして「足りない」とか「曖昧」とかいったものが多いように見受けられたので、
処理系の拡張まで含めてであれば満足できるものだと思うという回答をしたつもり。

348 :デフォルトの名無しさん:2013/01/15(火) 00:20:13.93
>>297
500行ぐらいのプログラムの型推論を真面目にやると2分ぐらい計算にかかる。
ついでに静的に計算できるの全部やってしまっても計算時間あまりかわらない

349 :デフォルトの名無しさん:2013/01/15(火) 07:34:56.56
最速のscheme処理系ってどれ?

350 :デフォルトの名無しさん:2013/01/15(火) 08:28:01.01
stalin

351 :はちみつ餃子 ◆8X2XSCHEME :2013/01/15(火) 09:25:55.34
stalin は高速だが整数が int のサイズだし、桁溢れの検出もしてくれないので、数値計算向けという割には使い勝手が良くはない。
余計なことをしないというのも速度に寄与しているから、それが悪いとも言えないんだけどさ。
必要なチェックを入れたり自分でチューニングする前提でなら stalin は良い選択かもしれない。

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

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

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

動作速度と一言で言っても色んな意味の速度があるので「これが最速」とひとつを挙げるのは無理だよ。

352 :デフォルトの名無しさん:2013/01/15(火) 10:21:29.57
速度が必要ならSchemeなんて使うなよ

353 :デフォルトの名無しさん:2013/01/15(火) 12:32:19.66
www.larcenists.org/benchmarksGenuineR6Linux.html
mosh速いね

354 :デフォルトの名無しさん:2013/01/15(火) 16:10:06.27
>>351
巨人が作ったArcでも旧racketを使われているし、racketの論評はどんな感じですか?

355 :はちみつ餃子 ◆8X2XSCHEME :2013/01/15(火) 20:15:30.35
>>353
いくつか数値なしのところがあると思ったら、エラーで動かないんだね。

356 :デフォルトの名無しさん:2013/01/15(火) 21:59:57.69
速度を調べるなら、schemeマシンでやってくれないと…

357 :デフォルトの名無しさん:2013/01/16(水) 00:35:43.02
Racket開発者のベンチ測定
http://blog.racket-lang.org/2010/01/benchmarks.html

358 :デフォルトの名無しさん:2013/01/16(水) 01:26:30.28
同じ言語の別実装で性能が異なるのって、何が原因なんだろ

359 :デフォルトの名無しさん:2013/01/16(水) 08:06:48.83
>>358
ひとつの仕様を実装するのにいくつも方法があって、それぞれ長所と短所があって、
何をしたいかによって選択が変わってくるんだから、性能が違う方が自然じゃない?

360 :はちみつ餃子 ◆8X2XSCHEME :2013/01/16(水) 08:16:44.00
>>358
処理系の開発に投入された手間、それとトレードオフの割り切り。
先述の stalin を例にとってみよう。

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

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

前者については開発にかかわる人 (才能) が多くなれば解決するけど、
後者については犠牲にせざるを得ない部分が出てくるので、
それぞれの処理系の設計思想でどこに焦点をあててるかってことになる。
速度のために対話的な開発は無視するっていうのもひとつの設計思想だし、
逆に速度を犠牲にしてでも親切なエラーチェックしまくるのもひとつの考え方で、
どちらがいいというものじゃない。
他の条件が同じなら処理速度は速いに越したことはないがそううまい話もないわけで。

361 :デフォルトの名無しさん:2013/01/16(水) 13:23:59.12
>>352
速度が必要な処理の大部分は数値計算
数値計算プログラムは数式処理から生成できる
数式処理に一番向いてるのはLisp

362 :デフォルトの名無しさん:2013/01/16(水) 14:34:52.73
>>361
Lispで基本動作確認して、LispソースをCソースに変換・コンパイルというのを
続けたお蔭で、Cのバッドノウハウを忘れてしまった(^^;

363 :デフォルトの名無しさん:2013/01/16(水) 15:57:44.98
そういえばshiroさんのC In S-Expressionってどうなったの?

364 :はちみつ餃子 ◆8X2XSCHEME :2013/01/16(水) 16:23:10.67
>>363
普通に Gauche の中にあるよ。
http://practical-scheme.net/gauche/man/?l=en&p=gauche.cgen

365 :デフォルトの名無しさん:2013/01/16(水) 17:46:24.91
自分で処理系を作ろうとしてるところなのですが
コンパイラの一般論が勉強できる教科書でお勧めをお教えいただけないでしょうか
λリフティングとかの用語を理解したいのです

366 :デフォルトの名無しさん:2013/01/16(水) 18:11:30.13
ラムダリフティングとかについてならThe Implementation of Functional Programming Languages

367 :デフォルトの名無しさん:2013/01/17(木) 01:16:24.17
>>365
scheme処理系なら和田本マジオススメ
遅延ストリームや非決定性ambの実装まで載ってる

368 :デフォルトの名無しさん:2013/01/17(木) 01:32:35.92
質問です
common lispのテキストPAIPのscheme実装(22章)を読んでいたら
「schemeの大半のミューテータは、set!のように末尾が「!」である」(日本語版p.711)と書いてあるのですが
このミューテータとはどういう意味なのでしょうか?

369 :デフォルトの名無しさん:2013/01/17(木) 01:36:04.32
変化させる演算子
代入など

370 :デフォルトの名無しさん:2013/01/17(木) 05:34:01.30
イミュータブルなもの JavaのStringなど 初期化したら変更できない
ミュータブルなもの   普通の変数とかC++のstringとか

371 :デフォルトの名無しさん:2013/01/17(木) 20:03:51.01
よく話題に出る和田本というのはSICPの翻訳本のことでしょうか?

372 :デフォルトの名無しさん:2013/01/17(木) 20:06:36.73
>>353
にあるlarcenistsってベンチマークみると高速だけど
誰か使ってみた人いますか?

373 :デフォルトの名無しさん:2013/01/17(木) 22:19:40.57
>>369-370
なるほど。わかりました

374 :デフォルトの名無しさん:2013/01/17(木) 22:22:17.19
Larceny速いけどGaucheやRacketみたいな至れり尽くせりだと思ってるとがっかりするよ。
ついでに言えばここ一年くらい絶賛開発停滞中だ。

375 :デフォルトの名無しさん:2013/01/17(木) 22:25:13.40
>>364
気付いてなかった。ありがと。

376 :はちみつ餃子 ◆8X2XSCHEME :2013/01/18(金) 08:47:21.44
主要な R6RS 処理系が implicit phasing を採用しているけど、larceny はちゃんと run と expand を区別してくれるので
複雑なマクロを書いたときに確認のために larceny で動かしたりしてる。
ただ、メタレベル2以上やマイナスの場合を expand として指定しても動いちゃったりするのでそれほど厳密なわけでもない。

まぁ、そういう細かなところは置くとしても、 >>374 の言うように、普段使いにするには使い勝手が悪いかなと思えるのは確か。

377 :デフォルトの名無しさん:2013/01/18(金) 10:51:45.91
define-struct
define-class
は処理系で挙動が異なるけど
define-record-type
は大部分の処理系で挙動が同じってことでいいの?

378 :はちみつ餃子 ◆8X2XSCHEME :2013/01/18(金) 11:02:44.29
>>377
いいえ。
srfi-9 と srfi-57 と srfi-99 と R6RS でそれぞれ異なる定義がされています。
R6RS 処理系を使う分には R6RS の define-record-type を安心して使えますが、
そうでない場合はどれを採用しているかわかりません。

379 :デフォルトの名無しさん:2013/01/18(金) 15:43:19.80
SRFI を無視しても規格準拠を名乗れるの?

380 :デフォルトの名無しさん:2013/01/18(金) 17:55:50.79
SICPの発音ってSICK PEEなんだってな。
血尿かなんかか(笑)

381 :デフォルトの名無しさん:2013/01/18(金) 20:50:23.21
>>379
約50ページのschemeの仕様書R5RSの中ではSRFIは必須ではない

382 :デフォルトの名無しさん:2013/01/19(土) 12:25:18.42
はちみつさんはブログとか書いてないの?

383 :はちみつ餃子 ◆8X2XSCHEME :2013/01/19(土) 12:37:02.05
>>380
そのネタは Part31 で既出だぁー。

384 :デフォルトの名無しさん:2013/01/19(土) 18:37:16.72
>>332
だとすると、R5RSにある型で即値に出来るのは
「真偽値」「文字」「空リスト」「小さい数値」
の4つってことか。

385 :はちみつ餃子 ◆8X2XSCHEME :2013/01/19(土) 19:02:22.26
>>384
即値って元々はアセンブリ言語で「オペコードのすぐ後にくる値 (定数)」という意味だから、
「ポインタを経由する必要がない値」という意味で使うのに違和感があるんだけど、
Scheme (LISP) 的には一般的なの? 単に >>384 が勘違いしてるだけ?

386 :デフォルトの名無しさん:2013/01/19(土) 19:08:59.76
Javaの、プリミティブ型の値、という意味で使う奴がいたり、
あとRubyでも使われてたりするんだが、あまり普通じゃないと思う。

387 :デフォルトの名無しさん:2013/01/19(土) 19:43:24.36
>>385
間違いだと思うけど、よく見掛ける。

388 :デフォルトの名無しさん: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

こんなノリで。

389 :はちみつ餃子 ◆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 って言ってる事例を見付けた。
こっちの方がよくね? 日本語の適当な訳語が思い付かないけど。

390 :デフォルトの名無しさん:2013/01/19(土) 20:51:34.11
非参照値?

391 :デフォルトの名無しさん:2013/01/19(土) 20:55:46.33
値型/参照型?

392 :はちみつ餃子 ◆8X2XSCHEME :2013/01/19(土) 20:57:03.27
TaPL の邦訳にワクテカしすぎて間違えた。
「The Scheme Programming Language で」
に読み替えて下ちい。

393 :デフォルトの名無しさん:2013/01/19(土) 21:13:33.04
一応他の例も挙げとくと、Lisp Advent Calendar 2012の7日目とか、
SBCLのdoc/internals/objects-in-memory.texinfoとかでも登場する。
ある程度認知されてる表現ではあるんじゃないか。

394 :デフォルトの名無しさん:2013/01/19(土) 22:53:45.01
リテラル?

395 :デフォルトの名無しさん:2013/01/19(土) 23:19:48.45
即値って、1ワードに収まるかどうかじゃないの?
アセンブラでもlispでも同じ意味だと思うけど。

396 :デフォルトの名無しさん:2013/01/19(土) 23:24:11.70
違う。即値はイミディエイトの訳。
アセンブラ(というか機械語)で、命令語中に埋め込まれたデータのこと。

397 :デフォルトの名無しさん:2013/01/20(日) 06:02:44.27
Immediate value なんて、直接(〜でき、〜され)る値って意味で、
具体的な意味は文脈に依存するだろ

LISPならcarもしくはcdrに直接格納できる値って意味で使われるだろうし、
機械語ならマシンコード中に直接格納される値って意味

398 :デフォルトの名無しさん:2013/01/20(日) 10:22:37.83
>>397
だから専門用語は文脈に依存しちゃ駄目なんだって。

399 :デフォルトの名無しさん:2013/01/20(日) 10:31:58.53
クロージャーみたいに依存しちゃった専門用語もあるけどなw

400 :デフォルトの名無しさん:2013/01/20(日) 10:36:37.71
>>398
だからImmediate valueは専門用語じゃないだろうと言ってる

401 :デフォルトの名無しさん:2013/01/20(日) 13:08:44.34
そうか。

402 :デフォルトの名無しさん:2013/01/20(日) 20:39:38.01
そうだったのか。

403 :はちみつ餃子 ◆8X2XSCHEME :2013/01/20(日) 21:26:36.13
Racket が Android で動くらしいよ。
http://www.wedesoft.de/racket-on-android.html

404 :デフォルトの名無しさん:2013/01/20(日) 22:18:23.02
>>403
使い勝手はどんなものですか?

405 :はちみつ餃子 ◆8X2XSCHEME :2013/01/21(月) 08:09:16.35
Android 端末を持ってないから知らん。
(Virtual Box とかでも動くかもしれないけど、動作環境を用意するのは面倒。)
誰かレポートよろ。

406 :デフォルトの名無しさん:2013/01/21(月) 23:12:04.59
LispマシンみたいなLisp携帯作ってください

407 :デフォルトの名無しさん:2013/01/22(火) 07:30:54.32
自分で作れよ

408 :はちみつ餃子 ◆8X2XSCHEME :2013/01/22(火) 09:50:22.41
>>382
書いてるよ。

409 :デフォルトの名無しさん:2013/01/22(火) 19:17:08.34
>>408
Island Lifeだったり?w

410 :はちみつ餃子 ◆8X2XSCHEME :2013/01/22(火) 19:34:36.99
>>409
んなわけない www
あんな超人と比べないで欲しいッス。

411 :デフォルトの名無しさん:2013/01/22(火) 23:20:39.30
全然芸風が違うと思う

412 :デフォルトの名無しさん:2013/01/22(火) 23:27:00.87
まずは見当違いの方向でと反応させてから、次第に絞り込んでいくのは特定厨の常套手段。

413 :デフォルトの名無しさん:2013/01/22(火) 23:41:08.09
はちみつ氏にそんなに興味ないけど
話変わるけど、渋谷lispどうなったかな

414 :デフォルトの名無しさん:2013/01/23(水) 00:02:12.30
今日が月一開催予定のミートアップ初回だったか。
cl,scheme,clojure順々にやるってみたいだけど

415 :デフォルトの名無しさん: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
なんか納得いかない

416 :デフォルトの名無しさん: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

417 :デフォルトの名無しさん:2013/01/23(水) 02:03:46.20
>>415
#((quote hoge)) => #('hoge)

418 :はちみつ餃子 ◆8X2XSCHEME :2013/01/24(木) 08:06:59.79
Scheme48 が久々のバージョンアップ。

419 :デフォルトの名無しさん:2013/01/25(金) 01:07:34.70
Common Lispのloopマクロに相当するものが
Racketではforなんだね
しかしSUBSEQに相当するものが見当たらない
forで作れるからないのだろうか

420 :デフォルトの名無しさん:2013/01/25(金) 13:51:38.93
俺俺LISPは大量にあるけど俺俺SCHEMEはあまり無い気がする。

421 :デフォルトの名無しさん:2013/01/25(金) 13:54:28.25
lispとschemeの違いってなんですか?

422 :デフォルトの名無しさん:2013/01/25(金) 15:06:22.69
オレオレlispの間を埋めるのがscheme。

423 :デフォルトの名無しさん:2013/01/25(金) 15:12:10.17
黒板で殴り合うのがScheme
泥団子を投げ合うのがCommon Lisp
両方つかってキャットファイトがLisp

424 :SCHEME餃子 ◆8X2XSCHEME :2013/01/25(金) 18:28:28.20
>>420
Lisp には明確な定義がないから Lisp っぽければそれは Lisp で、「俺俺」な Lisp が存在できるけど、
Scheme は規格で決まってるものだからその実装は (拡張等で個性はあるにせよ) Scheme 処理系のひとつなわけで、
「俺俺」を付ける余地がない。

それは置くとしても Lisp ⊃ Scheme ということになってるので、
Lisp より Scheme の方が少ないのは当然っちゃ当然な話。

425 :デフォルトの名無しさん:2013/01/25(金) 23:15:03.89
>>421
クォートとエバル

426 :デフォルトの名無しさん:2013/01/26(土) 00:31:57.06
オレオレLisp は平和でいいじゃないか。オレオレCommon Lisp が沢山ある世界はヤバい。

427 :デフォルトの名無しさん:2013/01/26(土) 01:43:07.39
> クォートとエバル
クォートとは置いとくとして、最近エバったことはないな
関数読んできてコンパイルすることは結構あるが

428 :デフォルトの名無しさん:2013/01/26(土) 09:15:27.36
>>426
Cltl満たしてればいいんじゃね?
満たしてないとCommonじゃないわー

429 :デフォルトの名無しさん:2013/01/26(土) 12:36:26.05
scheme48って何が48?

430 :デフォルトの名無しさん:2013/01/26(土) 12:55:53.79
製作に要した時間。

431 :デフォルトの名無しさん:2013/01/26(土) 13:38:41.80
R7RSってまだファイナルにならないの?

432 :デフォルトの名無しさん:2013/01/26(土) 14:10:10.92
OSが30日で出来るらしいから48日もあればSCHEME処理系くらい出来るのか

433 :SCHEME餃子 ◆8X2XSCHEME :2013/01/26(土) 16:21:15.05
>>432
48 時間だよ。
http://s48.org/1.9/manual/manual-Z-H-2.html#node_chap_1

434 :デフォルトの名無しさん:2013/01/26(土) 16:47:29.45
R7RSが出たらR6RSは死ぬの?

435 :デフォルトの名無しさん:2013/01/26(土) 17:51:10.34
そんなこと言ってるとr6rs擁護派のはちみつさんに叩かれるぞ。

436 :デフォルトの名無しさん:2013/01/26(土) 18:06:23.84
R7RSはすこぶる評判が悪い気がする。

437 :デフォルトの名無しさん:2013/01/26(土) 18:11:17.87
R5RSは小さい、R6RSは実用/大きい、みたいなイメージあったけどR7RSはどんな感じ?

438 :デフォルトの名無しさん:2013/01/26(土) 19:13:04.54
不必要というイメージ

439 :デフォルトの名無しさん:2013/01/27(日) 04:00:36.24
>>438
クソ、こんなので…w

440 :デフォルトの名無しさん:2013/01/27(日) 04:40:13.87
一つにまとまらない時点で
標準なんて言えたもんじゃないよね

441 :デフォルトの名無しさん:2013/01/27(日) 08:07:29.92
R12cRS でクラウド対応するはず

442 :デフォルトの名無しさん:2013/01/27(日) 17:24:22.33
>>435
はちみつさんはr6rs好きなの?

443 :デフォルトの名無しさん:2013/01/28(月) 01:56:42.13
>>441
Schemeの仕様はもう十分、お腹いっぱい
Schemeの仕様を議論する暇があったら、SRFI実装のバグをなくして統一APIを拡充すべき

444 :SCHEME餃子 ◆8X2XSCHEME :2013/01/28(月) 09:31:43.23
何度も書いているような気がするけど、
ライブラリ (モジュール化) の仕組みを変えるのは無いわー。
ライブラリの中身はいくらでも議論すればいいと思うけど、
土台を変えるのはいかん。

445 :デフォルトの名無しさん:2013/01/28(月) 09:54:43.33
>>343
さっぱりわからん。
どうしてポインタと即値の区別が付けられるのか。

446 :デフォルトの名無しさん:2013/01/28(月) 10:08:58.91
だからポインタとか整数の前(あるいは後)にビットが付くんだって。
32ビットマシンなら、メモリやレジスタが36ビットだったりするわけ。

447 :はちみつ餃子 ◆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バイトは取れる計算になる。

448 :SCHEME餃子 ◆8X2XSCHEME :2013/01/28(月) 10:23:58.07
ちょっと訂正。 R6RS の fixnum は 24 ビット「以上」ってことになってる。

449 :デフォルトの名無しさん:2013/01/28(月) 13:15:10.05
>>447
> Gauche の場合はヒープオブジェクトは常に4バイト境界に配置することになっている

それだとオブジェクトの間にスキマが空いてメモリがもったいなくね
タグを使うためだけにそれだけ無駄にしてんの?

450 :デフォルトの名無しさん:2013/01/28(月) 13:15:49.42
>>447
てことは、下位2bitが0の数値はポインタorただの数値かわからないってことでOK?

451 :デフォルトの名無しさん:2013/01/28(月) 13:30:00.96
>>450
即値を格納するときは2bit左シフトして、タグのビットを立てるんだろ

452 :はちみつ餃子 ◆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

このグラフの数値は利用状況によって大きく変わり得るにしても、
大きい値より小さい値の方が頻出する傾向はまず変わらないと思う。

453 :デフォルトの名無しさん:2013/01/28(月) 13:33:15.93
>>449
いまどき、特殊な用途とかでも無い限り、4バイト境界配置の隙間を気にする奴なんていない

454 :デフォルトの名無しさん:2013/01/28(月) 13:47:23.72
こういうのってmatchマクロで実装するのでしょうか
(f '(a (b c)) '(1 (2 3)))
=> '( (a . 1) (b . 2) (c . 3))

455 :はちみつ餃子 ◆8X2XSCHEME :2013/01/28(月) 13:47:38.23
>>449
別途タグ用の領域を設けるとしたらその分だけメモリを消費しちゃうわけだし、どっちもどっちだろう。
値の大きさを32ビットに抑えればレジスタに乗るから速度的にも有利な可能性が高いし。
それと、オブジェクトの配置が境界に合ってた方がメモリアクセス速度も速い。
半端なところへのアクセスはCPUの内部的に二回に分けてアクセスすることになると聞いたことがある。

ただ、キャッシュに乗ってしまえば速度的なペナルティはなくなるとか、
色々と複雑な構造になってるらしいんで、性能的な面でどれが有利かは実際にやってみないとわからん。
既存の処理系がだいたい似たようなものってことは少なくとも実用上問題にならない程度なんだろ。

456 :デフォルトの名無しさん:2013/01/28(月) 14:07:35.78
>>451-452
なるほど、丁寧な説明ありがとうございます。

457 :はちみつ餃子 ◆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)))

458 :デフォルトの名無しさん:2013/01/28(月) 21:21:58.09
>>447
逆に上位ビットがゼロの場合に fixnum ってことにして、ポインタの場合に左シフトするって方針は有り?

459 :デフォルトの名無しさん:2013/01/28(月) 22:02:27.90
>>458
それでも構わないけど、プロセッサによっては上位タグ数bitをマスクする方がインストラクションが
増えることがあるんじゃない? 即値で#x7を持つのと#xe000000000000000を持つのじゃ前者の方が
短いことが多いでしょう。
fixnumとポインタしか無ければ、最上位の1ビットだけで区別できるから、レジスタ自身とandとって
サインフラグを見て分岐するって手があるけど。でもfixnumと分かった時に符号拡張するのめんどいな。

460 :デフォルトの名無しさん:2013/01/28(月) 22:54:50.60
いや、上位ビットが0であることをOSは保証してないんだから、ダメでしょ。
(MSBなら0というOSもあるかもしれないけど。)
64ビットならともかく32ビットはアドレス空間一杯なので上位ビットつぶすのは不利。

古文書によると大昔の68000とかCPUは上位8ビットがデコードされてなくて、
自由につかえたそこをタグに使った実装が多かったらしいけど。

461 :デフォルトの名無しさん: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 演算命令を
持ってるしね.

462 :デフォルトの名無しさん:2013/01/28(月) 23:34:31.69
そろそろビット関係の話は抽象化して仕様から隠してほしいです

463 :デフォルトの名無しさん:2013/01/29(火) 00:07:41.34
tagged-pointer 理解するときは、 consp とか numberp とかのプリミティブを
実装することを考えるといいよ。
1ワードのデータを受けとって、cons か number か判断できなくちゃいけない。
で、既に出てるけど、メモリ上には常にalignされていることを利用して、
下位2ビットを別の目的に利用する訳だ。
個人的にはこんなこと思いつく人は賢くて尊敬する。

464 :デフォルトの名無しさん:2013/01/29(火) 01:33:52.76
Lispマシンと互換できないような仕様は表に出さないでほしかったり

465 :はちみつ餃子 ◆8X2XSCHEME :2013/01/29(火) 08:25:17.54
>>458
fixnum の速度に特化するならそういう方針も駄目とは言えないけど、常識的には遅くなると思う。
GC ライブラリを使う場合はその都合に合わせなきゃ駄目だしなぁ。

466 :デフォルトの名無しさん:2013/01/29(火) 08:43:45.62
このスレは年寄ばっかだな

467 :デフォルトの名無しさん:2013/01/29(火) 13:11:47.65
処理系にそういう工夫があるのはわかった。
処理系のユーザー側として性能のよいプログラムを書く重点ポイントとかある?

468 :デフォルトの名無しさん:2013/01/29(火) 18:22:51.16
>>467
典型的で素直な再帰、末尾再帰を中心にしてプログラムを書くとコンパイラが最適化
しやすいと思う。

469 :はちみつ餃子 ◆8X2XSCHEME :2013/01/29(火) 21:32:12.91
末尾呼出の最適化は規格で決まってることだから要するに積極的に活用しろってことだよね。

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

あとは GC の発生頻度を低くするのが定石かな。 一端確保したオブジェクトを使い回すとかして。
GC は割と重い処理なんだよ。
但し、「GC の発生頻度を低く」ばかりを意識していると「典型的なパターン」からずれてしまうこともあるので、
そのあたりのバランスは様子を見ながら。

470 :はちみつ餃子 ◆8X2XSCHEME :2013/01/29(火) 22:03:55.77
ナイーブな GC はメモリが足りなくなったときに発動して、
それでも足りなければ領域を伸ばすという方法を取る。
(どの程度伸ばすのが良いかは諸説ある。)

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

いずれにせよ、まずは処理系のクセを把握することが必要。

471 :デフォルトの名無しさん:2013/01/29(火) 22:11:01.67
そこまで気にして作る物って何があるの?
大抵の物は末尾再帰じゃなくても十分だと思うけど

472 :デフォルトの名無しさん:2013/01/30(水) 00:53:41.93
miniKanrenとOn Lispのbindなんとかマクロ群が同じなことに気がついてしまった
車輪の再発明だったのか

473 :デフォルトの名無しさん:2013/01/30(水) 01:34:15.55
>>462
同意

474 :デフォルトの名無しさん:2013/01/30(水) 01:43:01.91
>>471
他言語だけど、携帯のプログラムの受注でGCとメモリ管理の職人芸が必要になった
schemeでスマホか携帯のアプリを作ってる人がいるのだろうか

475 :デフォルトの名無しさん:2013/01/30(水) 03:40:46.25
>>471
「大抵の物」がどういう範囲を見てるのか気になる。まっすぐ並んでるデータをナイーブに
再帰すると深さはO(n)だろ。非末尾再帰だとn=10^5〜10^6くらいで大抵の処理系は何らかの
壁に当たらないか? (クラッシュしないまでも、スタックGCが頻発して性能ががくんと落ちるとか)。
Clojureみたいに遅延シーケンスでの再帰なら別だが。

476 :デフォルトの名無しさん:2013/01/30(水) 07:55:04.15
>>469
話題をぶった切ってすまんが、最適化するのは末尾再帰じゃなくて末尾呼出なのか?

477 :デフォルトの名無しさん:2013/01/30(水) 08:12:23.23
「呼び出し」は「再帰」を含むよ

478 :デフォルトの名無しさん:2013/01/30(水) 08:28:42.83
>>477
いや、それはわかるんだが、規格でそこまで求めてるのかってこと。

479 :はちみつ餃子 ◆8X2XSCHEME :2013/01/30(水) 09:02:16.96
「適切に末尾再帰せよ」と要求していて、その後の「アクティブな末尾呼出の回数に制限がないなら適切に末尾再帰している」で適切な末尾再帰とは何かを定義している。
よって末尾呼出の回数を無制限にせよというのが実質的な要求だと俺は理解してるけど、それでいいよな?

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

末尾文脈での呼出しのときにリターンアドレスをプッシュしないっていうだけの簡単なことを無駄に複雑にする必要はない。

480 :デフォルトの名無しさん:2013/01/30(水) 11:20:13.20
>>479
俺もそう理解している。
名称を "properly tail-recursive" としながら
その実 "tail call" についての要求しかしてないのが混乱の元だと思う。

> っていうか、実装者の気持になって考えると、末尾再帰の場合だけ最適化っつー方が難しいだろ。
r6rs では大分マシになったよね。
export された識別子の束縛は変更不能だし、
export されてない識別子ならコンパイル時に判定可能だし、
REPL もなくなったし。
色々文句はあるだろうけど。

481 :デフォルトの名無しさん: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. なんて一節がある。

482 :デフォルトの名無しさん:2013/01/30(水) 14:09:09.61
define-structやdefine-classをdefine-record-typeに統一するなら
C++みたいにスタックやキュー等のコンテナを標準ライブラリにいれて欲しい

483 :はちみつ餃子 ◆8X2XSCHEME :2013/01/30(水) 15:31:52.56
>>480
だよなぁ。
R6RS のライブラリの分量が多くなってるのはともかくとして、
方針としては処理系を作り易い方向に振ってるよな。
レコードも筋が悪いと言われつつも実装が楽な方に流れちゃったし。

484 :デフォルトの名無しさん:2013/01/30(水) 23:25:52.55
>>483
もっとくやしく

485 :デフォルトの名無しさん:2013/01/30(水) 23:32:20.15
仕様を書き換えるなら、そのままの形で論文に引用しても文句言われないような書き方にしてほしいです

486 :デフォルトの名無しさん:2013/01/31(木) 00:14:19.35
>>190
だいぶ古い話かもしれんがVAIO Pは女の子のジーパンのポケットに
入ることが売りだったよ。

487 :デフォルトの名無しさん:2013/01/31(木) 00:58:46.49
お前は何を言っておるのだ

488 :デフォルトの名無しさん:2013/01/31(木) 01:22:00.47
100% scheme on scheme の処理系ってあるでしょうか
scheme -> C のトランスレータを作ってるので、上手くいけば smalltalk みたいな自己完結する環境できるかもしれないので

489 :はちみつ餃子 ◆8X2XSCHEME :2013/01/31(木) 09:34:55.67
>>484
だよなぁ。
R6RS のライブラリの分量が多くなってるのはともかくとして、
方針としては処理系を作り易い方向に振ってるよな。
レコードも筋が悪いと言われつつも実装が楽な方に流れちゃったし! (# ゚Д゚) ムッキー
( `Д´)フォオオオオオオオオオ!

490 :デフォルトの名無しさん:2013/01/31(木) 10:01:46.48
>>489
ちがうちがう。
もっとくやしくおながいします。

491 :はちみつ餃子 ◆8X2XSCHEME :2013/01/31(木) 10:17:30.89
だよなぁ。
R6RS のライブラリの分量が多くなってるのはともかくとして、
方針としては処理系を作り易い方向に振ってるよな。
レコードも筋が悪いと言われつつも実装が楽な方に流れちゃったし!!! (ノ#`Д´)ノ⌒┻━┻
ヽ(`(`(`(`ヽ(`Д´)ノ ファ・フォァ・フワォオオオオオオオオオオオン!!

492 :デフォルトの名無しさん:2013/01/31(木) 13:46:38.02
処理系を作りやすい方に振ったにしては既存の処理系開発者にはR6RS反対派も多いと聞く。

493 :デフォルトの名無しさん:2013/01/31(木) 15:54:44.14
末尾再帰はともかく、それを満たしつつ多値って、
スタック1本で実装しようとすると難しいと思うんだけど
schemeだと多値(というか戻り値)専用のスタックを別に用意するしかない?

494 :はちみつ餃子 ◆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が好きな 人々には不評なんだけど、
> コンパイラ作者にとってはそれなりに納得のゆく選択であることが多い。

495 :デフォルトの名無しさん:2013/01/31(木) 17:05:47.77
evalとの確執

496 :デフォルトの名無しさん:2013/01/31(木) 21:22:29.96
仕様がそちらへ向かうというのは、schemeに対しては効率面の需要が多いということなのかな?

497 :デフォルトの名無しさん:2013/01/31(木) 21:35:40.42
速いにこしたことないじゃん
だったら動的型なんてやめろって思うけど

498 :デフォルトの名無しさん:2013/01/31(木) 22:56:49.28
>>497
だったらSMLでいいんじゃね。

499 :デフォルトの名無しさん:2013/02/01(金) 00:37:40.54
みんなは継続理解できて使えてる?
俺は理解できてるつもりだけどcall/ccがいまいち分からん
contが沸いて出てきてなにがなんだか

500 :デフォルトの名無しさん:2013/02/01(金) 01:56:45.27
call/cc で常に1引数の関数を渡すだけでOKというのが理解できるかどうかが鍵かと…

501 :デフォルトの名無しさん:2013/02/01(金) 02:16:07.35
R6RSはJVMの上で動く言語としては実装できないという衝撃的な現実

502 :デフォルトの名無しさん:2013/02/01(金) 02:25:33.59
>>501
なぜ? 効率考えなければできるんじゃない?

503 :デフォルトの名無しさん:2013/02/01(金) 03:22:19.06
効率について指定されてんじゃないの?
しらんけど

504 :デフォルトの名無しさん:2013/02/01(金) 07:37:33.05
tail callがどうしても不可だからって話じゃないの<<clojureとか

505 :はちみつ餃子 ◆8X2XSCHEME :2013/02/01(金) 10:37:46.06
ホスト環境のスタックを使うと末尾呼出最適化できないという問題はあるけど、
スタックを扱うクラスを自前で作れば大丈夫だよ。
効率は悪いけど不可能というわけじゃない。

506 :はちみつ餃子 ◆8X2XSCHEME :2013/02/01(金) 10:44:08.44
>>496-497
速度の需要はあるよ。 Scheme に限らず他の Lisp でもね。
ただ、 Scheme のアプローチの仕方が伝統的な Lisp とは違うという話。

CL では、逆アセンブラやプロファイラや型宣言といった
「道具」を用意してプログラマに頑張ってもらうという方向で
速度の需要を満たしてるわけだが、
Scheme の場合はそんなダサいことやってないで
コンパイラで最適化を頑張ろうぜっていう方向という違い。

507 :デフォルトの名無しさん:2013/02/01(金) 11:01:36.16
頑張っているのか分からない程度の最適化だよね

508 :デフォルトの名無しさん:2013/02/01(金) 11:20:21.76
Stalin並の最適化をするモダンなScheme実装が求められる

509 :デフォルトの名無しさん:2013/02/01(金) 11:59:53.84
ゴルバチョフって名前は、まだ勝手に使ったら怒られそうだなw

510 :デフォルトの名無しさん:2013/02/01(金) 14:34:38.01
いつプー様の名前のSchemeが出るか楽しみだなw

511 :はちみつ餃子 ◆8X2XSCHEME :2013/02/01(金) 15:42:11.56
>>495
eval もよくわかんないんだよな。 eval に渡せるのは datum value ってことになってるけど、
いっそ返却値も datum value に制限してしまえばもう少し作り易くて使い易いものになったと思うんだよ。
実行中のプログラムと eval の中の環境が混ざらないように出来るから。
Google Chrome の JavaScript で別プロセスとパイプで通信するときはシリアライズ可能な値しか送れないことになってるじゃん?
あんな感じ。

それと environment もゼロ引数を許すのは何の意味があるのかわからん。

512 :デフォルトの名無しさん:2013/02/01(金) 17:05:46.10
>>511
なってるじゃん? とか言われても。

知らんがな。

513 :デフォルトの名無しさん:2013/02/01(金) 21:47:00.30
>>511
大学の演習で scheme on scheme を作るのに必要な仕様だから我慢してもらわないと…

514 :デフォルトの名無しさん:2013/02/01(金) 23:39:46.19
マイナーな寄生型lisp系言語が、徐々に寄生先を増やしてる
http://shenlanguage.org/news.html
https://github.com/hraberg/Shen.java

515 :デフォルトの名無しさん:2013/02/01(金) 23:47:56.07
lispのコードをそのままコピペできない言語をlisp系と呼ぶのはやめてほしいです

516 :デフォルトの名無しさん:2013/02/01(金) 23:51:37.88
lispのコードをそのままコピペできるなら、それはlisp系でなくlispだろう。

517 :デフォルトの名無しさん:2013/02/02(土) 00:30:44.05
shenはカリー化とパターンマッチがちょっと面白かったけどそれだけだった

518 :デフォルトの名無しさん:2013/02/02(土) 01:30:41.90
lispのコードをそのままコピペできない言語をlisp系と称してわざわざ開発するということは、lispのどこかに失敗点があるということだろうか…

519 :はちみつ餃子 ◆8X2XSCHEME :2013/02/02(土) 08:36:54.11
>>515
Lisp のコードって何よ

520 :デフォルトの名無しさん:2013/02/02(土) 11:08:46.15
論文にあるやつ

521 :デフォルトの名無しさん:2013/02/02(土) 11:12:48.77
lisp系は関数定義がdefunだったりdefuncだったり、コピーしただけじゃ動かない程度の
非互換は日常茶飯事。

522 :デフォルトの名無しさん:2013/02/02(土) 11:25:31.71
Ypsilonで(car'(1 2))がエラーになるのですがバグでしょうか。

523 :はちみつ餃子 ◆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 のバグではない。 そういう仕様。

524 :デフォルトの名無しさん:2013/02/02(土) 16:08:53.50
Haskellでも末尾がクォートの名前はよく使うな。
schemeの最近の習慣じゃ頭に%を付けるみたいだが。

525 :デフォルトの名無しさん:2013/02/02(土) 19:29:11.83
>>519
大学の演習でつくったlispプログラムのソースコードの断片

526 :デフォルトの名無しさん:2013/02/02(土) 23:26:57.83
>>524
どちらもユーザに直接触ってほしくないという点では同じかもしれないけど、Haskellなんかのクオートが補助的な関数であることを表してるのに対して、Lisp系の%は内部的な定義であることを表してて意味が違うと思う。

527 :デフォルトの名無しさん:2013/02/03(日) 01:33:19.20
>>523
関連の話題
http://chaton.practical-scheme.net/gauche/a/2010/05/20#entry-4bf4bb60-d191f

528 :349:2013/02/03(日) 11:04:04.24
で、最速の処理系がどれか結論出た?

529 :デフォルトの名無しさん:2013/02/03(日) 11:20:37.68
>>470
再配置しないタイプのGCはそういう状況で効率悪そうだ

530 :デフォルトの名無しさん:2013/02/03(日) 15:56:36.70
餃子の一番のお勧め処理系はどれ?

531 :はちみつ餃子 ◆8X2XSCHEME :2013/02/03(日) 17:56:22.32
用途によるんだっての。 処理系のトレードオフと用途のトレードオフがマッチするやつを選べよ。

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

好きな処理系ってことなら最近は Sagittarius かなぁ。 なんとなくバグが多いような気がしてたんだけど、
修正の経過を積極的にブログに書いてあるからそう錯覚してただけなんじゃないかと思って、ちゃんと見たら結構良かった。
日常的に使いそうなライブラリがひと通り入ってて、これまで Gauche で書いてたものも簡単に移植できそう。
リリースサイクルが定期的、しかも一月ごとという短いサイクルなのも、どんどん改良されている感じがして良い。

532 :デフォルトの名無しさん:2013/02/03(日) 19:10:38.35
>>517
http://sandycat.info/blog/deptypes-shen/
http://goto.ucsd.edu/~ravi/research/djs/
ここら辺の型システムもJITの型推論と違って、
速度最適化に結びついて無いんだよな。

533 :デフォルトの名無しさん:2013/02/03(日) 19:11:42.46
携帯用の処理系作れ

534 :デフォルトの名無しさん:2013/02/03(日) 23:10:58.33
> だって英語あんまりわからんし。
RnRSも日本語訳されなきゃ読めないの?
全然だめじゃん

535 :デフォルトの名無しさん: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

536 :デフォルトの名無しさん:2013/02/03(日) 23:54:34.14
クオートは個人的にはすごくヤです、null並に。

537 :デフォルトの名無しさん:2013/02/04(月) 01:38:00.66
BiwaSchemeでCodecademyのようなプログラミング学習サイトを作れるかな

538 :デフォルトの名無しさん:2013/02/04(月) 01:44:05.21
define-record-typeが任意の新しい型を生成できるせいで
型推論作ろうとすると、かなりめんどくさくないか?

539 :デフォルトの名無しさん:2013/02/04(月) 04:23:54.45
本質的にはベクターの各要素を名前で扱えるようにしただけだよ
ただのコンテナ

540 :はちみつ餃子 ◆8X2XSCHEME :2013/02/04(月) 08:47:15.84
>>534
駄目だよ。

541 :はちみつ餃子 ◆8X2XSCHEME :2013/02/04(月) 10:33:56.47
>>533 >>535
Racket も忘れないで。 >>403

542 :デフォルトの名無しさん:2013/02/04(月) 13:55:21.95
syntax-case はクソ。 意味不明すぎ。

543 :デフォルトの名無しさん:2013/02/04(月) 14:42:54.29
iPod touchでも動くかな?

544 :デフォルトの名無しさん:2013/02/04(月) 16:20:29.53
Lispが嫌いって人って食わず嫌いだと思うのだけど、Lispスレ住人の意見ってどんな感じ?
;;;過去ログで同じ問答あったらポインタ希望

545 :デフォルトの名無しさん:2013/02/04(月) 18:05:23.16
>>542
何を今更。

546 :はちみつ餃子 ◆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 は「自由」
であるというのが結論なんだけど、自由であるってのは欠点でもあ
るんだよね。 統制が取りにくいのでチーム開発に向いてないとかいっ
た問題はよく指摘されている。

547 :デフォルトの名無しさん:2013/02/04(月) 19:52:02.70
餃子は長文好きだな

548 :デフォルトの名無しさん:2013/02/04(月) 21:20:31.24
CourseraとかUdacityとかEdX見てると
もうみんなPythonなんだよな
Lispなんて誰も使ってない

549 :デフォルトの名無しさん:2013/02/04(月) 22:41:37.21
Commmon Lispのdefmethod
に相当するものってschemeにはないの?

550 :デフォルトの名無しさん:2013/02/04(月) 22:41:39.97
schemeを先に習うと、lispが汚く見える

551 :デフォルトの名無しさん:2013/02/04(月) 22:50:01.97
Scheme手洗い

552 :はちみつ餃子 ◆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 を移植したのではうまくないと考えられている。

553 :デフォルトの名無しさん:2013/02/05(火) 00:19:02.57
GaucheのCLOSはもどきだったのか…

554 :デフォルトの名無しさん:2013/02/05(火) 07:18:41.98
そもそもCLじゃない。

555 :はちみつ餃子 ◆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 って付けちゃってるけどな。

556 :デフォルトの名無しさん:2013/02/05(火) 08:44:10.47
schemeってせっかく仕様があるのに、
見てると主義主張が別れすぎてて選び辛くない?
しかも標準じゃ物足りない分処理系ごとの拡張が多くて
CommonLisp以上に汚れて見える

557 :デフォルトの名無しさん:2013/02/05(火) 09:02:32.13
それがむしろLisp的というか。

Common LispはLispのそういうところをなくしましょうということで、
巨大な仕様を作ったわけだから。

558 :デフォルトの名無しさん:2013/02/05(火) 19:35:07.68
LISPは仕様があるからポータブルです! というのは一種の冗談だよな

559 :デフォルトの名無しさん:2013/02/05(火) 21:04:59.65
CommonLispはCL-USERの名前空間に関数がんがん突っ込んであるから巨大って言われるけど
他言語のモジュールも含めて比較してやれば小さいほうなんじゃないの?

560 :デフォルトの名無しさん:2013/02/05(火) 21:41:11.68
実際に数えて比較してから言ってくれ

561 :デフォルトの名無しさん:2013/02/05(火) 21:44:59.76
>>556
拡張部分はschemeではない
schemeとはあくまでもRxRSだけだ

ゆえにschemeの拡張部分が汚いという主張は、バカ学生が作ったコードが汚い、と同レベルの主張でしかない

562 :デフォルトの名無しさん:2013/02/05(火) 22:27:32.41
>>556
同意。巨大で不格好なCLより、
美しいハズの scheme の方が独自機能で汚くみえるときがある。皮肉だ。

563 :デフォルトの名無しさん:2013/02/05(火) 22:28:57.41
>>561
煽りじゃなく素朴な疑問なんだが、rnrs だけで現実的なプログラム書けるのか?

564 :デフォルトの名無しさん:2013/02/05(火) 22:47:19.94
>>563
既存ライブラリを再発明せずに、という意味なら現実的ではない。
Schemeに限らないけどな。

565 :はちみつ餃子 ◆8X2XSCHEME :2013/02/05(火) 22:56:19.69
Scheme には色々と足りてない。
Scheme の仕様は議論の土台となるべく、ある程度の合意が取れた部分だけを固めたもの。
つまり、 Scheme の仕様は言語のあるべき姿の一部に過ぎなくて、
しかもその一部は「ある程度の合意がとれるくらいには充分に出来の良い部分」なわけ。
綺麗に出来たところだけを抜きだして綺麗だって主張も馬鹿馬鹿しいと思うよ。

結局、 Scheme の綺麗さっていうのは汚い部分を未定義にしてるだけなので、実用のためには汚い部分を補う必要がある。
(将来的にはそれも綺麗な形に整理されることは有り得るけれど。)
Scheme の仕様は拡張を前提としているところがあるので、主要な拡張を議論の題材にするのは有りだと思う。

566 :デフォルトの名無しさん:2013/02/05(火) 23:08:24.73
>>560
python とか ruby とか java とか haskell とかだと,
言語をインストールした時点で含まれているライブラリの API 数は
「なにこれ? へそが茶沸かすじゃん > CLの仕様」
ってくらい数あるよな?

567 :デフォルトの名無しさん: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

568 :はちみつ餃子 ◆8X2XSCHEME :2013/02/05(火) 23:24:31.84
Ruby の規格ってことなら JIS のはかなり小さいけどな。
最新仕様と言えるのは RubySpec なのかなぁ?

「仕様」って何よってところから思想の違いがあるような気がするので、
公平な比較ってかなり難しくない?

569 :デフォルトの名無しさん:2013/02/05(火) 23:30:47.91
仕様を最小限満たすインタプリタなどを作っているときのデバッグでは、仕様に無いオペレーターが欲しくなる。

570 :デフォルトの名無しさん:2013/02/05(火) 23:46:12.73
「言語の使用」と「実装の仕様」があって、「言語の仕様」は美しいけどさほど実用的でははなく、
「実装の仕様」は実用的かもしれないけど別に美しくないし互換性も時々ない、とかいうのは、
論理的にはいいんだろうけど、なんだ、その、めんどくさい

どの言語でも大なり小なりそういうのあるけどさぁ……

571 :デフォルトの名無しさん:2013/02/06(水) 01:11:13.72
面倒臭いなら実装=仕様な言語を使えばいいじゃない
俺はごめんだけどな

572 :デフォルトの名無しさん:2013/02/06(水) 02:13:04.88
gaucheのdefine-method
racketのdefine/public

統一してほしいなあ

573 :デフォルトの名無しさん:2013/02/06(水) 02:37:57.20
言語仕様そのものの部分と拡張部分やAPIは完璧に分離すべき
理由は、コーディングの際に明確に両者を分離できないと、論文で「schemeで…」と書くと嘘になってしまうから

574 :デフォルトの名無しさん:2013/02/06(水) 18:21:54.78
Common Lispの仕様が大きいってのは制定当時の話。

575 :デフォルトの名無しさん:2013/02/06(水) 18:38:49.09
RnRSの範囲だけでSRFIが実装できるならSRFIは完全分離できるのに
実際は処理系毎にSRFIの実装を強いられてるのはなぜか

576 :デフォルトの名無しさん:2013/02/06(水) 19:28:47.89
>>575
そもそもRnRSの範囲だけでSRFIは実装できない

577 :デフォルトの名無しさん:2013/02/06(水) 19:33:48.42
RxRSで実装できない部分はいったい何と呼べばいいのだろうか

578 :デフォルトの名無しさん:2013/02/06(水) 20:27:20.83
処理系で拡張する時のガイドラインのようなもの?

579 :デフォルトの名無しさん:2013/02/06(水) 22:10:46.53
>>573
EuLispは真面目にやろうとていたのにね。

580 :はちみつ餃子 ◆8X2XSCHEME :2013/02/07(木) 00:48:22.99
>>573
だからモジュール化の仕組みが重要視されていた。
R6RS でようやくライブラリという名前で制定されて、import を除く全ての語彙は何らかのライブラリに属すようになった。
ライブラリシステムはライブラリ同士が干渉や衝突を起こさないように (避けられるように) 慎重にが設計されている。
これを土台にして様々な拡張をくっつけられるようになってるわけ。

なのに R7RS ではライブラリの仕組を変更しようとしてるから、
ライブラリの中身はともかく土台の部分を変えるのはなんだかなーという感じがしてる。

581 :デフォルトの名無しさん:2013/02/07(木) 01:45:10.66
>>576
え、これマジなの?
マジだとしたらいくらなんでもヒドすぎないか?仕様がおかしいか、SRFIがおかしいか、どっちかだろ

582 :デフォルトの名無しさん:2013/02/07(木) 05:56:38.32
>>581
srfi-49をrnrsの範囲で実装してみろよオラ

583 :デフォルトの名無しさん:2013/02/07(木) 06:36:38.46
>>582
>srfi-49をrnrsの範囲で実装してみろよオラ
いや実装してみろよ、と言われても困るんだが…
もしRNRSでそれが実装できないのなら、そんなものがSRFIに入ってるのは何かおかしくないか?、と言うのがおれの主張だよ。

584 :デフォルトの名無しさん:2013/02/07(木) 06:54:16.04
>>583
srfi-49は特に顕著だから挙げたけど、srfiの中にはリーダーの拡張とか仕様を越えた変更を加えるものも少なくないよ
そもそもsrfiは単なるライブラリじゃなくて、その名の通り実装に対する拡張なんだし、それの何がおかしいのか全くわからん

585 :デフォルトの名無しさん:2013/02/07(木) 11:50:32.13
srfiには仕様の実験場みたいな意義もあるよ。srfiで新しい仕様を試してみて、
うまくいったらrnrsに取り込もう、っていうような。単なるライブラリとは違う。
どっちかというと、RFCが出る→みんなで実装→生き残ったやつがSTD、っていう流れに
近いんじゃないか。

586 :デフォルトの名無しさん:2013/02/07(木) 12:02:03.28
ただその仕様への取り込みは基本的に行われない。
コミュニティ的にもそれで特に困ってないし。
Javascript並みに開発者増えたら、裾野が広がったら、今のままでは困るだろうけど。
コミュニティが小さく人的リソースが少ないのだからこんなもんだ。
やるべきだと思う人はMLで議論始めればいいじゃね?
俺は今のままでいいや。
そんな感じの小さいコミュニティ。

587 :はちみつ餃子 ◆8X2XSCHEME :2013/02/07(木) 12:58:11.02
そのまま取込まれたわけじゃないけど、
R6RS の文字列ポートや syntax-case は SRFI を元にしてるかなぁ。
r6rs-rationale に SRFI との関係が書いてあるよ。

588 :デフォルトの名無しさん:2013/02/07(木) 15:28:45.81
そもそも言語仕様の役割は処理系ごとの独自仕様の差異を減らすことだと思うんだがな

589 :デフォルトの名無しさん:2013/02/07(木) 16:52:47.23
>>588 仕様の役割については色々な考え方がある。Schemeの場合は、プログラムそのものの交換よりも、
新しい計算の抽象化を考えたけどどうよ、みたいな議論の共通言語として使いたい、って色が
強いんじゃないかな。最近はどうかわからんけど。
だから仕様を大きくするよりは、意味論をフォーマルにしとこうぜ、みたいな話の方がみんな喰い付く。

590 :デフォルトの名無しさん:2013/02/07(木) 18:56:21.82
食いつくほど人がいれば→R6RS→R7RSみたいな事にはなってないでしょ。
人がいるJavascriptは拙速気味のECMAScript4をちゃんと食い止めてる。
騒ぐのは気力、体力がいるからね。

591 :はちみつ餃子 ◆8X2XSCHEME :2013/02/07(木) 19:55:22.36
機能には相互関係がある。

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

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

Scheme が議論の土台だというのはわかっているけど、
その土台は案外大きいかもしれないというのが私の考えで、
R6RS に好意的な理由でもある。

592 :デフォルトの名無しさん:2013/02/07(木) 21:51:06.45
gaucheが1.0になったら始めようと思って5年が過ぎた

593 :デフォルトの名無しさん:2013/02/07(木) 21:57:41.86
うんこ仕様のR6RS使うくらいなら一生R5RS使うわ

594 :はちみつ餃子 ◆8X2XSCHEME :2013/02/07(木) 22:04:18.79
>>593
問題点があると思っているならそれを言ってくれないと発展性がないぞ。

595 :デフォルトの名無しさん: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

596 :デフォルトの名無しさん:2013/02/07(木) 22:36:52.15
CommonLispやろうず

597 :はちみつ餃子 ◆8X2XSCHEME :2013/02/07(木) 22:50:26.41
ヤダ。

598 :デフォルトの名無しさん:2013/02/07(木) 23:08:59.62
>>582
SxRS公理系は原始帰納関数より刑さん能力が低いのか、SRFI49は原始帰納関数では計算不可能なのか

599 :デフォルトの名無しさん:2013/02/07(木) 23:29:14.32
>>598
仕様読んだこともないんだから口はさむな。

600 :デフォルトの名無しさん:2013/02/08(金) 00:37:59.49
srfi が何か難しいものってのはわかった。じゃあ、rnrs で使えるライブラリ集みたいなのは他にないの?

601 :はちみつ餃子 ◆8X2XSCHEME :2013/02/08(金) 00:55:32.21
R6RS で書ける範囲で SRFI を実装したものならある。
R6RS でポータブルに実装するのが不可能なものとかは除かれてるけど。
https://code.launchpad.net/~scheme-libraries-team/scheme-libraries/srfi

602 :デフォルトの名無しさん:2013/02/08(金) 01:36:34.35
つか、ネットワークとかのハード依存の部分はおいておいて、そもそもR6RSで書けない範囲って何なの

603 :デフォルトの名無しさん:2013/02/08(金) 03:14:47.73
schemeで巨大なプログラム組んだ事あるけど
name spaceで分けれなかったり
define-methodつかって型で分けれなかったり
するのつらかった

604 :はちみつ餃子 ◆8X2XSCHEME :2013/02/08(金) 07:57:27.40
>>602
SRFI-49 や SRFI-10 や SRFI-88 のようなリーダの拡張を要するものとかかな。
プリプロセッサ的なものでどうにかできなくもないけど、それはちょっと違うしなぁ。

SRFI-37 や SRFI-98 も無理っしょ。
先程 >>601 で紹介したライブラリでは場合分けして処理系が提供する機能を使って
実装しているけど、ポータブルな方法は無いはず。

605 :はちみつ餃子 ◆8X2XSCHEME :2013/02/08(金) 08:24:18.31
R7RS の ドラフト 9 が出たよー

606 :デフォルトの名無しさん:2013/02/08(金) 08:28:34.47
で、最速の処理系はどれか結論でたか?

607 :デフォルトの名無しさん:2013/02/08(金) 11:49:50.01
R5RS仕様書勉強会とか誰か開いてくれー。

608 :はちみつ餃子 ◆8X2XSCHEME :2013/02/08(金) 12:38:17.24
>>607
意味論の話ならこれが参考になるかも。
http://lambda.bugyo.tk/hatena/r5rs.html

609 :デフォルトの名無しさん:2013/02/08(金) 13:01:50.93
絶望的に意味不明だぜ!!

610 :はちみつ餃子 ◆8X2XSCHEME :2013/02/08(金) 14:01:58.06
大人がジャイロゼッターを見るんじゃありません。

611 :デフォルトの名無しさん:2013/02/08(金) 17:01:25.68
澪「タハハ 意味不明ゾ」

612 :デフォルトの名無しさん:2013/02/08(金) 17:21:39.18
>>610
リンネがかわいいからしゃあねえだろ。

613 :デフォルトの名無しさん:2013/02/08(金) 18:06:39.16
処理系立ちまくりだし
どれも伸びてないな
R6RSだけじゃなくてR7RSも
Clojureも
チェックしきれないゾ

614 :デフォルトの名無しさん:2013/02/08(金) 18:24:27.11
処理系作りやすいのが売りですから
もちろん完成度は別にして

615 :デフォルトの名無しさん:2013/02/08(金) 21:06:22.68
Land of Lisp って Schemer が読んでも役に立つような内容?

616 :デフォルトの名無しさん:2013/02/08(金) 21:50:52.26
ワロタwww

http://www.oreilly.co.jp/books/9784873115870/

617 :デフォルトの名無しさん:2013/02/08(金) 21:58:18.37
キターーーーーーーーーーー!

618 :はちみつ餃子 ◆8X2XSCHEME :2013/02/08(金) 21:59:29.36
R6RS は静的解析しやすい仕様っていう話を >>494 に書いたけど、
Sagittarius も未束縛変数の検出を厳密にするように変更したみたいだ。
いいネ!!

619 :デフォルトの名無しさん:2013/02/08(金) 22:02:54.90
>>616
これはないわー。劣化しすぎ
http://nostarch.com/sites/default/files/imagecache/product_full/lisp.png

ついでに
http://nostarch.com/realmofracket

620 :デフォルトの名無しさん:2013/02/08(金) 22:20:22.40
HaskellのすごいHに対抗して出したのだろうか…

621 :デフォルトの名無しさん:2013/02/08(金) 23:52:30.55
これがオライリー書架の中にあったらひときわ浮くなwww

622 :デフォルトの名無しさん:2013/02/09(土) 00:06:51.32
オライリーはリリカルLispのパロディ本を蛸壺屋に書かせるべき

623 :はちみつ餃子 ◆8X2XSCHEME :2013/02/09(土) 00:14:05.84
>>619
オライリーの定型と組合わせるからネタとして面白いんじゃないか。

624 :デフォルトの名無しさん:2013/02/09(土) 00:15:50.33
俺が中学生だったら絶対に興味持つね。

625 :デフォルトの名無しさん:2013/02/09(土) 00:21:59.43
読者層ってやっぱプログラミング経験者なんだろうか。

626 :デフォルトの名無しさん:2013/02/09(土) 01:07:23.71
>>623
そういう評価もわかるけど
原著の表紙は毒々しい紫と緑の配色にしっとりした手触りの艶消しビニール
裏地は表紙のスライムに合わせた緑色の紙が貼ってあって
なんともこだわりを感じさせる装丁に仕上がっていたんだよ
それをオライリーの定型的なフォーマットに押しこめたら残念感のほうが強い

でもネタ切れ感の強い動物ではなくリスプエイリアンを持ってきたことは評価すべきか

627 :デフォルトの名無しさん:2013/02/09(土) 01:27:35.20
オーム社で出したすごいHaskellは違和感なかったけど、
この表紙はオライリーという動物園に入れられたのかw

628 :デフォルトの名無しさん:2013/02/09(土) 01:50:05.93
>>607
> R5RS仕様書勉強会とか誰か開いてくれー。
どういう勉強会がお望みなの?

629 :デフォルトの名無しさん:2013/02/09(土) 07:37:06.97
>>626
なるほど。でもおれは今のでも好きだ。「lispなんかヤバイ」感がでてる。

clojure本の第二版も出るようだし、lisp 始まったな!

630 :デフォルトの名無しさん:2013/02/09(土) 08:57:27.57
阿澄佳奈は何故にLand of Lispの宣伝をしないのか

631 :デフォルトの名無しさん:2013/02/09(土) 11:50:42.77
http://www.oreilly.co.jp/books/images/picture_large978-4-87311-587-0.jpeg
うーん、キモい

632 :デフォルトの名無しさん:2013/02/09(土) 19:24:22.75
もっとも古い言語だからもっとも進化してしまった

633 :デフォルトの名無しさん:2013/02/09(土) 20:19:45.91
Amazon.comでなか見すると英語が平易っぽいので原著で読もうかな。

しかし、史朗さんの翻訳も読んでみたい。

634 :デフォルトの名無しさん:2013/02/09(土) 20:25:32.59
入門しようと思って来てみたんだけどGCに抵抗ある。
C++を使ってたから開けたら閉めるの感覚が染み付いてるし、
勝手に動いて動作速度の足を引っ張る気がして。

635 :デフォルトの名無しさん:2013/02/09(土) 20:29:53.19
GC使いは速度が必要なところでのみ開けたら閉めるをやるか、もしくは開け閉めが要らないように作ります

636 :はちみつ餃子 ◆8X2XSCHEME :2013/02/09(土) 20:37:40.17
>>634
GC の種類や、それで何をするかにもよる。

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

要は GC の特性を理解して書けばむしろ性能が上がる場合もあるってこと。

637 :デフォルトの名無しさん:2013/02/09(土) 20:58:48.67
メモリ管理みたいな低水準なことをプログラマに考えさせるな!!!!

638 :デフォルトの名無しさん:2013/02/09(土) 21:09:14.84
低水準なこともかんがえたいなら CL がいいんじゃないかな。
dynamic-extent 便利だよ。エクステントを明示することで、
指定したオブジェクトをスタック上アロケートされてGCいらず。

639 :デフォルトの名無しさん:2013/02/09(土) 21:39:15.08
>>634
速度が重要な部分では、>>635が言うようにアロケーションが入らないようにしたり、
>>638が言うようにスタックにオブジェクトを配置したりする。
自分はやったことないけど、その部分でだけGCを停止したりもする。
処理系によってはGCの挙動をコントロールしたりもできる。起動条件とか。

ホットスポットでアロケーション入れたりすると、想像の通り酷い事になるけど。
ループの中でappendしたりとか、部分文字列を生成したりみたいな。
そういうコードを書く人も結構いる。

640 :デフォルトの名無しさん:2013/02/09(土) 22:15:45.71
>>634みたいな奴の思考って
GC→Java→C++使ってる俺すげー
じゃないのか

641 :デフォルトの名無しさん:2013/02/09(土) 23:01:20.27
時代遅れな俺のC++の知識によると、C++でもスマートポインタとか実用化されて、
メモリ管理を自動化する流れになってた気がするんだけど、実態は違うの?

642 :デフォルトの名無しさん:2013/02/09(土) 23:25:27.71
>>641
いや、それどころか、
GCのライブラリを構築できるように、規格のメモリモデルが改善されたよ。
sequence pointの後継のsequenced beforeを使って。
その辺をまとめたのはBoehmさん。Boehm GCの。

643 :デフォルトの名無しさん:2013/02/09(土) 23:37:01.09
ゲーム作っているけど、インクリメンタルGCなんて大して役にたたんけどな

644 :デフォルトの名無しさん:2013/02/09(土) 23:45:23.19
〜では役に立たない
それがどうしたの?

645 :デフォルトの名無しさん:2013/02/10(日) 00:03:31.06
今どき自前で開け閉めしている男の人って・・・って感じある

646 :デフォルトの名無しさん:2013/02/10(日) 01:24:41.28
自前でメモリ管理するには人生は短かすぎる

647 :デフォルトの名無しさん:2013/02/10(日) 02:02:28.79
何その名言

648 :デフォルトの名無しさん:2013/02/10(日) 05:35:20.08
C++のデストラクタの仕掛けが特殊なだけであって
Javaでも閉じる方は明示するか手動でやるわけじゃん

649 :デフォルトの名無しさん:2013/02/10(日) 12:13:58.75
いいかげんに、プログラマをメモリ管理から解放してください

650 :544:2013/02/10(日) 12:23:27.37
>>546
亀でごめん、良いリンクありがとう
>>646
感動した!

651 :デフォルトの名無しさん:2013/02/11(月) 00:35:51.68
オススメの本って何がありますか?
SICPとかプログラミング言語SCHEMEとか定番のところは読んだ(全部理解できたわけじゃないですけど)と思うので、
変わり種とか、直接にはSCHEMEと関係ないものでもこれは読んどけっていうのとかを教えて下さい。

652 :デフォルトの名無しさん:2013/02/11(月) 00:46:23.22
>>651

653 :デフォルトの名無しさん:2013/02/11(月) 00:46:54.22
>>651
Concepts, Techniques, and Models of Computer Programming

654 :はちみつ餃子 ◆8X2XSCHEME :2013/02/11(月) 01:00:53.00
>>651
「とらドラ」
これは絶対に読む価値あり。 大河たん萌え。

655 :デフォルトの名無しさん:2013/02/11(月) 02:14:24.21
ジュンク堂にいったらいろんな本が大量にあるので、目を通してみるといいかも。
let over lambda, land of lisp, 素数夜曲
達人プログラマー、Release it!、ハッカーと画家、情熱プログラマー

656 :デフォルトの名無しさん:2013/02/11(月) 02:59:31.42
>>651
実用的な, そこそこのサイズのプログラムを書いて, 自分なりに
リファクタリング(仕様のリファクタリングも含む)するのが一番

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

計算幾科学的にはエレガントな手法でも, 具体的なシステム相手の
場合は役に立たないことも結構あるし

657 :デフォルトの名無しさん:2013/02/11(月) 04:16:28.70
>>651
オライリーのGauche本→R5RS→和田本 でschemeが分かった気になれる

658 :はちみつ餃子 ◆8X2XSCHEME :2013/02/11(月) 09:44:30.43
誰も >>654 に突っ込んでくれなくてサミシイ

659 :デフォルトの名無しさん:2013/02/11(月) 10:15:49.23
とらドラは普通に面白いから突っ込めないなー

660 :デフォルトの名無しさん:2013/02/11(月) 10:39:13.17
便乗。手習いの後書きにある本は全部読んだ方が良いのかな?

661 :はちみつ餃子 ◆8X2XSCHEME :2013/02/11(月) 12:34:08.07
技術系の読物で特に面白いと思ったのは「C++ の設計と進化」だな。 肥大化した仕様を DIS られる
ことも多い C++ だけど、ひとつひとつの機能についてそれが必要だった理由を順を追って読んでいく
と無駄なものなどひとつも無いことが理解できる。

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

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

例えば、「関数型言語」という概念が生まれた背景には当然だけど関数型でない言語があるわけで
(全ての言語が関数型なら関数型という言葉は必要ない) 、関数型が関数型たる根源は何かというと関
数型でない言語との差異によって関数型なんだということになる。 同様に Lisp とは何かを理解する
ためには Lisp ではない言語との差異を理解することは必要だと思う。 違う性質の言語のひとつか
ふたつくらいは習熟とまではいわずとも読物を読むくらいはしておいて損はない。

662 : ◆QZaw55cn4c :2013/02/11(月) 12:56:47.93
確かにalgol系に偏在した言語界にあって関数型は一種の福音なのだろうと、長年、格闘し続けてきたのだけれども、もう疲れてしまった‥‥

663 :デフォルトの名無しさん:2013/02/11(月) 13:11:19.40
>>661 三行で頼む

664 :デフォルトの名無しさん:2013/02/11(月) 14:11:40.34
「C++ の設計と進化」はC++の仕様や機能ができるまでの背景が丁寧に語られていて良い
LispにC++を真似ろとは言わんがLispが選ばなかった歴史を学んでみるのもまた有意義であろう
Lispが何者であるかをよく知るためにはLisp以外のことも知っておいたほうが良い

665 :デフォルトの名無しさん:2013/02/11(月) 15:48:37.86
CやJavaを一切経由しないLispの学習カリキュラムがあってもいいはずだ

666 :デフォルトの名無しさん:2013/02/11(月) 16:01:51.35
相変わらず餃子はグダグダな長文好きだな

667 :デフォルトの名無しさん:2013/02/11(月) 16:07:15.28
こじつけっぽくないか?

668 :デフォルトの名無しさん:2013/02/11(月) 16:20:07.92
>>665
Scheme手習い/修行、素数夜曲、SICPでは不足?

669 :デフォルトの名無しさん:2013/02/11(月) 18:55:41.63
>>665
何をいまさら…

670 :デフォルトの名無しさん:2013/02/11(月) 19:03:13.04
>>669
不足って言うか、ちょっと寄り道したいなーっていう感じ

671 :デフォルトの名無しさん:2013/02/11(月) 19:27:16.54
HtDPもあるし

672 :デフォルトの名無しさん:2013/02/13(水) 01:14:58.41
>>531
トレードオフがあるのはわかるけど、それでもあえてこの要素はおさえときたいっていう要素ってあるかな。
速度とかエラーチェックの親切さとか、ローカライズとか、どれ?

673 :デフォルトの名無しさん:2013/02/13(水) 01:43:34.41
schemeで処理系の性能のトレードオフを気にしなきゃいけないって、いったい何のアプリを作っているのだろうか…

674 :デフォルトの名無しさん:2013/02/13(水) 05:20:20.20
画像処理

675 :デフォルトの名無しさん:2013/02/13(水) 12:03:21.26
音響処理

676 :はちみつ餃子 ◆8X2XSCHEME :2013/02/13(水) 12:51:53.36
>>672
信頼性。

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

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

そんなわけで、信頼性が大事。 で、言語処理系に必要な信頼性っていうのは書いた通りに動くっていうことが最
低限のラインだと思う。 十分に規格を満たすか、それが出来ないのならドキュメントに記載するくらいはされて
ないと。 変に動くぐらいならいっそエラーで停止してくれた方がいい。

677 :デフォルトの名無しさん:2013/02/13(水) 13:11:13.94
引き合いに出すのが漫画とラノベかよ〜

678 :デフォルトの名無しさん:2013/02/13(水) 14:30:19.93
>>676
処理系に信頼性が必要ってのには大賛成。

679 :はちみつ餃子 ◆8X2XSCHEME :2013/02/13(水) 16:00:24.12
>>677
ラムダドライバって言いたかっただけ

>>678
信頼性とは何かということになると人によって言うことは違いそうだけどな。

680 :デフォルトの名無しさん:2013/02/13(水) 16:25:58.55
>>679
俺がLISP処理系作ったらラムダドライバって名前にするわwww

681 :デフォルトの名無しさん:2013/02/13(水) 20:00:34.05
>>676
信頼性重要ってところははげしく同意。
gccでさえたまにバグ踏むことがあるけどバグトラッキングがしっかりしててワークアラウンドもすぐ出るからそういう体制も含めるとかなり信頼性は高かったりする。
俺的には信頼性を評価する重要ポイントは物の出来だけでなくて支援(互助)体制だと思う。
やりすぎるとRUBYみたいにクソな質問ばっかりのコミュニティになるけどな。

682 :デフォルトの名無しさん:2013/02/13(水) 20:45:14.28
>>676
自分で信頼に足る処理系を作ればいいんじゃねーの。そのぐらいできるんだろ?

683 :はちみつ餃子 ◆8X2XSCHEME :2013/02/13(水) 20:54:23.51
仮に規格に厳密でなくても自分で作ったものなら把握できるし、
いざというとき手を入れやすいというのは強みだよな。
モドキ程度のものなら作ったことはあるから発展させてみるわー。

684 :デフォルトの名無しさん:2013/02/13(水) 21:53:58.46
はちみつラムダドライバーくるー

685 :デフォルトの名無しさん:2013/02/14(木) 02:07:49.12
ラムダドライバはArmScheme略してASを作ってバージョンをM9まで上げてからだな

686 :デフォルトの名無しさん:2013/02/14(木) 02:18:56.99
schemeでscheme処理系モドキ作るなら半日でできる
規格厳守なら1週間あればできる

687 :デフォルトの名無しさん:2013/02/14(木) 02:38:31.54
寄り道書籍といえばスマリヤンの新しい本が翻訳されて出たよ。
記号論理学、数理論理学がテーマらしいので今更読む必要ない人が殆どだろうけど。

688 :デフォルトの名無しさん:2013/02/14(木) 05:53:18.81
>>686
そういうのは作ったうちに入らんだろう。
はちみつ餃子SchemeはC++で書かなきゃダメだ。

689 :はちみつ餃子 ◆8X2XSCHEME :2013/02/14(木) 12:37:03.07
へんに期待しないように言っとくけど、
今のところ公開するつもりはないし、
公開するとしても別名で出すよ。

690 :デフォルトの名無しさん:2013/02/14(木) 13:23:08.44
いままで必要なかったんだし
無駄なことする必要ないと思うけど

691 :デフォルトの名無しさん:2013/02/14(木) 13:52:34.77
Rubyが広まったのはやはりRuby on Railsのおかげ。
新しい処理系とかよりもキラーアプリの存在が重要。

継続ベースのWebアプリフレームワークとか・・・

692 :デフォルトの名無しさん:2013/02/14(木) 14:55:42.99
>>691
Gaucheって継続ベースのWebアプリかけなかったっけ?

693 :デフォルトの名無しさん:2013/02/14(木) 15:03:38.11
だから kahua について言及したいんだろうと思われるが

694 :デフォルトの名無しさん:2013/02/14(木) 15:17:30.34
KahuaのHPの更新がしばらく止まってるみたいだけど。

695 :デフォルトの名無しさん:2013/02/14(木) 16:30:09.36
>>685
怖がられたりしませんか (震え声

696 :デフォルトの名無しさん:2013/02/14(木) 16:48:31.28
>>695
きっとそのときはアニオタさんがらむだっちゃドライブ作ってくれる

697 :デフォルトの名無しさん:2013/02/15(金) 00:25:13.08
じゃあ、俺はオメガドライブ作るわ。カルロスな。

698 :デフォルトの名無しさん:2013/02/15(金) 00:35:23.58
>>697
ハレーの雫を〜 ?

699 :デフォルトの名無しさん:2013/02/15(金) 11:06:00.47
初心者です

700 :デフォルトの名無しさん:2013/02/15(金) 15:34:40.05
>>676
信頼性を測るベンチマークみたいのはないのでしょうか

701 :はちみつ餃子 ◆8X2XSCHEME :2013/02/15(金) 18:00:50.94
>>700
信頼性が何かっていうのは人によって違うけど、
俺が考えているように規格適合に重きを置くならベンチマークというよりテストだろ。
R6RS ではこれが有名だと思う。
http://svn.plt-scheme.org/plt/trunk/collects/tests/r6rs/

規格には適合した上で、実用にするなら堅牢性も重要項目かな。
堅牢性を測るならストレステストの類が有用だと思うんだけど、
定番というようなものは知らないなぁ。
Ypsilon のソースコードと一緒に入ってるテストの中に syntax-rules のストレステストは入ってるね。

702 :デフォルトの名無しさん:2013/02/15(金) 18:10:26.37
>>699
そうか。

703 :デフォルトの名無しさん:2013/02/16(土) 16:05:50.24
め ん つ ゆ

704 :デフォルトの名無しさん:2013/02/16(土) 17:15:44.74
そうか。

705 :デフォルトの名無しさん:2013/02/16(土) 17:51:56.84
せ ん べ い 。

706 :デフォルトの名無しさん:2013/02/16(土) 18:14:25.48
最近、GaucheでSchemeを勉強し初めのですが、エラーメッセージが
gosh: "error": unbound variable: ls1
みたいに行番号もバックトレースも出してくれず苦労するんですが、なんとかなりませんか?
それとも、皆さんこんな環境でプログラミングをしているのですか?

707 :デフォルトの名無しさん:2013/02/16(土) 18:31:47.91
variable ls1 だけで十分だ

708 :デフォルトの名無しさん:2013/02/16(土) 18:54:41.36
デバッグプリント用のリーダーマクロがあるからそれを使うといい。
ttp://practical-scheme.net/gauche/man/gauche-refj_16.html

709 :デフォルトの名無しさん: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

710 :はちみつ餃子 ◆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)))

711 :デフォルトの名無しさん:2013/02/17(日) 08:35:18.91
デバッグプリントはともかく、確かにgauche のエラーメッセージはちょっと不足だとは思う。
他の言語より短い関数を書くことが多いことを差し引いても、もう少し支援機能が欲しい。

712 :デフォルトの名無しさん:2013/02/17(日) 13:18:17.70
デバッグ機能は1.0までに実装する予定って話じゃなかったっけ?
忘れてるみたいだけど、あれまだ1.0前なんだぜ。

http://practical-scheme.net/gauche/devinfo-j.html

713 :はちみつ餃子 ◆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
何か提案があるのなら書いておけば今のうちなら考慮してくれるかも?

714 :デフォルトの名無しさん:2013/02/17(日) 14:10:51.63
お前それ前に俺が「デバッグ機能が云々」って言ってた奴に
WiLiKiに書き込んでみたらって言ったら凄いこと書き始めて
うわなにをするやめろ的な以下略。

715 :デフォルトの名無しさん:2013/02/17(日) 14:35:08.99
今はどこでハッスルされておられるのだろう。

716 :デフォルトの名無しさん:2013/02/17(日) 14:49:25.71
むしろ、自分で scheme on scheme を作って、そこでデバッグをやればいいと思う
デバッグが終われば 高速のscheme処理系で実行すればいいと思う

717 :はちみつ餃子 ◆8X2XSCHEME :2013/02/17(日) 15:30:11.72
そういう方針ならこういうのがあるね。
http://legacy.e.tir.jp/wiliki?eval-sv

718 :デフォルトの名無しさん:2013/02/17(日) 16:30:39.79
>>706
unbound variableみたいなエラーなら、書いたコードをモジュールにして
ユニットテストでtest-module流せば見つけてくれるよ。
実行時に高価なエラーチェックはテストでやるって方針らしいし。
Schemeは末尾呼び出し最適化があるので、もともとスタックトレースはあまり当てにできない。

719 :デフォルトの名無しさん:2013/02/17(日) 17:53:50.23
初心者って書いているのにscheme on scheme とか glintとか何か方向性違うくないか?

720 :デフォルトの名無しさん:2013/02/17(日) 17:54:32.94
>>714
あったな、そんな流れw

721 :デフォルトの名無しさん:2013/02/17(日) 18:31:35.64
>>713
oshiete-shiro-san
にわらた
無駄にARToolKitとかすげー

722 :デフォルトの名無しさん:2013/02/17(日) 19:49:24.42
>>720
今見たら四年も前だぜ。仲間が欲しいので、
餃子の中の人も同じ目にあえば良いと思います!

723 :デフォルトの名無しさん:2013/02/17(日) 19:52:32.85
>>719
初心者だから、ツールの情報を貰って自分で進めばいいじゃん。
学校じゃないんだし。

724 :デフォルトの名無しさん:2013/02/17(日) 22:16:50.07
>>719
初心者は和田本読んで scheme on scheme を作ろう

725 :デフォルトの名無しさん:2013/02/18(月) 04:34:03.11
関数型言語全体の中で一番高速なのはStalinじゃなくてMLtomなんじゃないのかな

726 :デフォルトの名無しさん:2013/02/18(月) 06:58:25.95
Stalinが「関数型言語全体の中で最速」って主張してる人いるの?

727 :デフォルトの名無しさん:2013/02/19(火) 02:05:30.46
速度が欲しけりゃ schemeマシン持ってこい

728 :デフォルトの名無しさん:2013/02/19(火) 09:07:47.34
そっちの方が遅いというのが歴史の結論

729 :デフォルトの名無しさん:2013/02/19(火) 19:45:16.11
他の言語使ってた期間が長いからなのか
1つの関数が長くなりすぎる

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

まるでC++ のclassみたいになる。もっとLispらしいスタイルはないものか

730 :デフォルトの名無しさん:2013/02/19(火) 19:53:25.46
関数の中に関数作らないで外に出したら。

731 :デフォルトの名無しさん:2013/02/19(火) 21:34:16.70
(define (f x)
(define counter 1)
(define (inc-counter) (set! counter (add1 counter))
...
)
みたいなの多様してしまう。なかなか外に関数だせない

732 :デフォルトの名無しさん:2013/02/19(火) 21:56:58.88
>>729
> (define (member-f1 ...
> (define (member-f2 ...
これって, 個別に定義すべき関数?

733 :デフォルトの名無しさん:2013/02/20(水) 01:31:57.91
let を使えばいいのではなかろうか

734 :はちみつ餃子 ◆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

735 :デフォルトの名無しさん:2013/02/20(水) 14:15:43.12
Win32APIのハンドル的な扱いができればとりあえず不便はないと思う
それで慣れてるからというのがあるけど
*nix系のAPIはいきなりexitとかアホなライブラリがあるから参考にならん

736 :デフォルトの名無しさん:2013/02/20(水) 22:04:33.86
いみふ

737 :はちみつ餃子 ◆8X2XSCHEME :2013/02/21(木) 00:07:04.46
>>736
おそらく >>735 が言うハンドル的というのは、
具体的な意味をもつ値ではなくオブジェクトを表現するユニークなラベルとしての値という意味で言ってるんだと思う。
R6RS で「不透明 (opaque) 」と表現してるのが近いんじゃないかな。

738 :デフォルトの名無しさん: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)))

他の!がついてる関数も同じ感じで入れ替えてほしい

739 :デフォルトの名無しさん:2013/02/22(金) 04:15:19.42
>>738
lset-unionに対してlset-union!が用意されてる唯一の理由は「セルを節約できる*可能性がある*」
ってことだけで、lstが指すリストが更新されることはもともと保証されてないよ。
何か違うものを欲しているように見えるが。

740 :はちみつ餃子 ◆8X2XSCHEME :2013/02/22(金) 10:19:40.82
R5RS だと ! 付きのは割当て済みのストレージに値を格納する手続きで、返却値は未規定。
R6RS だと返却値は未規定という表記は無くなった。
こういうのと、セルの再利用の可能性があるってだけのものを一緒にしちゃってるのはあまり良くない気がする。

741 :デフォルトの名無しさん:2013/02/22(金) 20:55:43.05
lispやってみて、階乗から始まってフィボナッチ、ハノイの塔、クイックソート
正規表現抹茶あたり組んでみたけど、なんか飽きちゃったなあ。
なんか面白いテーマないかな。

プログラマとして勉強になるのかな、と思ってたけど、CでもRubyでもできるよ
ねこんなのは。

742 :デフォルトの名無しさん:2013/02/22(金) 21:00:15.23
マクロ

743 :はちみつ餃子 ◆8X2XSCHEME :2013/02/22(金) 22:33:25.22
第一級継続でさえRubyにもあるからなぁ。
Lispにしかないものってやっぱマクロだよね。
Perlとかにも有るっちゃ有るがS式を前提としないものはなんか違うなーという感じ。

744 :デフォルトの名無しさん:2013/02/23(土) 01:59:31.32
>>741
マルチ乙

745 :デフォルトの名無しさん:2013/02/23(土) 02:06:52.76
perl のマクロなんてほとんど使われてないんじゃないの?
実用的なマクロがあるのが唯一、 lispだと思う

746 :デフォルトの名無しさん:2013/02/23(土) 02:12:27.16
c++にもある

747 :デフォルトの名無しさん:2013/02/23(土) 03:11:47.49
自分でテーマが見つからないんならやめれば?

748 :デフォルトの名無しさん:2013/02/23(土) 09:27:09.90
>>741

Lispコンパイラの作成(最適化を含む)

749 :デフォルトの名無しさん:2013/02/23(土) 12:10:01.59
> プログラマとして勉強になるのかな、と思って

> lispやってみて、階乗から始まってフィボナッチ、ハノイの塔、クイックソート
>

750 :デフォルトの名無しさん:2013/02/23(土) 12:12:05.54
この程度の奴は何やっても浅くかじってすぐに飽きるだろ。

751 :デフォルトの名無しさん:2013/02/23(土) 13:46:14.03
OCamlやScalaにもあるけど、サンプルコードを見る限りコレジャナイ感が凄い。
そう考えると伝統的なマクロは本当に手頃で実用的。

hygienic macro? syntax-caseにするのかsyntactic closuresにするのかexplicit renamingにするのか、
一定のコンセンサス得てから出直して来てください。

752 :はちみつ餃子 ◆8X2XSCHEME :2013/02/23(土) 14:19:56.52
その 3 つは御互いをエミュレートできる。
そんでもって伝統的マクロも模倣できる。
言語のユーザーにしてみればどれでもいいんだよ。
使い難いなら適当な皮をかぶせればいいんだから。

どれかひとつに決まらないのは、使い勝手なんかよりも、どれがプリミティブにふさわしいかという点で合意できないからだと思う。
(R6RS で syntax-case を採用したのは失敗という意見が多いけど。)
Scheme の仕様を議論するときに手頃感や実用性は後付けでいいの。
プログラマが手頃にしたい、実用的にしたいと思ったときにそれが出来る仕組があるってことが必要なんだよ。

753 :デフォルトの名無しさん:2013/02/23(土) 14:41:37.43
はぁ?

754 :デフォルトの名無しさん:2013/02/23(土) 14:42:28.36
(笑) - 書評 - Land of Lisp
http://blog.livedoor.jp/dankogai/archives/51854832.html

スーパーハッカー子飼い先生もお勧め

755 :デフォルトの名無しさん:2013/02/23(土) 14:52:48.61
>>752
そういう合意を早く得てプリミティブを決めないの? って話だよ。決めにくいのはわかるけど。
APIが三種あるけどエミュレートは簡単にできるから、好きなの選べって初学者に言うの?
マクロが三種類あるAPIで書かれて、ふたつは消えると分かってて読む側は三種類覚えるわけ?
これって傍から見るとかなり微妙な話だよ。

756 :デフォルトの名無しさん:2013/02/23(土) 14:57:55.49
ちなみに、>>751は実用性以前の問題なのでまずは仕様を決めてくださいね、って話だから。
そういう意味でsyntax-rulesについて言及してない。

757 :デフォルトの名無しさん:2013/02/23(土) 16:10:20.95
最初はリスト操作が判れば使えるdefine-macroでいいよ
実用上ほぼ問題ないし
他はなんでhygienicじゃないとダメなのか理解した上で手を出したらいい

758 :はちみつ餃子 ◆8X2XSCHEME :2013/02/23(土) 16:56:39.54
>>755
俺が >>752 で言いたかったのは、
Scheme の仕様は使い勝手の良さで決めるべきじゃないってことと、
伝統的マクロはプリミティブになりえないってことであって
決めなくていいってことじゃないよ。

759 :デフォルトの名無しさん:2013/02/23(土) 19:31:33.64
>>754
酷い書評だな
スーパーハッカーじゃなくスーパーバカの間違いだろ

760 :デフォルトの名無しさん:2013/02/23(土) 20:05:36.33
まあ書評にはなってないなw
敷居が低そうだし、これまでのどの本よりも入りやすそうではある。
数学数学しすぎてないし。

761 :デフォルトの名無しさん:2013/02/23(土) 21:42:21.35
>>758
ようやく意図を理解できたわ。hygienic macroのアプローチを扱き下ろしてる訳じゃない。
そういう風に勘違いさせたなら悪かった。皮肉ってるのはコミュニティの動きの鈍さの方。
五年前と状況が一緒に見えるんだけど、いつ議論は収束すんの? 来世?

762 :デフォルトの名無しさん:2013/02/23(土) 22:53:33.87
>>761 5年や10年でSchemeが変わると思ったら大間違いだぞ。

763 :デフォルトの名無しさん:2013/02/23(土) 23:29:17.41
実際に使われてる言語の中じゃ、Fortran と Lisp の次くらいに古い言語だっけ?

764 :デフォルトの名無しさん:2013/02/24(日) 01:28:33.11
http://ideone.com/BQu0Of
gaucheを使っています
なぜahogeが定義されないのかを教えてください

765 :デフォルトの名無しさん:2013/02/24(日) 01:33:43.40
r5rsのマクロはマクロの中と外の変数は共有出来ない
define-macro使えばいいよ

766 :デフォルトの名無しさん:2013/02/24(日) 02:07:02.42
>>754
今日早速購入
やっぱ日本語だとすらすら読めていいですね
これなら1週間ぐらいで読破できる

767 :デフォルトの名無しさん:2013/02/24(日) 02:12:54.61
>>765
そうだったんですね
define-macroを使ってできました
ありがとうございます

・・・そういえば貼ったコードのカッコがめちゃくちゃでした

768 :デフォルトの名無しさん: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))
と展開されてしまってダメだったんですけど何か解決方法はありませんか?

769 :デフォルトの名無しさん: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)))

770 :デフォルトの名無しさん:2013/02/24(日) 15:40:06.22
その発想はありませんでした・・・

771 :はちみつ餃子 ◆8X2XSCHEME :2013/02/24(日) 16:18:53.28
>>761
理論的に明確な差がないならしばらく放置しといてデファクトスタンダードがどれになるか待つしかないんじゃねーの。
今のところは explicit renaming が優勢っぽいから R7RS large で一区切りつくと思う。
それでも R8RS ではまた覆る可能性もあるから安心できないのが Scheme だけどな。

772 :デフォルトの名無しさん:2013/02/24(日) 17:07:54.05
>>766
もの凄く読みたいのに
書籍で床が抜けそうで新規書籍購入禁止令中につきebook版待ってる状態で涙目(床がゆがんできてかなりやばい)
自炊用に裁断機とスキャナ買うかマジ悩み中

773 :はちみつ餃子 ◆8X2XSCHEME :2013/02/24(日) 20:56:52.70
R4RS に低レベルマクロのこと書いてあるんだな。
仕様の一部というわけではなくて syntax-rules の土台になりうる方式の一例として紹介してるだけだけど。
syntax-case 方式からパターンマッチを無くしたような感じ。

774 :デフォルトの名無しさん:2013/02/24(日) 22:15:16.78
> 床がゆがんできてかなりやばい
うちの構造は? どんなとこにどのくらい住んでんの?
うちも長期間を考えるとやばいのかな?
うちは書籍だけで 1t くらいあるんで反面教師として知っておきたい
一昨年引越した時、引越し業者がトラック変えに行った覚えがある

775 :デフォルトの名無しさん:2013/02/24(日) 22:38:27.49
gaucheもgmp使えばかなり高速化できるんじゃないのかな

776 :デフォルトの名無しさん:2013/02/24(日) 22:38:29.19
そもそも古典的マクロって何が駄目なんだっけ?シンプルでいいとおもうんだけど。

777 :はちみつ餃子 ◆8X2XSCHEME :2013/02/24(日) 22:47:00.87
>>776
健全性を維持できないケースがある。
http://blog.practical-scheme.net/shiro?20100425-scheme-macro

778 :はちみつ餃子 ◆8X2XSCHEME :2013/02/24(日) 22:53:33.97
>>775
ライセンスの問題があって駄目って話だったような。

779 :デフォルトの名無しさん:2013/02/24(日) 23:03:29.11
床がたわむほど本持ってても読み返さないだろ。
調べる為に持ってるなら自炊した方が良い。
尤もLisperならその全てを卵焼き作る間に実装してしまうはずだがw

780 :はちみつ餃子 ◆8X2XSCHEME :2013/02/24(日) 23:14:58.90
>>779
俺はそんなに大量の本を持ってるわけじゃないが、
コレクション欲は理解できる。
合理的に考えればデータ化すればいいんだけどなー

781 :デフォルトの名無しさん:2013/02/24(日) 23:21:30.76
俺は本棚用に部屋借りてるよ

782 :デフォルトの名無しさん:2013/02/24(日) 23:25:17.61
>>777
リンク先読んだけど、要はif とかを束縛しなきゃ問題にならないんじゃないの?
そんな回避策のあるレアなケースのために、シンプルさを犠牲にするのって割に合わなくない?
オレの読み方が違ってるのかなぁ。

783 :デフォルトの名無しさん:2013/02/24(日) 23:32:02.77
確かにLisp本は長い間希少だったから、読む予定なくても出れば買っちゃうけど。
それだけじゃ部屋いっぱいにはならない。
みなさんどんな本を集めておられるのか教えてくだされ。

784 :デフォルトの名無しさん:2013/02/24(日) 23:54:18.37
現在入手可能なlisp関連本でおすすめ10冊を聞きたい

785 :デフォルトの名無しさん:2013/02/24(日) 23:56:07.74
伝統的マクロだと展開するときにクロージャ使うじゃん
letとかでそのクロージャにifとかの実体を束縛してやることで、健全性を保つことはできないのかな

(define-macro hoge
(let1 _if if
(lambda args body ...)))
こんな感じで
マクロを展開するタイミングでは特殊形式の実態を値として扱うのもアリだと思うし

786 :デフォルトの名無しさん:2013/02/24(日) 23:57:07.97
Land of Lisp買うぐらいならまず素数夜曲をかっちりやった方がいいと思う。

787 :はちみつ餃子 ◆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なんていうローカル束縛があると まずいわけだ。

788 :はちみつ餃子 ◆8X2XSCHEME :2013/02/25(月) 00:01:43.69
>>785
おおぅ。
そんな方法があったか。

789 :はちみつ餃子 ◆8X2XSCHEME :2013/02/25(月) 00:08:31.31
>>785
いや、やっぱそれは無理だわ。
if の内側を第一級にするんだと意味論の大幅な変更が要る。
識別子としての if を扱えるようにするのなら、
既出のハイジニックマクロと同じだし。

790 :デフォルトの名無しさん:2013/02/25(月) 00:29:33.47
>>789
マクロが展開されるのとifみたいな特殊形式が認識されるのはタイミングとしては同じだし、マクロが定義される環境をはっきりしてやれば特に矛盾はないと思うんだけど
そりゃ(define if2 if)みたいのを許可しようとしたら大変だろうけど、それとはまた別の問題なのでは?

evalの中で#<syntax>が使いたいみたいな話がgaucheで出たときに、似たような話になった気がするけど正直よくわかんない

791 :デフォルトの名無しさん:2013/02/25(月) 00:39:54.88
(define-macro (bar) `(,foo))

792 :デフォルトの名無しさん:2013/02/25(月) 00:43:04.03
gaucheなら785の方法で787は実装できる
最悪特殊構文については諦めるにしても、一貫性があって悪くない手段じゃないかと愚考する


と思ったけど、コンパイル時と実行時の環境が同じだからできる芸当だねこれ
インタプリタだけならいいけど静的にコンパイルする可能性を考えるとダメっぽい

793 :デフォルトの名無しさん:2013/02/25(月) 00:50:58.67
>>782
そういう考え方ももちろんあって、Paul GrahamのArcがそれ。

ただ、hygienic macroの方も実装がややこしいだけで、
使う側からすると伝統的マクロと同じくらい簡単。

794 :デフォルトの名無しさん:2013/02/25(月) 01:21:04.12
>>786
素数夜曲そんなにいい本なん?

795 :はちみつ餃子 ◆8X2XSCHEME :2013/02/25(月) 01:44:50.73
>>792
ああそうか、 CL で伝統的マクロがうまくいってるのは Lisp-2 もそうだがフェイズの違いもあるんだな。

796 :はちみつ餃子 ◆8X2XSCHEME :2013/02/25(月) 02:16:29.20
>>794
値段あたりの文字数では素数夜曲の方が上。 お得。

797 :デフォルトの名無しさん:2013/02/25(月) 02:33:53.51
そりゃSchemerならそう言うだろうさ。
でもLand of Lispの方が楽しそうじゃん。(←反論になってない)

798 :はちみつ餃子 ◆8X2XSCHEME :2013/02/25(月) 02:57:33.16
テーマがゆるい感じなのが Land of Lisp の良さなんだろうね。
まぁ比較するようなものではないな。 両方読んどけばいいよ。

799 :デフォルトの名無しさん:2013/02/25(月) 03:02:25.45
スタバで読むにはどっちかといえばLand ofだろうな。
「表紙のエイリアンがかわいい!きっとあの人Lisperなのね!」
周りの女の子もそう思うはず。※
黒いふくろう表紙では、、
「あの人、夜のぞきやってるんじゃないの?キモヲタ通報するわよ!」
ってなるでしょ。
まあスタバで人の持ち物ヲチしてる女の知的水準なんてそんなもんだ。

ただ、個人的には素数夜曲は鞄に入らない。
それだけの理由でLand ofを先に読み終わると思う。

800 :デフォルトの名無しさん:2013/02/25(月) 05:47:01.01
>>787
そのbarの位置はfooがローカルに束縛されてるのだから、グローバルなfooを参照する普通の式は書けないよね?
つまり、「健全な」マクロは式変形以外のことをやっている訳で、個人的にはそれが気持ち悪い。
考え方が違うのだろうけど。

801 :デフォルトの名無しさん:2013/02/25(月) 05:51:43.84
>>793
健全なマクロってlispと違う言語に見える。でも試してみるよ。
arc も触ってみたい。(最近arcの名前聞かないね)

802 :デフォルトの名無しさん:2013/02/25(月) 13:08:00.79
「すごいScheme楽しく学ぼう」
「Head first Scheme」
「Steel & Sussman Programing Langage Scheme」

803 :はちみつ餃子 ◆8X2XSCHEME :2013/02/25(月) 15:02:46.19
>>800
なるほど。 マクロが単に短く書くだけのものとして見るなら、
本来書けないものを書けるようにするのは余計っていうことか。
そういう発想はなかったな。

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

それと同じように「文脈情報」も常に背後には有るものと考えていたので、
伝統的マクロは情報を捨てているというイメージだった。

804 :デフォルトの名無しさん:2013/02/25(月) 20:41:00.93
Land of Lispはお奨めなの?
バグ出しが終わる2刷りを待つか

805 :はちみつ餃子 ◆8X2XSCHEME :2013/02/25(月) 20:45:41.10
>>801
syntax-rules や syntax-case がパターンマッチを軸に据えてるせいで
異質に見えるんだと思うけど、それが健全なマクロの全てではないよ。

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

syntax-rules が嫌いっていうだけの人も健全性に懐疑的になってないか?

806 :デフォルトの名無しさん:2013/02/25(月) 22:32:16.29
コアな人以外にとっては、Schemeのマクロはsyntax-rulesとsyntax-caseなんだから、
そりゃそう思われることもあるだろ。Gaucheでもまだ使えんし、explicit renamingなんて普通知らねーよ。

807 :デフォルトの名無しさん:2013/02/25(月) 22:33:35.82
Land of Lisp買ってきたなう。これからよむ。
SchemerのためにGaucheでの実装も用意されているとは徹底してるなw
ttp://blog.practical-scheme.net/shiro/20130223-land-of-gauche

808 :どうでもいいけど:2013/02/25(月) 22:54:42.21
>>763
Cの方が若干古いです。
かなり少なくなってきているけどBASIC、COBOLってのもあるしね。

809 :デフォルトの名無しさん:2013/02/25(月) 23:02:18.97
>>807
Shiroさんすばらしい

810 :デフォルトの名無しさん:2013/02/26(火) 01:05:04.88
文脈情報ってのがよく分からない…

811 :デフォルトの名無しさん:2013/02/26(火) 01:36:12.39
コンテキストの事じゃないかと想像。
俺的には日本語で言うなら、環境の方がしっくりくる。
違ってたらゴメン。

812 :デフォルトの名無しさん:2013/02/26(火) 02:20:34.07
文脈自由文法 CDG

813 :デフォルトの名無しさん:2013/02/26(火) 06:42:51.70
>>807
gauche で land of lisp、やろうと思ってあのに先にやられてしまったw

814 :デフォルトの名無しさん:2013/02/26(火) 07:15:58.15
>>803
他の人も書いてるけど文脈情報って何?S式に書けること?

815 :はちみつ餃子 ◆8X2XSCHEME :2013/02/26(火) 07:58:23.92
>>810-811 >>814
文脈情報は R6RS 原文では contextual information と書いてある。
何かって聞かれると説明に困るな。
環境 (environment) に近いとは思うけど、環境の方が意味が広いと思う。

816 :はちみつ餃子 ◆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) をちょっと違う意味で使っているような気がする。

817 :デフォルトの名無しさん:2013/02/26(火) 09:39:56.25
>>816
>>811だけど、contextとenvironmentの明確な違いとか意識した事なかったわ。
なんとなく、グローバルな束縛とか式の評価に必要な情報をまとめて「環境」って理解してただけ。
自分で実装してみたりすると、やっぱり違うものなんだろうか?

818 :デフォルトの名無しさん:2013/02/26(火) 19:40:03.12
個人的には以下で捉えてるんだが, 間違ってるんだろうか?
context: レキシカルに参照できるもののスナップショット
environment: 実行時に参照できるもののスナップショット

819 :デフォルトの名無しさん:2013/02/26(火) 21:22:05.60
R5RSではcontextは式が配置されたコード上の場所という意味でしかない。

820 :はちみつ餃子 ◆8X2XSCHEME :2013/02/26(火) 22:16:07.37
>>818
そんな感じでいいと思うけど、
環境を作るには字句上の対応付け (文脈) が解決されているのは大前提なので、
環境の情報には文脈も含まれていると思う。
マクロ (健全なマクロ) がない言語だったら、少なくとも言語のユーザーが
文脈の概念だけ切り取って考えることなんてなさそうだよなぁ。

821 :デフォルトの名無しさん:2013/02/26(火) 22:47:26.92
マクロ展開は実行に含まれますか?

822 :デフォルトの名無しさん:2013/02/26(火) 23:10:36.26
まず、実行という言葉をきちんと定義して説明してくれ

823 :デフォルトの名無しさん:2013/02/26(火) 23:48:50.16
contextを拡大解釈しすぎw

824 :デフォルトの名無しさん:2013/02/26(火) 23:48:56.02
実行とは評価なり

825 :はちみつ餃子 ◆8X2XSCHEME :2013/02/27(水) 07:52:33.73
マクロ展開は実行に含まれないと思うけど、
トランスレータが走るのは実行だと思う。

826 :デフォルトの名無しさん:2013/02/27(水) 12:28:20.13
もうやめてあなたのライフは0よ〜

827 :デフォルトの名無しさん:2013/02/27(水) 22:11:05.39
Cなんかだとマクロ展開フェーズでプログラムの構文構造が確定して
それを実行するという2フェーズだけど、
schemeやLispの場合は、マクロ展開と式評価が行き来しながら進む過程
が実行なんだと理解している。

なので静的な「文脈」と動的な実行「環境」の区別は曖昧かも。

828 :はちみつ餃子 ◆8X2XSCHEME :2013/02/27(水) 22:41:25.94
CL の defmacro では &environment で「(CL用語で言うところの) 環境」
を受け取れることになってるから、確かに区別は微妙なのかもしれないなぁ。

829 :デフォルトの名無しさん:2013/02/27(水) 23:10:35.68
ということはコンパイルしてできる実行コードでも
マクロは残っているのか

830 :デフォルトの名無しさん:2013/02/27(水) 23:28:29.99
リードマクロの中で展開される時と, トップレベル以下で
展開されるときは全く別の環境なんで, 渡せないと色々
不具合出るんじゃないかなぁ

831 :はちみつ餃子 ◆8X2XSCHEME :2013/02/28(木) 19:21:33.52
OpenCL とか NaCl とか、
最後に CL って付く単語が目に入ると Common Lisp かと思って「おっ?」ってなる。

832 :デフォルトの名無しさん:2013/02/28(木) 19:48:47.75
>>831
わかる。

833 :デフォルトの名無しさん:2013/02/28(木) 22:34:21.06
そらそうだけど、CLという文字列にたいする一般的な認知のされかたが変わるのは困るね。
逆ステマみたいなもんで。

834 :デフォルトの名無しさん:2013/02/28(木) 22:52:56.39
http://d.hatena.ne.jp/perlcodesample/20130227/1361928810
楽しそうだからSchemeも混ぜて欲しい

835 :デフォルトの名無しさん:2013/03/01(金) 09:06:17.96
Lispこそ日本的文化に最適な言語
1万行のC言語等のコードをいかにも「がんばって」書いた様に
自動生成できるし、バグ(ミス)もない

836 :デフォルトの名無しさん:2013/03/01(金) 11:50:30.29
CLよりもまぎらわしいのがクロージャ
関数閉包なのかClojureなのかClozure CLなのかGoogle Closure Libraryなのか・・・

837 :デフォルトの名無しさん:2013/03/01(金) 15:59:56.78
キーボード買おうと思うんだけどLispやるなら英語配列っ

838 :デフォルトの名無しさん:2013/03/01(金) 16:04:24.00
英語配列を基本にしつつ、
キーバインディングで括弧やセミコロンを入力しやすいように俺配列を定義している。

839 :デフォルトの名無しさん:2013/03/01(金) 16:07:30.01
セミコロンを?

840 :デフォルトの名無しさん:2013/03/01(金) 17:14:37.55
無変換、変換をctrlにしたらlispマシンの配列に近くなるから日本語の配列の方がいい

841 :デフォルトの名無しさん:2013/03/01(金) 17:30:11.00
()の打ち易さじゃないのか。

842 :デフォルトの名無しさん:2013/03/01(金) 17:38:08.26
>>839
本来のセミコロンの位置はShiftにしてる。
スラッシュの位置をMode_Switchに割り当てて、mod+Sでカッコ、mod+Dでコッカとかにしてる。
Lisp書くときホームポジションに括弧ないのはキツい・・・

843 :デフォルトの名無しさん:2013/03/01(金) 17:41:35.41
Lispマシンも一応括弧は入力しやすくなってるんだなー
ttp://www.pfu.co.jp/hhkeyboard/kb_collection/images/symbolics.gif

844 :デフォルトの名無しさん: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

845 :デフォルトの名無しさん:2013/03/01(金) 22:16:29.16
オライリーは毎回後ろの方のページに表紙の動物や昆虫の解説が載ってるけど、さすがに今回の動物の解説はなかったな…

846 :デフォルトの名無しさん:2013/03/01(金) 22:57:43.26
情けないなオライリー

847 :デフォルトの名無しさん:2013/03/02(土) 05:31:38.38
次の渋谷Lispで
>>835
みたいなこと言ってひんしゅく買ってみたいな

848 :デフォルトの名無しさん:2013/03/02(土) 06:45:03.69
>>845
マンガが載ってるからOK

849 :デフォルトの名無しさん:2013/03/02(土) 09:13:08.94
CPS って何の意味があるの

850 :はちみつ餃子 ◆8X2XSCHEME :2013/03/02(土) 09:27:42.17
>>849
普通の言語ユーザにとってはそれほど役に立たないかもね。

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

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

それと前にも書いたことある気がするけど、
Chicken scheme だと CPS 変換処理直後のコードをファイルに吐き出させることが
出来るので眺めてみると面白い。

851 :デフォルトの名無しさん:2013/03/02(土) 13:53:52.17
>>849
コントールフローを直接扱いたい時。
高階関数含んだコードをコンパイラが最適化する時など。

852 :デフォルトの名無しさん:2013/03/02(土) 14:51:12.34
common lispの入門に実践common lispかrand of lispどっちを買おうか迷ってるんだけど
実践common lispの方が入門向きなのかな
両方買うのは金銭的にあれだし英語は読めない

853 :デフォルトの名無しさん:2013/03/02(土) 16:13:36.58
英語が読めないことは良く分かったw

で、とっつき易いのはland of lispじゃないかな。形式的にガリゴリ学びたい向きにはもう片方。

854 :デフォルトの名無しさん:2013/03/02(土) 16:51:19.54
ステッカー欲しいしland of lisp買うことにした
ありがとう

855 :デフォルトの名無しさん:2013/03/02(土) 20:30:32.59
Land Of Lispは読み物としても面白かったよ

856 :デフォルトの名無しさん:2013/03/02(土) 23:08:37.05
>>852
land of lispはloopの説明が面白い
実践common lispはformatの説明がある程度丁寧
応用部分はどちらも特徴的で、land of lispはゲームの改良を、
実践common lispはツールの改良をしていく
pratical common lispはネットで無料で見れるんじゃなかったかな

857 :デフォルトの名無しさん:2013/03/02(土) 23:12:41.93
Loopマクロ周期表はワラタよw

858 :デフォルトの名無しさん:2013/03/02(土) 23:13:55.43
>>856
詳しい解説ありがとう
さっきland of lispを注文して楽しみ
英語のpractical common lispをこの前読もうとしたけど断念した

859 :デフォルトの名無しさん:2013/03/02(土) 23:46:21.69
新宿紀伊国屋で勝ったら、ステッカー付いてた。
宇宙人じゃなくて、床下にストラウストラップ〜のイラストの方。
宇宙人あるんだったらよく見て選べばよかった。

860 :デフォルトの名無しさん:2013/03/03(日) 00:00:33.94
自分も紀伊国屋で買ったらステッカー付いてたばかりかオライリーのメモ帳もくれた

861 :デフォルトの名無しさん:2013/03/03(日) 00:03:22.29
>>849
・自動プログラミング
・論文を書くときに(理論で表現するときの)書式を統一できる

862 :デフォルトの名無しさん:2013/03/03(日) 00:07:01.43
>メモ帳
俺貰えなかったけど。どういうことなんだぜ。(当惑

863 :デフォルトの名無しさん:2013/03/03(日) 02:23:29.15
land of lisp注文したときに備考にステッカー希望と書くの忘れてた・・・

864 :デフォルトの名無しさん:2013/03/03(日) 02:43:31.33
冷静になって考えろ
いらんだろそんなもの

865 :デフォルトの名無しさん:2013/03/03(日) 09:49:31.72
床下にストラウストラップ、って元ネタどこなの?

866 :デフォルトの名無しさん:2013/03/03(日) 13:19:03.92
シンボリックスのキーボードって何だか凄いな。

867 :デフォルトの名無しさん:2013/03/03(日) 13:20:53.67
シロアリに例えてるんでしょ?
翻訳ではどうなってるの?

you have a colony of stroustrups under your floor-boards.で、
お前の床下はストラウストラップsに巣食われてる、って感じだと思うけど。(複数形ね)

868 :デフォルトの名無しさん:2013/03/03(日) 13:36:53.24
「奥さん、残念ですがお宅の床下にはストラウストラップの大きな素があるようです。
何回かに分けて駆除が必要ですね」
左の服に書いてある文字は「害虫駆除」

ニューバランスさんが訴状を携えてアップを始めました

869 :デフォルトの名無しさん:2013/03/03(日) 13:40:17.37
巣のまちがい
原著でアバウトだなあってとこに脚注(多め)が入ってるのはいいね

870 :デフォルトの名無しさん:2013/03/03(日) 17:38:33.43
つまらんジョークだな。

871 :デフォルトの名無しさん:2013/03/03(日) 18:25:03.50
ジョークというより喜劇の一幕だな。

872 :デフォルトの名無しさん:2013/03/03(日) 18:34:36.18
ここだけ取り上げてアレコレ言ってもな。

873 :デフォルトの名無しさん:2013/03/03(日) 19:49:21.73
>>870
挿絵からセリフだけ抜きだしたから面白くはないね
「暗くてお靴がわからないわ」「どうだい明るくなったろう」みたいなもの

にしても文法に手を入れられるLispのユーザにとっては
他言語のユーザはあの家の住人のように見えてるんだろうか

874 :デフォルトの名無しさん:2013/03/03(日) 20:02:43.43
両方やりますが…

875 :はちみつ餃子 ◆8X2XSCHEME :2013/03/03(日) 20:04:11.22
正誤表を見るのが面倒だから3刷あたりまで待ってから買うわ。
とか言ってたら絶版になるのが専門書なんだけど、そうなったら中古でもいいしな。

俺は C++ 好きだし。

876 :デフォルトの名無しさん:2013/03/04(月) 00:53:41.15
考えてみりゃ非プログラマにとってはLispだけじゃなくて
ほとんどのプログラミング言語は宇宙語みたいなもんだよな。

877 :デフォルトの名無しさん:2013/03/04(月) 03:11:25.91
schemeちょっとかじってcommonlispも興味があるんだけど、funcall気持ち悪い
関数呼ぶのに一手間かかるってに抵抗ある
でも、実用的なソフトの開発には後者が向いてるとか
schemeとcommonlispどっち勉強したらいい?

878 :デフォルトの名無しさん:2013/03/04(月) 10:13:15.21
Lisp-1とLisp-2についてならどっちもどっち。

実用的なソフトを作ることに興味があるなら、参考書(実践CommonLisp)のある
CLにしておけば?

879 :デフォルトの名無しさん:2013/03/04(月) 11:54:51.15
Javaも呼べて便利らしいKAWAを使うという選択肢

880 :デフォルトの名無しさん:2013/03/04(月) 12:11:21.15
Clojure「…」

881 :はちみつ餃子 ◆8X2XSCHEME :2013/03/04(月) 16:16:59.52
Clojure は Java の資産を利用することを前提とした設計だから、
そりゃ Java を呼びやすいけど、
そのかわりに言語としての筋の良さをいくらか犠牲にしてるから、
そこらはトレードオフの問題だな。

ちなみに Java との連携なら Schluessel もあるでよ。

882 :デフォルトの名無しさん:2013/03/04(月) 18:39:05.70
Movitz周辺て最近どうなの?

883 :電波いっぱい:2013/03/04(月) 23:02:53.68
lisp系で実用的なソフトの開発って言ったら、今ならclojureだと思うけどな。

884 :はちみつ餃子 ◆8X2XSCHEME :2013/03/04(月) 23:14:21.64
ライブラリの蓄積が多いと有利だよねぇ。
結局、現実の問題ってのほとんどの場合に誰かが解決した問題なわけで、
解決した結果がライブラリになっていくわけで。
少々の筋の悪さなどなんのそのって感じはわかる。

885 :デフォルトの名無しさん:2013/03/04(月) 23:52:38.56
>>882
ちょっとググったが何にも出てこない。残念ながら。
movitzみたいなハードよりの話は憧れるんだがなぁ。

886 :デフォルトの名無しさん:2013/03/05(火) 01:27:43.33
>880 は、
lisp-1がいいならclojureもあるよということじゃないかな?

887 :デフォルトの名無しさん:2013/03/05(火) 01:31:06.67
Movitz、Schemixの開発者はきっと昆虫族に幽閉されてるに違いない。

888 :デフォルトの名無しさん:2013/03/05(火) 01:34:10.60
>>887
助けに行きたいが我が師団はストラウストラップの軍団の前にすでに瀕死だ

889 :デフォルトの名無しさん:2013/03/05(火) 03:18:51.89
Clojureってlisp-1だったのか
でも、マクロ書くにはcommonlispがいいんでしょ?

890 :デフォルトの名無しさん:2013/03/05(火) 07:01:04.99
いつかmovitzやりたいんだよなぁ。lisp星人、力を貸してくれーー

891 :デフォルトの名無しさん:2013/03/05(火) 08:20:53.05
Stop! 他力本願

892 :はちみつ餃子 ◆8X2XSCHEME :2013/03/05(火) 08:45:55.47
本願寺は浄土真宗の寺なのかー

893 :デフォルトの名無しさん:2013/03/05(火) 08:58:55.09
マジどうでもいい

894 :デフォルトの名無しさん:2013/03/05(火) 10:02:23.67
>>889
Clojureもマクロあるよ
他にもいろいろと面白い今時の機能が満載

895 :デフォルトの名無しさん:2013/03/05(火) 10:16:30.86
Clojure はlisp1なのにパッケージもあるんだっけ?イマイチ、パッケージ、モジュールとlisp1,2の違いがよく分からん。名前空間一個だけ、がlisp-1?

896 :デフォルトの名無しさん:2013/03/05(火) 10:28:08.38
Lisp-1/2は関数と変数の名前空間を分けるかどうか、という話。
モジュールやパッケージによる名前空間の分離は別。

897 :デフォルトの名無しさん:2013/03/05(火) 10:34:47.17
>>896
ありがとう、そういうことなのね。個人的にはlisp2がいいな。

898 :デフォルトの名無しさん:2013/03/05(火) 11:18:01.87
原論文でも、他にもいくつも名前空間はあるから、1とか2という名前は
厳密には名前空間の数とはいえない、とかそんなことが書いてある。

899 :デフォルトの名無しさん:2013/03/05(火) 11:26:40.53
"Technical Issues of Separation in Function Cells and Value Cells"ってタイトルだけど、
fletとかあるからcellの話だけでは収まらないしなあ。

900 :デフォルトの名無しさん:2013/03/05(火) 13:25:45.42
>>897
funcallなしで記述できるのでclojureの方が好きになってしまった。
名前の衝突もパッケージで回避できるし。

901 :デフォルトの名無しさん:2013/03/05(火) 21:03:06.57
みんなSchemeをどういう用途に使ってるの?

902 :デフォルトの名無しさん:2013/03/05(火) 22:18:59.42
スケルトンからjavaのコードを出力してる

903 :デフォルトの名無しさん:2013/03/06(水) 02:32:18.62
sicpって面白い?
読みたいけど高い

904 :デフォルトの名無しさん:2013/03/06(水) 02:34:07.12
おもしろいよ

905 :デフォルトの名無しさん:2013/03/06(水) 02:41:22.35
日曜のパチンコですったと思って3冊買えばいいと思う

906 :デフォルトの名無しさん:2013/03/06(水) 02:53:36.58
買いに行こうかな
本格的にlisp勉強したくなってきた
Closureも触ってみるか

907 :デフォルトの名無しさん:2013/03/06(水) 03:20:29.85
SICPの原書は名教科書なんだけど、訳書は解読困難な迷訳なんだよね。
MITのサイトで原文無料公開してるから、そっちを読むのがいいと思う。

あと、SICPはプログラミング全般の基礎を解説してる本で、Lisp/Schemeについての解説はほとんどない。
Lispについて学ぶには別の本が要ると思う。

908 :デフォルトの名無しさん:2013/03/06(水) 03:47:02.47
そうはいっても英語はよくわからないからなあアメリカンジョークとかとばされたらおしまいだ

909 :デフォルトの名無しさん:2013/03/06(水) 03:50:27.62
>>907
何が学べる?
関数型言語を使った抽象化の訓練とか?

910 :デフォルトの名無しさん:2013/03/06(水) 05:12:16.36
式や変数とかの基本概念から始まって、並行処理や遅延評価、論理型プログラミングなんかの基本とか、処理系制作の基本とか。
プログラミングのいろんな側面に触れさせてくれる、ってのがメインだったと思った。

911 :デフォルトの名無しさん:2013/03/06(水) 06:00:23.14
>>907
というか、scheme処理系の作成方法が載ってなかったっけ?

912 :デフォルトの名無しさん:2013/03/06(水) 07:50:17.96
訳書はいい加減絶版にするべき

913 :デフォルトの名無しさん:2013/03/06(水) 09:27:29.19
日本語になってない酷い文なのは前書きだけで、
本編は訳はヘタクソでもゆっくりなら読めないレベルではないよね。

914 :デフォルトの名無しさん:2013/03/06(水) 10:12:09.64
普通に読めるわヴォケ

あれを読めない奴は「できる! ○×」みたいなハウツーしか読めない病の奴だよ

915 :デフォルトの名無しさん:2013/03/06(水) 10:26:31.28
読めはするよ。
技術書は、自分の知らなかった概念などの取得の為に読むんだから、そっちに思考を集中させたい。
不適切な訳は、思考の足を引っ張るから嫌われる、というだけの事。

916 :デフォルトの名無しさん:2013/03/06(水) 10:49:54.76
ということにしたくて必死、ということはわかった

917 :デフォルトの名無しさん:2013/03/06(水) 11:03:27.88
自分も見たけど訳はダメですね

918 :デフォルトの名無しさん:2013/03/06(水) 11:13:53.58
SICPの原文はCreative Commons BY-NCなので自ら訳すという手もある。
一章も完成してないがこういうのもある。
http://www21.atwiki.jp/sicpaho/pages/1.html

個人的には全訳しないでも要約があればいいと思うんだが。

919 :はちみつ餃子 ◆8X2XSCHEME :2013/03/06(水) 13:33:21.04
英語わからんし。

920 :デフォルトの名無しさん:2013/03/06(水) 15:39:48.87
読めると主張する人は内容がすでに分かっている人
ということになると思う

921 :デフォルトの名無しさん:2013/03/06(水) 15:42:47.55
なんだそりゃ

922 :デフォルトの名無しさん:2013/03/06(水) 18:48:43.46
普通に読めるとか言っている奴は頭がおかしい
内容が間違っているってのに

923 :デフォルトの名無しさん:2013/03/06(水) 19:06:54.99
>>922
読める≒理解だからなあ。
本格的にやる気があるなら、英語ぐらい読めるようになっておいたほうが良いとは思うが。

924 :デフォルトの名無しさん:2013/03/06(水) 20:29:32.91
SICPの翻訳の話はもうおなかいっぱいだろ

925 :デフォルトの名無しさん:2013/03/06(水) 21:48:01.68
このスレでもう延々同じ話してるしな

【SICP】計算機プログラムの構造と解釈 Part3
http://toro.2ch.net/test/read.cgi/tech/1333015632/

926 :デフォルトの名無しさん:2013/03/07(木) 00:30:55.46
「The Schematics of computation」は平易な英語でいい感じ

Guy.Steeleの昔の論文も平易な英語を使ってるね
内容は高度だけど

927 :デフォルトの名無しさん:2013/03/07(木) 07:56:01.86
ハイハイ。 英語読めて偉いでちゅねー。

なんでそんなに原文を勧めるのかわかんね。
多少まずい訳でも母語の方がわかりやすいのは当然だろ。

928 :デフォルトの名無しさん:2013/03/07(木) 08:12:04.37
本気で言ってんの?

929 :デフォルトの名無しさん:2013/03/07(木) 08:17:14.99
わかりやすいかどうかは個人差がある
当然と断ずるあたり釣り

930 :デフォルトの名無しさん:2013/03/07(木) 08:29:48.56
TaPL って何て読むの?

931 :はちみつ餃子 ◆8X2XSCHEME :2013/03/07(木) 08:48:24.98
タぷぅ

932 :デフォルトの名無しさん:2013/03/07(木) 10:26:09.20
>>927
>多少まずい訳でも母語の方がわかりやすいのは当然だろ。
日本語は漢字・平仮名・片仮名あるからまだいいが、ハングルだと600万もの組み合わせがあるのに同音異義語・同文字異義語が
多すぎるので(防水と放水が同じとか)、技術書読むときは英語表記の本も必須だそうな。

933 :デフォルトの名無しさん:2013/03/07(木) 22:13:22.04
lispみたいなマイナー言語を使うのに、英語は読めなくていいって態度はそぐわないと思う
だったらJavaかRubyでも使ってろよ

934 :はちみつ餃子 ◆8X2XSCHEME :2013/03/07(木) 23:39:44.49
>>932
ひらがなだけで書いてあるようなもんか。
それならさすがの俺も英語の方がマシと思うわ。

935 :デフォルトの名無しさん:2013/03/07(木) 23:42:05.93
まあ訳がひどくなるのは英語がひどいからだけどね

936 :デフォルトの名無しさん:2013/03/08(金) 02:13:38.08
訳はひどくないと思うのは俺だけだろうか…

937 :デフォルトの名無しさん:2013/03/08(金) 03:48:40.29
>>933
”読めなくていい”範囲で出来る事は限られてるが、趣味レベルなんだろうから人に押し付けさえしなければいい。

938 :デフォルトの名無しさん:2013/03/08(金) 03:50:36.06
英語はひどくないけど、訳はひどい

939 :デフォルトの名無しさん:2013/03/08(金) 07:00:51.33
「人工無能に訳させました」って言われれば納得するレベル。

940 :デフォルトの名無しさん:2013/03/08(金) 07:01:57.27
お前は人工無能を何だと思ってるんだ

941 :デフォルトの名無しさん:2013/03/08(金) 08:34:53.51
>>936
俺もひどくないと思うよ

942 :デフォルトの名無しさん:2013/03/08(金) 10:19:50.54
おかしな奴が必死で「訳がひどい」ことにしようとしている。

943 :デフォルトの名無しさん:2013/03/08(金) 11:21:20.65
前書きは確かに酷い。
読む気が失せる超絶悪訳。
しかし本編はそこまで酷くない。
ちょっと悪ふざけがすべってる程度。

944 :デフォルトの名無しさん:2013/03/08(金) 11:28:41.24
前書きは原書も読みづらいよ。そこだけ妙に教授レベルで過剰に文学的な英語。

945 :デフォルトの名無しさん:2013/03/08(金) 11:34:33.52
Lispを思い起こさせる比喩に満ち満ちてるから、
英語分かる人はprefaceは英語で読みましょう。

946 :デフォルトの名無しさん:2013/03/08(金) 14:07:25.98
SICPの訳の話になると和田さんが必死になるからやめてあげて

947 :デフォルトの名無しさん:2013/03/08(金) 14:16:18.44
おまえが必死に騒いでるだけだろが

948 :デフォルトの名無しさん:2013/03/08(金) 14:27:41.01
前書き以外で具体的にどこがおかしいって話聞いたことない

949 :デフォルトの名無しさん:2013/03/08(金) 14:41:25.16
指摘出来ないんだよ。

950 :デフォルトの名無しさん:2013/03/08(金) 15:09:29.05
おかしいだけでなく間違っているらしいよ

951 :デフォルトの名無しさん:2013/03/08(金) 15:22:42.72
訳がひどいかどうかは知らんが、和田訳が好きなのは俺だけか…

952 :デフォルトの名無しさん:2013/03/09(土) 04:59:24.55
堅いけどちゃんと一意に解釈できるし嫌いじゃない
大学の教科書みたいな文
ってか俺の大学の教科書だった

953 :デフォルトの名無しさん:2013/03/09(土) 05:17:30.81
和田さん人気あるのね

954 :デフォルトの名無しさん:2013/03/09(土) 12:22:26.00
>>952
京大乙

955 :デフォルトの名無しさん:2013/03/09(土) 14:15:10.93
どんな訳か見てみたいけど日本語版はサンプルPDFとか流れてないのかい?
本屋行かないとダメか

956 :デフォルトの名無しさん:2013/03/09(土) 16:46:25.08
訳の話はもういいよ

957 :デフォルトの名無しさん:2013/03/09(土) 17:33:17.96
かわいそかわいそなのでもう止めるか

958 :デフォルトの名無しさん:2013/03/10(日) 21:43:21.20
引数の型をstringで返してくれる関数ってあります?
(type->string `foo) ; => "symbol"
みたいな。

959 :デフォルトの名無しさん:2013/03/10(日) 21:48:57.09
prin1-to-string

960 :デフォルトの名無しさん:2013/03/10(日) 22:13:28.48
(format #f "~a" x)

961 :はちみつ餃子 ◆8X2XSCHEME :2013/03/10(日) 23:41:11.44
>>958
Scheme の話だったらそういう関数は無い。
なんだか意味論上のややっこしい理由があるみたいなことをどこかで見たことはあるんだけど、
どこで読んだのだったか忘れた。

962 :デフォルトの名無しさん:2013/03/10(日) 23:49:57.48
実装みるとデータに型ごとにタグつけてるからやろうと思えばできそうな気が…

963 :はちみつ餃子 ◆8X2XSCHEME :2013/03/11(月) 00:08:50.11
Gauche なら describe 関数で見れるね。
この関数は標準出力に表示するようになってるからちょっとラップすれば文字列で返す関数を定義できなくはない。

964 :デフォルトの名無しさん:2013/03/11(月) 00:57:48.04
>>963
環境はGaucheだったので describe で期待の情報が得られました。ありがとうございます。
scheme汎用としては難しいんでしょうかね? symbol? とか string? があるので
存在しててもおかしくないと思っていました。

965 :デフォルトの名無しさん:2013/03/11(月) 01:02:54.73
typed racketも型情報をユーザーにいじらせてくれればいいのに

966 :デフォルトの名無しさん:2013/03/11(月) 01:54:50.68
コンパイラ志向の環境でunboxingした時に型情報取るのが難しい、というかコストかかる。
まあC++でさえ、typeid使うと隠れフィールド増えるけど型情報取れるから、なんとかしたいところ。

967 :デフォルトの名無しさん: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。

968 :デフォルトの名無しさん: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"))))))

969 :デフォルトの名無しさん:2013/03/11(月) 04:29:29.64
>>968
またまたごめん。6行め "pair?" は "pair" が正しい。

970 :デフォルトの名無しさん:2013/03/11(月) 07:06:17.79
>>967
cond使いなYo!
Schemeでは「型」というのは「どの型判定述語に#tと答えるかによって決まるもの」なので
type-of みたいな関数で取り出せる「何か」がある必要はない。
Gaucheではclass-ofでオブジェクトのクラスが取れるけどね。

971 :デフォルトの名無しさん:2013/03/11(月) 15:10:36.17
こんどにする

972 :デフォルトの名無しさん: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"))))

973 :デフォルトの名無しさん:2013/03/11(月) 18:01:14.28
Clozure CL 1.9 リリースされていたね。
オメ

974 :デフォルトの名無しさん:2013/03/11(月) 18:33:51.57
type->stringって引数に型(type)がくる関数に見える

975 :デフォルトの名無しさん:2013/03/11(月) 18:47:29.17
今度はcond、こんどぶし じゃないよん

976 :はちみつ餃子 ◆8X2XSCHEME :2013/03/11(月) 21:39:56.18
>>972
数値の型は階層化されているので、そこらへんの扱いをどうするかも考えないとな。
例えば数値の 1 は integer? で真になるけど、rational? でも real? でも真だ。
最も特殊な型を返すのが筋だろうから 1 は integer でいいのかな。

それと正確性や変更可能性は階層と独立した属性なので型の一部と見做すべきかどうか。
(例えば正確な有理数と非正確な有理数は違う型だろうか? )

977 :デフォルトの名無しさん:2013/03/11(月) 22:06:52.62
>>976
前半は集合論的な包含関係を考慮して内側の集合から調べる順番にすればok
後半は質問者がどこまで要求しているかにもよるが条件分岐を深くしてたとえば
((integer? arg) (if (exact? arg) "exact-integer" "inexact-integer"))
などとすればok

978 :デフォルトの名無しさん:2013/03/11(月) 22:42:33.33
集合論的→集合的

979 :デフォルトの名無しさん:2013/03/12(火) 02:41:00.66
Lispって今となってはCOBOLより世の中の役に立ってないよね
なのに糞Lisperの態度のでかさはなんなんだろうね

980 :デフォルトの名無しさん:2013/03/12(火) 06:11:56.07
(define a (cons 1 '()))
(define b a)
(set-car! b 10)
ってやってaが(10)になるかどうかって規定されてるんですか?それとも処理系依存?
もしconsセルを値として持ってたらaは変化しないと思うんですけど

981 :デフォルトの名無しさん: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 とが大きく異なる点だねキリッ

982 :デフォルトの名無しさん:2013/03/12(火) 08:01:55.06
オブジェクト参照しかない言語はいくらでもあると思うが。

983 :デフォルトの名無しさん:2013/03/12(火) 08:07:31.94
というよりリストを値として変数に入れる言語なんてあったっけ

984 :デフォルトの名無しさん:2013/03/12(火) 08:08:31.74
(set-car! b 10) は
b->car = 10; ってことかいな。

985 :デフォルトの名無しさん:2013/03/12(火) 09:34:19.83
Lisp処理系作ろうと思った時、cons型が二つのポインタを持つのかconsへの参照を持つのかで悩んだ
二つのポインタを持つだけだったら>>980の言うところの「値として持っていたら変化しない」になりそう
こんな扱いしてる処理系少しはありそう

986 :デフォルトの名無しさん:2013/03/12(火) 12:32:36.66
>>985
ない

987 :デフォルトの名無しさん:2013/03/12(火) 14:04:20.12
consセルを値として持つっていうのが意味わからんよw

988 :デフォルトの名無しさん:2013/03/12(火) 14:45:41.31
関数呼ぶときセルをコピーして渡す仕様だったら set-cdr! は実装できない

989 :デフォルトの名無しさん:2013/03/12(火) 14:46:59.07
set-car! だった
同じだけど

990 :デフォルトの名無しさん:2013/03/12(火) 15:05:16.52
それ特殊形式じゃん

991 :デフォルトの名無しさん:2013/03/12(火) 17:27:35.80
>>990
釣りなのか、マジなのか

992 :デフォルトの名無しさん:2013/03/12(火) 19:25:09.67
>>985
struct cons
{
X1 *pointer_x1;
X2 *pointer_x2 ;
}
ということ?

993 :デフォルトの名無しさん:2013/03/13(水) 07:58:34.84
メモリ構造の話と
引数の扱いの話と
破壊的代入の有無の話が、
ごっちゃになってる。

あとconsセルのcar,cdrは共用体です。
即値も入れないといけないので。

994 :デフォルトの名無しさん:2013/03/13(水) 17:29:18.48
http://www.youtube.com/watch?v=HM1Zb3xmvMc

995 :デフォルトの名無しさん:2013/03/13(水) 18:39:39.96
SAN値が下がる

996 :デフォルトの名無しさん:2013/03/13(水) 18:50:55.43
>>994
一回Amazonの締め切り落として(なの?)予約注文キャンセルされてさらに三年とかいうことかいね?

997 :デフォルトの名無しさん:2013/03/13(水) 19:48:14.76
次スレ立てるよ

998 :デフォルトの名無しさん:2013/03/13(水) 19:51:11.70
Lisp Scheme Part36
ttp://toro.2ch.net/test/read.cgi/tech/1363171842/

999 :デフォルトの名無しさん: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 なら長門は俺の嫁

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

229 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)