1read 100read
2012年07月プログラム133: Lisp Scheme Part35 (202)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
コーディングスタイルにこだわるスレ (712)
文字コードの種類は何故複数あるのでしょうか? (342)
HTABOXコア Part3 (275)
懐かしのMS-DOSプログラミング (380)
最も美しいプログラミング言語は? Part6 (400)
「OS自作入門」 (318)
Lisp Scheme Part35
- 1 :2012/09/19 〜 最終レス :2012/11/06
- 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 :
- SICP taught in Python 3
http://www-inst.eecs.berkeley.edu/~cs61a/sp12/book/index.html
- 3 :
- 前スレであった学会の話だけど
参加費高いのがネックだけど
知り合いか友達がつくれれば結構よい機会になると思うよ
例えば Emacs 好きな人だったら
チュートリアルやる Didier Verna さんは XEmacs 開発者だし日本滞在経験があるって
英語が片言でもいざとなったら lisp で話せば通じる
なので月曜日の excursion や火曜日の banquet への参加をおすすめする
- 4 :
- 予稿集だけほしい
- 5 :
- 目次がS式。
- 6 :
- コンティニュエーションって
Ctrl-Z食ってお休みしてるプロセスみたいなもの?
- 7 :
- そういうこともできるが
要は次に行なうべき計算
何の「次」なのかの説明が必要になるが・・・
- 8 :
- ウィキペディアが、なんかgdgdに加筆されてるな
- 9 :
- 何がどういう順番で実行されるかというのは
Schemeに慣れていないと直観的に分かりにくい
- 10 :
- 引数の渡し方とかね
- 11 :
- 前スレの2進数と10進数の例え、LispはS式で表現するから16進数だろ。少々慣れればこれほど効率の良いものは無い。
- 12 :
- (a (b (c) (d)) (e))
とかでbcdeに副作用があると副作用がどの順番に起こるか保証されない
が、大抵は左から右、右から左のどっちか
どっちか決めろよ
- 13 :
- じゃあ左で
- 14 :
- cdbeやebdcになった程度で混乱するとでも思って?
馬鹿にしないで欲しいわ
- 15 :
- ebdcはないわー
edcbだった
混乱するじゃないか!
- 16 :
- 左から右だと可変引数が取れないんだよな
- 17 :
- >>15
最適化でdcbeやdcebになるかもしれんぞ
まあ仕様が決まってるならバグだが
- 18 :
- 継続を使ってむりやり順序を変える方法を模索するのが真のschemer
- 19 :
- (format "~S ~S" (read) (read)) がどうなるかは処理系依存なの?
- 20 :
- ご存知、ないのですか!?
- 21 :
- >>19
その通り。
一旦 let* 等で変数に束縛するか、
よく使うものならそう展開されるようなマクロでくるむべし。
- 22 :
- スタックに積む順と評価順が一致してなければならない、という法はない。
- 23 :
- そういえば C も引数の評価順は決まってなかったんじゃね?
C は最適化の可能性という錦の御旗があるけど、Scheme の場合は理論上の背景がありそう。
単に万人が納得する順序を決められないってことかもしれんけど。
私としては決まってない方が好みだな。
順序がどうでもいい場合はそのまま書けばいいし、
順序に意味がある場合は let* を使えばいい。
引数の評価順を決めてしまうと、その順序に意味があるのか無いのか見た目でわからなくなる。
- 24 :
- http://www.youtube.com/watch?v=sWAfHjx0igU
- 25 :
- r6rs では Rationale の 9.1. に評価順を決めない理由が書いてあるね。
1. たぶん読みやすい
2. もしかしたらコンパイラが良いコードを吐いてくれるかも
だそうだ。
- 26 :
- カリー化があるから、引数の並び順で評価順が決まるのはナンセンス
- 27 :
- いくらなんでも違う、真逆だ。
- 28 :
- もんだい1まぎゃくとまさかのちがいをSしきでかんけつにのべよ
- 29 :
- 一般的に λ x y z.M は λ x. λ y. λ z.M の略であるからだ。
ざっと調べたが、>>25 以外に評価順序を定めなかった元々の理由としては
継続渡しによるプログラミングを前提にしていたからだそうだ。
ちゃんと一次資料調べろよ。
- 30 :
- 資料名もあげてないのに納得とはすごいな。31pだ。
- 31 :
- Schemeにおけるエラー処理の作法みたいのが知りたいんですが
何か参考になるものはありますか?
- 32 :
- R6RS には例外処理の仕組が用意されてる。 Java や C++ とよく似てるけど、
例外オブジェクト (R6RS用語ではコンディションオブジェクト) が継承関係だけでなく合成があるのが特徴的。
こういった形で用意されている以上、典型的なエラー処理方式のひとつなんだと思う。
SRFI にも例外処理関連のがいくつかあるからそれらも併せて参考にすればいいんじゃないかな。
でも、 Scheme は規格の序章に書かれている通り、機能を追加することより言語の弱点を取り除くことに主眼がある。
つまり、今回の例で言えば例外処理の機能を提供することよりも例外処理をしたいとプログラマが思ったときにそれを邪魔しないという意味。
プログラマがどういう方法でエラー処理したいと思っても Scheme 的には間違ってない。
多値で返すのだって、継続渡しで分岐するのだってそれらを使い分けるのだって自分でやりやすければいいと思う。
- 33 :
- 三行で頼む
- 34 :
- とりあえず
#f
を返しとけ。
- 35 :
- >>32
多値のないscheme処理系に多値は追加できないし
機能拡張つっても結局schemeの可能な範囲内でってことでしょ
5命令から構文糖作ったりできる程度
- 36 :
- 弱点取り除くのもいいけどさ、必要なものを持ってない、ってのは普通にダメだと思う
例外とかモジュールとか必須だろ?REPLはまだ仕様にないんだっけ?
いまのRNRSは何か中途半端だよ
- 37 :
- >>35
R5RS で多値が追加されたのは言語としてそれがないとプログラマが追加できないのがわかってるからだよ。
だから、多値のない処理系を前提として出すのはナンセンス。
- 38 :
- 作法を聞いているので回答するなら作法。
ただ、特に作法は聞いたことがないので一般的な作法を用いるしかない。
CodeCompleteの上が参考になると思う。
http://www.amazon.co.jp/dp/489100455X
- 39 :
- >>36
例外は call/cc と dynamic-wind があればその上に構築可能なので、
言語のコアとして必須とは言えないと思う。
モジュールは必要と昔から言われてて、
R6RS でライブラリという名前で実現した。
R5RS から R6RS への改定で REPL が削除されたのは
フェイズというか評価環境をライブラリ単位で決定する R6RS の形式に対してそぐわないからだと思う。
言語全体の仕組との絡みがあるので必要かどうかの段階から議論しなきゃ駄目じゃね。
俺としては REPL は各処理系の裁量で柔軟にやってくれてる R6RS の現状でいいと思ってるけど。
中途半端なのは仕方ない。 Scheme は完成されてないんだ。
言語に完成なんて無いけど Scheme はまだ活発に発展してるんだから
必要だと思うことがあれば声を上げろよ。
R7RS はまだまだこれから。
- 40 :
- そういう意見もあるから動作が変わるような構文は使わない方がいい。
FortranやCobolも時代に合わせて機能追加されているけれども、
全然使われてないらしいし、対外的にアピールするためだけの機能と
実際使う機能を区別していくべき。
- 41 :
- scheme コミュニティは、決めることを恐れているように見える。例え80点の解でも決めないよりマシだと思うんだが。
- 42 :
- 違う違う。単に人材が偏っているだけだ。
そういう「個人が決意を新たにすればなんとかなる」なんて信じられないだろ。
- 43 :
- >>41
プログラミング言語の機能はそれぞれの機能の連携で動くものだから、
80 点の機能同士を組み合わせたら64点だよ。
組み合わせるほどにぐだぐだになっていく。
CL はいい感じの妥協点を見出してはいるけど Scheme で同じようにやるのは芸がない。
っていうか CL に対する反発みたいな意識はあると思う。
- 44 :
- >>41
决めることを怖れているのではない
决めたのに誰も従わず、その決まりの権威がなくなり、いろんな決まりが好き勝手に大量発生することを怖れているのだ
- 45 :
- 分かるけど、そのせいで、undefinedオブジェクトみたいなアホなモノが定義されるハメになってる。そして結局、独自エラー処理や独自オブジェクトで書かれた scheme プログラムが世に満ちる。
schemeのこだわりは分かってるつもりだし、実現したら格好いい。でも、決めるのがあまりに遅くないか?それも人手不足のしいかもしれないけど。
- 46 :
- 例外とかヒアドキュメントぐらい定義しとけって感じ
規格オプショナルで
SRFIだと実装する気にならね
- 47 :
- 現実路線なのが欲しいなら CL 使えってことじゃないの。
- 48 :
- >>46
例外は R6RS で定義してるだろ。
複数行に渡る文字列も使えるようになってるので
あらためてヒアドキュメントなんてものが必要とは思えないな。
テキストから読み込んで文字列リテラルに展開するマクロとかも書けるし。
- 49 :
- >>45
返す値が未定義っていうのは使うなって意味だぞ。
これはまだ決まってないというよりは議論した上で未定義だと決めたものだ。
将来的に覆る可能性は低いと思う。
- 50 :
- R○RSなんかに頼らないで
俺Lisp作ったほうがよさそうだな
- 51 :
- >>39
> REPL が削除されたのは
> (中略)
> R6RS の形式に対してそぐわないからだと思う。
もっとくやしく。
- 52 :
- CL使うとか俺LISP作るとか俺言語作るとか、道は色々あるな。
まずは俺仕様の俺Scheme作って公開してみるのはどうだろう?
- 53 :
- schemeって並行プログラミングの類については
どういう議論がされてるの?
- 54 :
- Scheme使っている人はおしなべて新しい機能追加を求めているという前提が間違ってんだよ。
本当にScheme使っている人は途中で仕様変更するなんて望むわけ無い。
少なくとも俺はR5RSの機能が使えればそれでいい。
もろこの話だよ↓
http://msdn.microsoft.com/ja-jp/magazine/jj133828.aspx
- 55 :
- >>51
R6RS ではプログラム全体が letrec* であるかのように扱われるんだけど、
REPL だと「全体」の入力が終わらない内に一行ごとに評価せねばならないことから
ファイルに記述したプログラムを与えるのと同じようには扱えない。
っていうかよく見たら R5RS でも REPL については無くてもいいことになってるな。
- 56 :
- 自作処理系がRxRS に沿ってるかどうかチェックするプログラムってあるのでしょうか
自作処理系があるけど、自身を持って公開できない
- 57 :
- letrecとletrec*て、どう違うんだっけ???
- 58 :
- >>57
束縛する変数の評価順序が保証されているのがstar付きletrec
でなかった?
- 59 :
- >>35 >>37
多値のない処理系に多値を追加することは簡単にできるよ。
valuesは1引数以外のときに値をパックして、call-with-valuesがパックされた値を展開する。
受け取る値と返す値が一致してないとパックされたオブジェクトが見えちゃうけれど、
R5RSではわざとそういう場合を処理系依存にして、後付けの実装を許すようにしている。
R5RSで多値が追加されたのは、処理系による最適化を許すためと、コールとリターンの対称性のため。
- 60 :
- >>59
追加できるっていってもそれは多値というより分配束縛だろ。
継続に複数の値を渡せるってこととセットで初めて概念的にも多値って言えると思う。
- 61 :
- Sussmanが、多値って別に特別なデータ型である必要なくね?
とかR7RSの投票の中で言ってた気がする。
- 62 :
- >>60
ああ、call/ccも置き換えないとならなかったね。すまぬ。valuesがパックしてくれるとして
(define (call/cc f)
(call/cc-orig (lambda (c) (f (lambda args (c (apply values args)))))))
って感じで。
- 63 :
- >>48
マクロはそんなに万能じゃねーよ
バーヤ
- 64 :
- マクロっていうか、リーダマクロかな。
Schemerにはあまり馴染みのない機能だと思うけど。
- 65 :
- リーダーマクロと普通のマクロの違いって何?
evalに組み込まれてるマクロ機能か
readに組み込まれてるマクロ機能かの違いって事?
- 66 :
- >>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 :
- >>66
それいいな。
でも結局ファイルを読み込むならマクロ展開時でも実行フェイズでも効率に差なくね?
- 68 :
- 2pass の処理書くときにいいの、か?
- 69 :
- バッチコンパイルする処理系ならマクロ展開はコンパイル時に済ませられるから実行時に
読み込みオーバヘッドは無いしファイルそのものさえ無くてもいい。
そのかわり実行時に切り替えることはできないんで、どっちを取るかだが。
- 70 :
- Scheme はオワコンなの?
- 71 :
- >>61
多値は型じゃなくね?
- 72 :
- >>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 :
- >>70
死亡確認
- 74 :
- Racket のロゴマークはペプシコーラのパロディなの?
http://racket-lang.org/logo.png
http://www.pepsi.co.jp/images/logo.png
- 75 :
- ナウなヤングにバカウケだからな
- 76 :
- >>73
生存フラグ乙www
- 77 :
- >>70
大学生が実習で処理系を作れてしまうという枯れた仕様という意味で、オワコン
- 78 :
- Schemeの仕様が枯れてるとか意味わからんな。
現在進行形で仕様改訂真っ最中じゃん。
- 79 :
- >>70に反応ないから自分でレスつけたんだろ
予定を繰り上げて
- 80 :
- >>78
仕様が枯れている = 大学生でもバグ少なく処理系を実装できる
オワコンだからこそ普及した言語なのに、仕様を複雑にして衰退の道を歩もうとしているのがSchemer
- 81 :
- 仕様を複雑にというのはちょっと違うと思う。
曖昧になってた部分を埋めたという感じだろ。
R6RS はライブラリを過剰にしてしまったところはあるけど、
基本的な部分はそれほど複雑さが増してるわけじゃない。
R7RS が samll と large を分けたのは R6RS の反省もあってのことだろうし、
そう極端に複雑になることはないよ。
- 82 :
- 枯れてると大学生でも以下略ってことは、ANSI INCITS 226-1994 (R2004)もそうなのか。
大学生すげえなw
- 83 :
- 大学生なら実習でscheme処理系作ってユニフィケーションの高速化やってprologの実装までやってくれないと
- 84 :
- >>83
それ何処の大学?
- 85 :
- valuesって型で実装するものだと思ってた
- 86 :
- どんな実装であれvaluesを扱うにはそれ用のフラグがどっかにある
つまり型であると見做せる
では何故これがファーストクラスではないのかと疑問に思う
- 87 :
- 関数引数の個数が関数の型の一部であるのと同じ程度には型に関係してるけど。
>>86 フラグって? 多値の個数を判定する仕組みがどこかにあるのは確かだけれど、
その実装はいろいろあるよ。それとも>>86は「n引数の関数なんて無い。あれはn個の
要素をもつ1つのタプルを渡してるんだ」っていうタイプ?
- 88 :
- >>77
すばらしいことではないか
- 89 :
- >>77 は「枯れた」の意味を勘違いしてんのか
- 90 :
- >>89
「UNIXは枯れたOS」とかで使う「枯れた」だと思う
http://e-words.jp/w/E69EAFE3828CE3819F.html
- 91 :
- lispのschemeを、やってみたい。
プログラミング初級ですが、できますかね?ニート26歳高卒。
- 92 :
- >>91
とりあえず始めてみたら?
始める前に結果知りたがるからニートになるんだよ。
- 93 :
- >>92
了解
始める
- 94 :
- Sagittarius Schemeってライブラリとか結構充実してるんだね。
キーワード引数とか、機能面ではGaucheの影響が強い印象。
http://code.google.com/p/sagittarius-scheme/
- 95 :
- キーワード引数については作者のブログで「Gauche風の」と書いてあるから直接影響を受けているのは間違いない。
(更に大元は Common Lisp だけど。)
Sagittarius は作者自身が業務に使ってるみたいだからね。
実用指向という意味では Gauche と方向性が近いかも。
日常的に使うとなると、筋の良さや整合性よりも、短かく書けたり覚え易かったり、
いざというときのワークアラウンドがある方が大事だったりする場合も有って、
そういう泥臭さを許容する感じが似てると私は思う。
もちろん、筋の悪さに目を瞑りすぎるとカオスになるのでそこらへんの匙加減の上手さが使い勝手を良くしているんだけど、
そういうバランス感覚はセンスというか現場の感覚なのかな。
- 96 :
- はちみつ餃子とSCHEME餃子は同一人物?
コテの由来も気になる。
- 97 :
- 全部俺の自演
俺とお前しかいない
だとしたら?
- 98 :
- 昔のログを読み返してたらハンバーグ餃子のときもあった
- 99 :
- >>92
名言だな
- 100read 1read
- 1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
Mathematicaプログラミング 質問箱 その1 (335)
【O3D】HTML5用 3D API WebGL 【Canvas:3D】 (461)
【汚物】痛い変数名・関数名【破廉恥】 (739)
強いAI(人工知能)ver0.0.1 (963)
初心者の俺が初めて覚えるプログラム言語 (471)
推薦図書/必読書のためのスレッド 69 (201)
--log9.info------------------
【JFL】MIOびわこ草津Part12【滋賀】 (585)
〔球技専用〕全国のスタジアム査定A〔陸上競技場〕 (341)
☆KEEP ON FIGHTING 栃木SC <一枚岩の168>☆ (443)
ZZZZZZ FC町田ゼルビアPart48 ZZZZZZ (268)
【toto】サッカーくじBIGスレ part15 (228)
【果てなき】カマタマーレ讃岐 34玉目【挑戦】 (956)
◆◇◆ 横浜F・マリノス part978 ◆◇◆ (759)
ヴァンフォーレ甲府、遂にJ1昇格!!591 (272)
◆Honda FC Part 13◆ホンダFC (715)
新・フットサル好きな人みんな集まれ☆その1 (916)
■フットボール専用スタジアム PART72■ (600)
【ダイショー】福岡J・アンクラス6【福岡トヨタ マルタイ】 (591)
【J1】定点観測してみよう!!のスレ その176【J2】 (738)
AAジュビロ Part19 (788)
秒刊コンサドーレ2149日目☆★☆札幌総合スレ☆★☆ (594)
【中村俊輔】ていうか(ゴールは)まぐれなんだよね841 (1001)
--log55.com------------------
【速報】大雨特別警報はすべて解除
【速報】山手線、運転再開 ただし本数が非常に少ない
【最強台風】大型の台風19号 福島から太平洋に抜ける 中心気圧は975hPa ★98
【千曲川】堤防決壊 二階まで浸水も ベランダから助け求める人の姿 長野市穂保 ★6
【首相動静】安倍、台風19号前日の18時半から21時半まで超高級フランス料理店で森ビル社長と会食 22時前にやっと公邸に戻る★2
【グルメ】ミスド、“ホット” タピオカドリンクに「うめぇ…」とネット上で衝撃走る
【悲報】Amazon、都内在住プライム会員で今日(日曜)頼んでも最速で水曜日到着 耐えられない
【最強台風】大型の台風19号 福島から太平洋に抜ける 中心気圧は975hPa ★99
-