□その他(3)□
初心者が集うIRC(布教してくれる先生も大募集です)。
irc.scenecritique.com
port 6667
チャンネル #Lisp_Scheme
Schemeのテストコード書いたり、簡単な実行したりコードさらしたりするにはここへカモン。
ttp://codepad.org/ コードを書いて実行した時のURLを記録しておけば、実行結果も一緒にさらす事が出来て幸せです。
なぜかテンプレサイトに繋がらなかったり、連投規制に引っかかったりして苦戦しましたが、 テンプレは以上です。補足等、よろしくお願いします。
1さん大変お疲れ〜
>>16 wikiの管理人なんですけど、あそこは時々つながりにくくなる。Rubyの本拠のNACLが
運営しているフリーwikiホスティングなんだが…。Rubistを刺激したく無いけど。少し頑張っ
て欲しいと思う。移動させたいという話が出てきたならどうぞコピーしていってやってくだ
さい。と思ってます。
>>1 これは乙じゃなくてポニーテールなんたらかんたら
(乙 (rref 1))
::|
::| ____
::|. ./|=| ヽ. ≡三< ̄ ̄ ̄>
::|. / |=| o |=ヽ .≡ ̄>/
::|__〈 ___ ___l ≡三/ /
::|、ヽ|.|┌--、ヽ|/,-┐| ≡/ <___/|
::|.|''''|.\ヽ--イ.|ヽ-イ:| ≡三|______/
::|.ヾ |.::. .. ̄ ̄| ̄ /
::| ';:::::┌===┐./
::| _〉ヾ ヾ二ソ./ こ、これは
>>1 乙じゃなくてスラッガーなんだから
::||ロ|ロ| `---´:|____ 変な勘違いしないでよね!
::|:|ロ|ロ|_____/ロ|ロ|ロ,|`ヽ
::| |ロ|旦旦旦旦旦/ロ/ロ|旦,ヽ
::|ロヽ 旦旦旦旦旦./ロ,/|::旦旦)
::|ヾ旦旦旦旦旦旦,,,/::::|、 旦旦|
はやるとしても 車に例えるとレース用だろ
23 :
デフォルトの名無しさん :2008/10/26(日) 00:01:49
'(1000を とった から lispは これからは やるよ)
>>23 (eq
>>23 >>1000 @前スレ) ; nil
(setf message '(1000を とった から lispは これから はやるよ))
(eq message
>>1000 @前スレ) ; T
何で埋めちゃうんだよ… 月曜ネット再開通するまでに前スレ落ちたらなぁ、 いいか?ううう恨むからな。コラ! 1乙\(^o^)/
□その他(4)□
21世紀になってUnixはないでしょって。
これはね、SolarisがとうとかLinuxがどうとかというレベルじゃないですよ。
もうひとつ上のレベル。
OSという本質的な意味ね。IBMとかが「Linuxで!」なんて聞くと「え?っ!」て思うもん。
「あなたたち、IBMでしょ。それはないんじゃないですか?」って。
そりゃMulticsの時代にMulticsってヤバイからUnixねって、それって何10年も前の話でしょ。
http://sdc.sun.co.jp/news/200201/danwa01.html
Who wares PIYO-PIYO
>>30 管理人は名ばかりで少しの更新はしてますが、多くの更新はlisp系スレッドの住民の
方々によるものなのです。みなさんの協力があってこそなりたっていまして、こちらこそ
協力にありがとうです。
>>28 いや、いわんとしてることはわかると思うけどな。
Unix lile OS の次を模索してないようじゃだめでしょ、というか。
>>33 あるのでしょうか?mach?まだよくわからない hurd ?
Plan9
つうか、昔のUnixと今のUnixじゃまったく別物でしょ。
Lispマシン再考ってか。
cpuはともかくメモリは連続アドレスの今の方式以外考えられないよね? lispマシンって何が弱いんだったっけ…。
仮想マシンじゃダメなん?
>>27 に書いてあるような100万スレッドって、スケーラビリティを念頭に置いてるのかな?
既存のOSの発想では不可能でしょ、JK。
mach や hurd もその点では同じ。Solarisも大したことないし。
どのOSでも大した違いが無いということは、裏を返せば共通する不満点があるんだってことだ。
それを提示できるのはCSの人間だって?それはどうかな。
>>37 んー、魅力的。ICOT ってlispでしたっけ?prolog?
>>36 Dr.は、もっと根本的な変化を望んでるんじゃないの?
>>42 たしかに奇想天外なアイディアがほしいところですね。やっぱりICOT?
10年と570億円をかけたプロジェクトが完成したのはアプリケーションのほとんどない並列推論システムだけだった。 成果が産業に影響を与えることはなく、学術振興と人材育成に寄与しただけだった。その結果がDr.・・・ 応用の進展を阻んでいるのはソフトウェアが存在しないからであって、強力な推論マシンがないからではない。 ソフトウェアが既にたくさんあって、強力な推論エンジンの出現を待ちわびていると思うのは間違いだ。 もし、応用分野があればLispなら素早く書き安いだろうが、応用分野を指摘できていない点で内容が無い文章だ。
>>44 んで、君なら応用分野を指摘できるの?
できないんならDrを批判する立場にないね。
47 :
デフォルトの名無しさん :2008/10/26(日) 17:19:04
いまどきLispって使えるの?
44 じゃないですが。自然言語の相互翻訳は、今はどの程度まで到達しているのでしょうか?
>>49 分詞構文とか仮定法(接続法)はまったくだめですね。
52 :
51 :2008/10/26(日) 19:00:59
雑談ですみません。英語->日本語の話です。 とあるサイトの経験では韓国語は割りといいみたいです。日->韓->日で違和感がないですから。(というか違和感が発生しないように元の日本語をかいています。 でも、英語<->日本語が実用になるのはいつの話か。 これを大掛かりなシステムでがんばろう、という団体は現れるのでしょうか。
エンコリ以外にあるのかね
NAVERとかの日->韓->日は評判が良いらしい。 英語<->日本語が実用になるには文法のルールをしっかり見つけて登録するしかない。 文法の推論エンジンに問題があるわけじゃない。 ビジネス的には英中のプライオリティが高いから日本語は後回しだと思う。 現実問題として、食品・医薬品分野の品質保証で英中自動翻訳は急務。 世界中から引き合いが在る。
body1 body2 ...は1個以上の式にマッチする body ...は0個以上の式にマッチする 規格上式を本体に1個以上持つ事が要求されているので前者で記述されている ちなみに...も1つの識別子だからbody1 body2 ...は3要素になります
>>56 ばっちり理解できました。
ありがとうございます。
한국의 대학생은 언제나 새타령 을 춤추고 있습니다.
下賤な文字を見せるなボケ
하천인 문자를 보이지 말아라 노망
モールス信号かよw
모르스 신호인가
64 :
デフォルトの名無しさん :2008/10/26(日) 23:03:36
なんか?記号がいっぱい出るんだがなにがあった?
翻訳どころか文字コード変換すら覚束無いみたいな
मोर्स कोड?
וכן תרגום של תווים לא יכול להיות קוד המרה.
Có rất nhiều biểu tượng
ภาษาประจำชาติเอาออกคนไม่เข้าใจ เกณฑ์มาตรฐานการศึกษาต่ำ
ماذا حدث؟
☠実体参照使えたんでしたっけ?
使えますね#x270c;
จะดูถูกเหยียดหยามคนญี่ปุ่น
ونحن في اليابان للفوز
צ'יאונה סוגיהארה הוא כיבוד
जापानी लोगों को पैसे से प्यार है.
印度也喜欢钱
जैसे कौन सी प्रोग्रामिंग भाषा तुम हो?
العنصرية
81 :
65 :2008/10/27(月) 00:22:29
朝鮮語だけ?になるのはフォント削除したからだった
Todos los Lisper japonés es racista, sadlly.
みんな暴走しすぎ。
1さん乙です
(cons テンプレ 苫米地) (テンプレ? 苫米地) =>#f
宣伝だったのか・・・せめて日本語でやれよ
言葉と言えば、アラビア語のLispは左右逆なのかな。
(((c cc !tes) (c) adbmal) noitaunitnoc-tnerruc-htiw-llac)
文の中でも英単語とか入るとそこだけ向きが変わったりしたような気がする。
日本人ならLISPも縦書き。
苫米地英人ってオウムシスターズと結婚した人でしたっけ?
関数型言語はrepl以外の入出力が何もないときは楽だな。 入出力の処理を自分でやるときは手続き型のほうが自然に感じる。
>>92 ということは日本語のlispは縦書きですね
これは恥ずかしい
QXは縦書きが出来る以外利点が無いな。
>>103 他に縦書きが出来てさらに他の利点もあるものをあげてくれよ。
emacsは縦書き出来ないし、なんかあるの?
なんだそりゃ
Windowsだけなのか?
アプリケーションのほとんどない並列推論システムが死んだように、 他の利点の無いエディタも死んでいる。 死んで次に続かないものには意味を見い出せない。 あれは駄目、これは駄目と否定するだけの人間も死んでいる。 今、CSに必要なのは生きている人間だ。
lispで作られたゲームってありますか?
イプシロンって、組み込んだピンボール出たんだっけ?
111 :
110 :2008/10/28(火) 20:11:04
リンク先にはジャック×ダクスターもそうだと書いてありますね
imagicaのパーフェクトライフもそうみたいだぞ
おお!そんなに活躍してるゲームにlispがあったんですか! lispを勉強しようと思ってゲームでも作れたらいい目標になるなって思ってたんですけど lispではそういうゲームエンジン的なものは無料で配布されてたりしないんですか?
かなり古いゲームだし、それそのものが Lisp で書かれたわけではないが、 マザーの開発に Lisp が使われたりはしたみたいだな。
>>110 作品名言えないけどプレステで使いました
You! 言っちゃいなYo!
ターゲット上で Lisp を動かしたわけじゃないけど サターンのゲームで使ったお
Lispが仕事なんて裏山志井。 ゲームじゃないけどAutoCADもLispでしょ?
AutoCADのAutoDeskはMayaもSoftimageも買収したそうな。 ということは・・・ CGシステムの標準スクリプトはLispになる!? ああ、シンボリクスの夢よ再び(笑
>119 マジレスするとそれはない。 C++か.NET
>>120 いくらなんでもC++は無いだろう
.NETはスクリプトには関係ないし
>>119 AutoLispってとっくにやめて、VBA組み込んでるんじゃなかったっけ?
>>120 さすがにC++じゃ機能拡張用プラグインでも作るのかって勢いだろ。
CAD/CG作成者にLisp覚えてくださいっていうよりきついわ〜
>>118 > ゲームじゃないけどAutoCADもLispでしょ?
なんかlisperの人たちでAutoLisp使ったことが無い人が多いみたいなので
言っておくけど、AutoLispは相当古い仕様だぞ。
letすらない。activexは制御できるが。
今は VBA 使えるからそっちで作った方がマシかと。
IronSchemeの存在意義がわからない。F#だけで十分だろ。 なんでわざわざSchemeで.Net使う必要があるんだ。
俺が使いたいのは Schemeであって、関数型言語じゃないんだ! て人向け。
何がIronなのか判らない
.NET搭載の時点で、もはや教育のための言語ですらない。 Schemeの利点を無視している。
生きるって何なのか判らない
教育用ならC#かJavaで手早く実装してしまえばいいのに
LispはLisperの妄想のために存在する それは生きる喜びに直結するのでLispには価値がある
>>108 AngbandをCLで書き直したLangbandっていうのがあるみたい。
最終的にはスクリプトもJavaScript系に固まってくんだろうなあ、いろいろと楽だから。 もしかしてEmacsもEmacsScriptを搭載してアイコンも牛ではなくなってしまう日は来るのか?・・・
むしろECMAScriptで実装されたEcmasというエディタが主流になったりして
JavascriptってLispの方言でしょ?
ばれたか\(^o^)/
ワロタw
同意ノ
T
住人が少ないから必要ないだろ。
荒れてる原因は最近住み着いた奴なのも明白だし。
もしかしたら
>>141 じゃないかという気がしている。
ID が付くと、関係無いスレにまで粘着してくる奴が居るから嫌だよ。 馴れ合い系の板ならそれでも良いかもしれないけど、ここはそうじゃないからね。
>>141 そこは実効性の無いガス抜き用のスレでしょ。
いたずらに議論を煽るのは感心しないな。
コピペに反応するなよ・・・
専用ブラウザでみてるからつまらん煽りなどをあぼーんするのにも役に立つ<ID
賛成だけど こんな過疎スレじゃ役に立たない気がする
自治スレでやれよ だれも書き込んでないけどw
板全体の問題だからここで議論するこっちゃないよ。
Visual Scheme 2008 (Microsoft .Net Framework 3.5) -- R6RS compatible Visual CommonLisp 2008 (Microsoft .Net Framework 3.5) -- Fast Incremental Compiler Visual EmacsLisp 2008 (Microsoft .Net Framework 3.5) -- GNU Emacs compatible
MS超関係ねぇー!
R5RSでキボンヌ
(car 'R6RS) => R (cdr 'R6RS) => R5RS
5と6の違いまでまだわからないのですが、 上位互換ということですね?
釣りなら他所でやってくれないかな?
なんでそんな殺伐としてるの? 以前のあなたはそんな風じゃなかった…
R6RSが出てから、全てが変わってしまった……。 全部R6RSが悪いのよ!
>>160 Gauche on Rails作ってる人だよね。
頑張ってるなー。
Gauche on Railsって今後バージョンアップとかしていくのだろうか。 Rubyユーザが流れてきたりすると嬉しい。
>>163 schemeの人って排他的な集団かと思ってたけどそうじゃないのか
rubyはキチガイの声がデカイからあまり関わりたくない 以降禁止といこうか
P言語の時代もそろそろ終わりだな お前らの時代が少しだけ近づいた
なにをいう、これからはPrologの時代。 高度な人工知能を構築して国産OSをつくろう。 σプロジェクトの始まりだ。
プロジェクト名はωにしようぜ
(・ω・)呼んだ?
170 :
デフォルトの名無しさん :2008/11/07(金) 14:08:51
Schemeのプログラミングに関する質問なのですが、 教科書通りに打っているのですが出力が本と異なります。 (lambda (a b c d) (* (+ a b)(+ c d)) 2 3 4 5) で49がでるはずですが #<procedure> が代わりに出ます。どうしてでしょうか。教えて頂けると助かります。
171 :
デフォルトの名無しさん :2008/11/07(金) 14:10:45
170です 解決しました。( ) が足りてませんでした。
そうそう、初心者は括弧の数を数えるところから始めなきゃならん 球技のボール拾いと同じだよ がんばりたまえ
R5RSの記述についてお教えください. p.31の最後の例 (call/cc procedure?) => #t の意味がわかりません. 最初は (procedure? call/cc) のtypoかと思いましたがどうやら上のS式で正しいようです. call/ccの引数には「1個の引数をとるclosure」しか来ないと思い込んでいました. procedure?のかわりにlist?などの1引数の手続きを与えてもエラーになります. どのように解釈すればよいのでしょうか.よろしくお願いします.
>>174 (call/cc list?) ってエラーになる?
176 :
174 :2008/11/07(金) 16:50:52
>>175 おっと失礼.別のエラーと混同してました.エラーにならないようです.
(call/cc list?) (call/cc string?) (call/cc vector?)などは #f を返しますね
procedure?は評価されるとclosure。 call/ccはそのclosureに現在の継続を第一引数として渡し呼び出す。 継続は「手続き」なので#tが返る。 まっとうな処理系ならlist?でも#fが返るだけでエラーにはならないはず。
178 :
174 :2008/11/07(金) 17:20:05
>>177 >procedure?は評価されるとclosure。
不勉強で申し訳ないのですがこの意味がわかりません.
procedure?についての記述はR5RSの3.2章と6.4章にしかないのですが,どちらにも見当たりません
(call/cc (lambda (cc) (procedure? cc))) ;=> #t (call/cc procedure?) ;=> #t procedure?は(lambda (cc) (procedure? cc))と「同じ」
>>177 はprocedure?をclosureと説明してるが
初心者への説明としては適切じゃないな。
closureを含めて手続きと呼ぶし、
procedure?はprimitiveかもしれない。
どちらにしろ(procedure? procedure?)は#tを返す。
そもそも「手続き」という訳し方が気に入らない。
関数じゃダメなん?
関数 - function 手続き - procedure クロージャ - closure 1対1対応をつけて、規格の用語法に従ったほうが最終的に間違う可能性が 少なくて済む。
>>180 r5rsにprocedureと書かれているものを「関数」と訳すことはオラにはできね。
>>178 closureという単語は使わなかった方が良かったかも。
r5rsでは手続き(procedure)と呼んでいるのでこちらを使おう。
procedure?という変数には「与えられた引数が『手続き』であることを調べる手続き」が
束縛されている。
変数procedure?が評価されると評価結果は「手続き」となる。
(lambda () (...))という式も評価されると評価結果は「手続き」となる。
クロージャが自由変数の参照を含む関数なら その対となる物はコンビネータですか?
>>183 > procedure?という変数には「与えられた引数が『手続き』であることを調べる手続き」が
> 束縛されている。
procedure?という変数は「与えられた引数が『手続き』であることを調べる手続き」によって束縛されている。
あげあし取りスマヌ
手続きつーと副作用込みみたいな気がして気持ち悪いんだよ。
まあ実際そうだけどさ。こんな事言っても最近の奴には判らんかな。
>>181 クロージャは閉包
procedure?という識別子は「「与えられた引数が『手続き』であることを調べるプリミティブ手続き」を初期値として収めている場所」に束縛されている。 あげあし取りスマヌ
>>184 もしかして「自由変数を一切持たないクロージャがあったならば、それをコンビネータと呼んじゃってもいいのか?」っていう質問なのかな?
>>186 副作用という言葉の定義が気持ち悪いな
引数が同じとき戻り値が同じかどうか?
「同じ」の定義は?
値を求める以外の事をしたらそれが副作用だろ。
第5世代コンピュータってすごかったんだなぁ。
本気で言ってる?
193 :
デフォルトの名無しさん :2008/11/08(土) 08:18:08
本気だよ。
すごい【凄い】 1ぞっとするほど恐ろしい。非常に気味が悪い。「―い目でにらむ」 2びっくりするほど程度がはなはだしい。大層なものだ。「―い人気」 3(連用形を副詞的に用いて)程度のはなはだしいことを表す。「―く寒い」「―くおもしろい」
まぁハードウェアで(マイクロプログラムで)論理操作をやるマシンとしては すごい。MOPS値とかなー 問題はインテルプロセッサの高速化と廉価化が非常識だったことであってw
ICOTは、荘園モデルとかおもしろかったけどね。 OSがやるようなリソース管理をPrologの世界に持ち込んで、 メタ管理できるようにする奴。 www.tulips.tsukuba.ac.jp/pub/dl/e_thesis/ko/sato2003.pdf ELIS/TAO以来、Lisp界はこういうのないね。 地味な基礎研究だけど面白いのに。
竹内先生ってICOTに誘われても断ったみたいだけど なんで?
シグマ計画を実行したのは誰か それが問題だ
commonLispの統合開発環境か。
201 :
デフォルトの名無しさん :2008/11/08(土) 21:04:10
202 :
184 :2008/11/08(土) 21:45:28
>>188 自由変数を持たない関数をクロージャと呼んでいいのか?くらいの質問です
実装によっては環境を閉じ込めてるからそれもアリなのかもしれませんが
自由変数の参照が無い関数はもはやコンビネータなのでは、と思った次第です
0個の自由変数を持っていると考えればいいだけでは
0個や1個でも多値と呼んでいいのか? 虚部が0でも複素数と呼んでいいのか? よさそうだな。
>虚部が0でも複素数 数値を実数の世界で見るか、複素数の世界で見るかでその答えは決まります。
副作用を持たない関数をてつづk
同性関係で攻め側を多値と呼びます
ウホッ
L:What is (male male) R:Who knows, but it works very hard.
>>196 基礎研究であっても、現実的成果がないと廃れちゃうんだよ。
今やるべきことは、応用を考えることだよ。
Coqで定理証明〜なんてやっていても仕方が無い。
Coqで定理証明って応用じゃん!
>>212 こういう風潮がある時点で学究活動なんて終わってるな。景気も悪いし、結果、結果ってわめくばかりでどうしょうもないw
じゃあ勝間を総理大臣にして日本をGoogle化しようぜ。
一億総モサド化だな
>>214 ぶっちゃけ、終わってるのはLispなんではw
Lisp界に閉じたようなことばかりで、
他に影響を与えるような新しいことが出てきてない。
他への影響? 他言語の設計者達が勝手に受けまくってるよ。今でも。
>>217 closure(閉包)が〜、と言っている以上、活動はその世界で
閉じてないといけないからな。
それは過去の資産でしょう? 今は新しいことが出てきてない。
>>218 だから、相対的にどんどん価値が下がってるんだって。
有用な技法を殆ど盗まれちゃったら、Lispなんて単なる括弧の 多い普通の言語に成り下がるんだよ?
>>222 LIsp のマクロに対抗できるだけの単純でかつ強力なマクロを持つ言語を
私は知りませんが?
そこでもしかしてC++とか言っちゃうひと?
LIsp(藁)使いは帰ってくれ
>>223 今現在じゃなくてこれからの話だよ。
それに、そういう強力なマクロ機能を他言語でも実現させてみよう、
と他言語の設計者はがんばれる。けど、Lispは今は何もできてない。
その時点で負けてると思うよ。
当たり前の話だが、いつか食い尽くされる。
それに、廃れているだけで、機構自体はあるかもしれないよ。
>>225 がんばってもがんばっても追いつけないものに対して、
がんばれるほうがすぐれている、と判断するんですね。
面白い評価のしかたです。
他の言語でLispと同等のマクロを実現したらLispになっちゃうw
>>222 Lispの一番「強い」ところがその括弧と(正確にはS式と)不可分だから、
「括弧の多い普通の言語」という成り下がり方はしないだろうな。
Lispが「普通の言語」になる時(最も「強い」部分がLisp固有のものではなくなる時)は、
他の言語も括弧だらけになってる時だから、Lispを表現するのに「括弧の多い」という形容は
もはや使われていないはず。
>>226 大概の問題は、工学的手法で解決できるものだよ。日本の得意分野じゃん。
完全な再現はできないかもしれないけれど、その過程で新たな技法が
見つかることもよくある。
最悪、達成できなくても、それなりの成果ってでるよ。
何もしなかったら何もでないけど。
>>222 マクロよりはちょっとだけ落ちるけど、
名前呼びができる言語はLispに肉薄してると思う。
まあ、Lispが最強なことには変わりないが。
One significant application for LISP has been as a proof by example that most newer languages, such as COBOL and Ada, are full of unnecessary crocks. When the Right Thing has already been done once, there is no justification for bogosity in newer languages. COBOLとかAdaの時代にも散々言われていたことを蒸し返してるだけだろ。 比較対象がJavaとかPythonに変わっただけだなw
名前呼びって Algol の Call by name ? Algol 以外にメジャーな言語で Call by name の(ある)ものってあったっけ?
非S式に(Lisp的な)マクロを積もうってのは、 DylanとかBooとかで試みられていたような あと最近だと、高校生が設計したとかで話題になってたCyanとかもか こういうアプローチに利点があるとすれば、可読性かなあ 上で出てたShibuya.lispの動画でL4uの作者が言ってたが、 S式はフラット過ぎて人間に読みづらいという感覚はアリだと思う (もちろんフラットさこそが柔軟性を生んでいるわけだが)
遅延評価は利用されない式を評価しないようにはできるけど 利用されるけど評価されないという式を扱えない。 名前呼び+α変換もプログラマブル、という機構はその欠点はなくせるけど 式の変形は人間が行わなければいけない。
もうLispは死んだ。括弧のないS式が発明されて死んだ それを人はPythonと呼ぶ。NorvigもPython使いに転向した。 MSもGoogleもAppleもNASAもみんなPythonを使ってる。まあお前らも はやく目覚めるといいね、と。
大企業がみんなにやらせる言語としては、Pythonのほうが良いと思うよ。 それはこのスレの多くが思ってることだろう。 ユーザーのレベルを問わない武器としてLispを勧める奴は、今も昔もあんまりいないでしょ?
個人的には、最近あんまりLispコードに「Lispならではの読みにくさ」を感じなくなってきた。 良いんだか悪いんだかわからないけど・・・。 巷で言われる「Lispコードの読みにくさ」を全否定する気はもちろん無いけど、でも 閉じ括弧の束を、何の意味も無いのにわざわざ見つめて「うわっ、括弧ばっか」とか言ってる レベルの言説も多いから(見る必要が無いから、少しでも視覚的に存在を小さくすべく纏めてるのにね)、 いちいち真に受ける気も無いんだよなぁ、あんまり。
でもLispって使えるようになって便利さがわかってきても やっぱり括弧の対応関係のバグには悩まされるのが現実。
括弧の絶対数が多くの場合に多いのは事実だと思うが。 (なんていうかな、おなじ項数の式になったとして。 より少ない項数で書けるかどうかの比較も絡むので これ以上は立ち入ると危険。)
オールドタイプの乗る量産機にはインコム載せときゃいい ニュータイプ専用機にはサイコミュ載せときゃいい オールドタイプにサイコミュ機乗せたり ニュータイプに量産機乗せたりする必要はない
>>240 そうやって、どんどん廃れていってるわけだ。
エディタ支援の無い環境で作業しろと言われたら、俄然苦しくなる。 あと、インデント無しで作業しろ、なんてことをもし言われたら(ねーよw)、やっぱり滅茶苦茶苦しい。 「エディタ支援とインデントに期待できない状況」なるものを仮に想定するなら、 Lispの扱いにくさは最悪に近いと思う。確かに。 でも現実には、どっちもまず間違いなく存在を期待していいから、 そんなに困らないというか、別段他言語との差を感じないというのが個人的な現状だなぁ。
mのないviで書くときは手で字下げしてるし 字下げがないと読みにくいのは他の言語も一緒 字下げがない場合は括弧が多いほうが読み易い自分はマイノリティなのかな
>>241 80年代のレスならそれで正しいと思うけど、
21世紀も8年が過ぎようという今「どんどん廃れていってる」ってのは、
一体いつの普及度と今を比べてるのか、よーわからん表現だと思う。
>>235 > MSもGoogleもAppleもNASAもみんなPythonを使ってる。まあお前らも
> はやく目覚めるといいね、と。
Pythonでできる仕事はPythonでやればいい、
PCLの例題をPythonで書き換えた本を、
出せるもんなら出してみろってだけ。
あ、エディタ支援って括弧表示のほうか
構文強調表示もね。w
さいきんSchemeの勉強をはじめたけど Emacsなしではつらいと思います 普段はvim使ってるんですが Pythonをカッコの無いS式と呼ぶのは、なんか物凄く違う気がしますよ Pythonのコードとデータは別物だし コードも式と文が分かれているし Pythonのリストはベクタだし マクロもシンボルもないし 末尾再帰の最適化もしません Pythonの強みは、全然違うポイントにあると思います
>>245 Pythonはあらゆる仕事ができるし、できない仕事はやる価値がない。
PCL?未だにPracticalとか言ってる時点で終わってる。
Pythonはすべてが実務だ。
>>249 Peter Norvig「Lisp プログラマのための Python 入門」より
> 12. Python にはマクロがない。 Python はプログラムの抽象的な構文木に
> アクセスする機能を もっているが、これはなにもびっくりするようなことではない。
> このモジュールの長所は理解するのが簡単だということで、 5行ほどのコードを
> 使って、5分かそこらで次のようなものを手にすることができた:
>
> >>> parse("2 + 2")
> ['eval_input', ['testlist', ['test', ['and_test', ['not_test', ['comparison',
> ['expr', ['xor_expr', ['and_expr', ['shift_expr', ['arith_expr', ['term',
> ['factor', ['power', ['atom', [2, '2']]]]], [14, '+'], ['term', ['factor',
> ['power', ['atom', [2, '2']]]]]]]]]]]]]]], [4, ''], [0, '']]
>
> この結果にはかなりがっかりした。Lisp なら、これと同等の構文木は (+ 2 2) である。
> この構文木なら誰にでも使えるが、 Python のこんな構文木をいじれるのは本当の
> エキスパートだけだろう。
(以下略)
糞なMSやアホなGoogleや詐欺なAppleや貧乏なNASAが使ってる言語なんか 使いたくないな
252 :
デフォルトの名無しさん :2008/11/09(日) 16:29:33
navi2chお?
Emacs使ってる奴が多いってことかw
emacs 使わずに lisp なんて触れない。
専ブラのバージョンアップもしてない情報弱者様登場!
257 :
174 :2008/11/09(日) 17:46:20
どうも議論が高度な話にすりかわってしまったようですので質問しなおします. >p.31の最後の例 (call/cc procedure?) => #t の意味がわかりません. call/ccのはたらきは「continuatoinを生成すること」だと理解していましたので, それがなぜこのような評価結果につながるのかがわからないのです. これまで見たcontinuationの使い方はたとえば (define cont #f) (+ 20 (call/cc (lambda (k) (set! cont k) 30))) ;=>50 ;continuation生成 (cont 70) ;=> 90 ;continuation再開 のようなものばかりで,質問の例の使い方をこの用法に対応させて考えることができません. なにとぞよろしくご指導のほどお願いします.
(define cont #f) (call/cc (lambda (k) (set! cont k) 30)) (procedure? cont)
「継続も手続きの一種だから」でいいのかな?
多くの人が必要としているのは 拡張ライブラリ。電池。いわゆるバッテリー。
apply出来るからね。
グレアムの本で読んだと思うけど、世紀の大発明セグウェイの 制御プログラムってPythonで書かれてるらしいね。
usenet の comp.lang.scheme っていうだけで敬遠する
265 :
174 :2008/11/09(日) 19:01:18
>>258 >>259 そうか!call/ccはcontinuationを生成するだけではなくて,その作ったcontinuationを
引数の手続きに「渡す」ところまでやるわけですね!R5RSのp.33左下にある
The procedure call/cc packages up the current continuation as an
"escape procedure" AND PASSES IT AS AN ARGUMENT TO proc.
の意味がようやくわかりました. 今まで全く理解できていませんでした. お教えいただきましてありがとうございました!
>>263 グレアムが書いてたのは、ViaWeb同僚のトレバーが作った「セグウェイもどき」の話。
loopマクロみたいにpythonマクロとかrubyマクロとかperlマクロを書けばいいじゃない
なんだもどきか、、早とちりだった。 ()の対応見直してから寝ます。
call/ccが引数に渡す継続手続きは普通の手続きとは違う。 末尾コンテキスト以外で呼び出しても あたかも末尾呼び出しされたかのように返ってこない。 これさえなければ参照透明性を侵さないと思うのですが。 末尾コンテキスト以外での継続の呼び出しなんてトリッキーなんだから 普通の手続きとして実装すればいいのに。
vallink っていうフリーのリンカがマジでマクロ使いまくりで Pascal っぽい雰囲気になってたのを思い出した。
RLISP(笑)
久しぶりに読んだが、こんなに面白い読み物だったのかw いろんな意味で涙が出てくる
nPnのpermutationを求めるものを作ろうと色々探している途中でwebで拾ったS式です これってrotateを一般化した奴だと思うんですが、 俗には何っていうものなんでしょうか? map restとかで検索してもでてこないんで あとこのS式を導き出す過程みたいなのも知りたいです (define (map/rest f l acc res) (if (null? l) res (map/rest f (cdr l) (cons (car l) acc) (cons (f (car l) (append acc (cdr l))) res)))) これを使ってpermutationはこう書けるようです (define (permutations l) (cond [(null? l) '()] [(null? (cdr l)) (list l)] [else (concatenate! (map/rest (lambda (elem rest) (map (lambda (result) (cons elem result)) (permutations rest))) l '() '()))]))
累積引数(res)を使った末尾再帰化の典型で、 特に名前はないと思う。
>>269 末尾コンテキストじゃないとこで継続手続きを呼べなかったらcall/ccの意味が無くなるぞ
(全部CPSで書けば済むことだから)
>>271 あれを読もうとしたことがあるやつが俺以外にもいるとはw
あと有名なのが元祖 B Shell とか。IOCCC を開催する動機のひとつになったともいう。
>>269 末尾以外でも使えないと大域脱出のときに困るのでは?
戻ってきたら継続じゃないだろうそれ……
Littleで質問です。 9章のY-Combimatorの説明は大体わかったんだけど、 (lambda (waha) (lambda .(a lat) ....(waha ....)....)) で再帰できないみたい。 なんか間違ってる?
突っ込まれるまえに > .(a lat) 先頭のドットはミスでつ。入りません。
>>282 誰がapplyしてくれてるの?
>>280 でもそれ副作用だし
>>281 末尾コンテクスト以外で戻ってこなかったら手続きじゃないだろうそれ……
>>282 >なんか間違ってる?
大体わかってるみたいだけど、完全にわかってるわけではないようだ。がんがれ!
> (lambda (waha) ま た お 前 か がんがれ
>>269 > 普通の手続きとして実装すればいいのに。
何言ってるのこの人?
天然なの?釣りなの?
ああURL化けしちゃった WilikiのScheme:call/ccと副作用という項です
手続きにしたいなら自分で作ればいいじゃん (define(手続き)(call/cc(lambda(c)c))) ちなみに継続は副作用じゃないよ そこにあって当然のものを持ちまわれるようにしただけ
継続は副作用じゃないけど call/ccは副作用なんです
>>288 > 手続きと違うものなのにprocedure?を満たすことには違和感を覚えます。
天然かよ。
アホの子のトップレベル> (define procedure-or-continuation? procedure?)
R5RSの6.4に > 脱出手続きとは、もし後でこれを呼び出すと、 > その時たとえどんな継続が有効であっても捨て去り、 > そのかわりに脱出手続きが作られたときに有効だった継続を使うことになる> Scheme手続きである。 とありますが 「普通の」Scheme手続きなら「継続を捨て去」ることはしないわけで ここが副作用の根本だと思うんです。
>>295 どうおかしいので?
じゃあcall/ccがもたらす「継続オブジェクト」が参照透明性を破る原因は何なのですか?
とんでもなく大きな勘違いをしているようだ
「純粋な手続き」ってなにさ
continuation passing style で考えると、もっと素直な気持ちになれるよ。
call/ccを使うと、副作用が起りうる。 ↓取りうる選択肢 ・副作用を容認する。 ・call/ccを使わずにpureに生きる。 斜めな人 ・継続を手続きにすればいい。 ( ゚д゚)ポカーン
>>298 呼んだあとに帰ってくる手続き、という意味です。
不適切な表現だったかもしれません。
>>299 CPSで継続にgo toしてるように見えるのは
もともとその呼び出しの後に継続がないからgo toするように最適化されるだけです。
継続オブジェクトをを「普通の」手続きで実装する。 ↓ ・末尾文脈で呼び出せば脱出に使える。 ・副作用を起こさない。
おまえ副作用って聞いて、バファリンとか思い浮かべてない? おれらはそんなやさしくねえぞ
>>302 > ・末尾文脈で呼び出せば脱出に使える。
末尾なら脱出じゃねーしw
「call/cc理解すんのって、頭痛いなァー」 「頭痛い」 ↓ バファリン → やさしさ ↓ 副作用 | \ _ / ピコーン! ― (ω) ― lヨ ∧ ∧ (・∀ ・) 「call/ccって副作用?」 ノ( )ヽ < > このスレは半分「やさしさ」でできています
call/ccに副作用があるってのは私だけの主張じゃありません
Wilikiの項を読んでください。
私の勘違いや不勉強があれば指摘してくださるとうれしいです。
>>304 問答無用でジャンプする「フルスペックの」脱出はできませんが
末尾文脈にも分岐が存在しえる以上「ある種の」脱出ができると考えられます。
ただの末尾ジャンプやんw
>>306 とりあえず、副作用なしで、
末尾ジャンプよりもリッチな意味を持ち、
継続と同等のことができるものを提示しなよ。
具体的な形で。
ちなみに方向は逆の話だが面白かった。
Flatt, Yu, Findler, Felleisen
Adding Delimited and Composable Control to a Production Programming Environment
戻ってくる継続というとyield returnですね。
>>269 3行の短かい答え:
発想は悪くない。
shift/resetで
ぐぐれ。
長い答え:
継続が戻ってくれば副作用無くなるというのはその通り。良い発想をしている。
しかし、継続から戻ってくるには継続が終わる必要があるが、継続の終わりとはどこかという問題がある。
REPLの終わりか、プロセスの終わりか、OSの終了か、世界の終わりか。
そこで、「ここまで来たら継続の終わり」という演算子を定めてやる。
その演算子をresetと呼ぶ。で、resetまでの継続を取り出す演算子をcall/ccとは区別してshiftと呼ぶ。
すると、shiftが捉える継続(を関数にしたもの)は副作用を持たない純粋な関数になる。
; shift以外には副作用はないものとする
例:
(+
(reset
(+ (shift (lambda (c) (+ (c 1) (c 2))))
3))
4)
ここで、cには (lambda (x) (+ x 3)) という関数が入る。resetの外の+4は入らない。
(c 1) は 4、(c 2) は 5。という風に、普通の関数と同じように使える。
あれは継続使って実装できるコルーチンだわな。
((Y (lambda (waha-tan) (lambda (waha musu) (......... (waha-tan .....) .....)))) 'tuna '(tuna octpas cram)) みたいにしたら、argumentは1つしか要求してないと叱られ 言われた通りに1つ、 ((Y (jambda........ )) 'tuna) にすると、私は2つ必要なのにあなたは1つしかくれない...... って泣きつかれます。 > またおまえか 別の無名さんでつ
>>282 ,
>>314 「....」で省略しないで全部書け。コピペ出来るだろ?
長いなら
>>313 みたいにやれ。
>>314 の最初の例ではYに関数以外に引数が2つ必要だからY2を使う。
あとは自分で考えろ。
(define Y2
(lambda (M)
((lambda (future)
(M (lambda (arg1 arg2)
((future future) arg1 arg2))))
(lambda (future)
(M (lambda (arg1 arg2)
((future future) arg1 arg2)))))))
>>310 上の他のレスでもあることだけれども、継続と継続関数を混同しているね。
だから「継続」が「終わる」とか「戻る」とか言葉使いがちょっと変。話題に合
わせてわざとやっているのかな?
>>317 確かに「継続が戻る」と言われても混乱するかも。
関係ないけど「funcallを呼び出す」って??みたいな。
Common Lispなら (funcall ...) と (return-from ...) の違いは明確だから
混同するやつはいない。
Schemeではfuncallもreturn-fromも省略された形で、見た目では区別できなくなった。
継続は手続きである。 手続きは戻るものである。 故に継続は戻る物である。 継続が戻らないとすれば 継続は手続きではない、または 手続きは戻るとは限らない。
>>318 より簡単なmultiremberでY2を使う例:
http://codepad.org/OY5ekg1g ((Y2
(lambda (waha-tan)
(lambda (waha musu)
(cond
((null? musu) (quote ()))
((eq? (car musu) waha) (waha-tan waha (cdr musu)))
(else (cons (car musu) (waha-tan waha (cdr musu))))))))
'tuna '(tuna octopus cram)) ; octpasは綴りが間違ってるw
通常のmultirember (define multirember (lambda (waha musu) (cond ((null? musu) (quote ())) ((eq? (car musu) waha) (multirember waha (cdr musu))) (else (cons (car musu) (multirember waha (cdr musu))))))) (multirember 'tuna '(tuna octopus cram))
>>320 > 継続は手続きである。
仕様を読みましょう。
Continuationとescape procedureは別。
Schemeで1st class objectなのは、
call/ccの作るescape procedureであってcontinuationじゃない。
Escape procedureは、call/ccした時点のcontinuationへの
遷移と値の受け渡しを担ってる。
表示的意味論での継続は、意味関数で意味付けられていて、
それとほぼ同型。CPS風の意味論で顕著。
>>323 R5RSの1.1にはコンティニュエーションは"first class" statusとあります。
ただ
> オブジェクトには手続きとコンティニュエーションが含まれる。
とあるので暗に手続きとcontinuationは別ものであるように書かれています。
脱出手続きはScheme手続きであるという表現がありますので
仰るように脱出手続きとコンティニュエーションは別と考えられます。
そうなると"first class" statusにあるコンティニュエーションはどのように得られるのでしょうか?
ただ単に1章では脱出手続きとコンティニュエーションを意図的に混同して書かれただけなのでしょうか?
R6RSではその``first-class'' status(第一級の扱い)の部分はそのままで、 > Scheme was the first widely used programming language > to embrace first-class escape procedures って文章がINTRO.に入ってるね。 込み入った話でなければ、それほど使い分ける必要はないかと。 論文でも"invoke a continuation"って書いてあることあるし。
あ、勉強中の人は神経質なくらい使い分けた方が、混乱しないと思います。 念のため。
>>327 その文言は"-"を除いてR5RSにもありますね
もっとしっかり読み込んでみます
>>308 >>310 ありがとうございます、読んでみます。
手続きという定義があいまいなものを(私が勝手に)解釈してしまっていたようです。
関数:引数を受け取り、値を返す。呼ばれたら戻ってくるもの。参照透明。
手続き:引数を受け取る。値を返すこともある。戻ってこないこともある。applyできるものの総称。副作用を伴うこともある。
くらいにとらえたらよかったのかもしれません。
RnRSを作った方たちがあえて関数ではなく手続きとしたのもここらへんの問題もあったのかもしれませんね。
全角スペース!
315他のみなさん有難うございます。 携帯からなので貼っていただいたcodepadはまだ見れてません。 引き数が2のときは別のY2が必要ということですね。 変形すると (define Y2 (lambda (M) ((lambda (F) (F F)) (lambda (future) (M (lambda (arg1 arg2) ((future future) arg1 arg2))))))) ;携帯なのでインデントがおかしいかと思いますが。 LittleのYと見比べて納得しました。 ただし315の形までの導出はまだです。 本と同じようにして出来るのかな… やってみようと思います。 有難う御座いました。
>>331 GOTO文の正体はcall/ccとretrecってことなのかな。
トップレベルの時はretrecの代わりにdefineで名前を付けてやるのかな?
ただのジャンプに正体も糞もあるかよ
C言語脳には、グローバルな、サブルーチンコールでないジャンプという プリミティブは存在しないのです。
しばらく来ないうちに
>>335 ,
>>336 みたいなガラの悪いのが住み着いてるな。
これじゃLispの評判が悪いわけだ
>>336 つ __attribute__ ((noreturn));
>>338 もし本当にこの程度のレスが「ガラが悪い」と特筆するに値するなら、
それはLispスレが異常に友好的だってことで、2行目にはまったく繋がらないよ。
少しでいいから頭使って絡んでくれ。
おかしな人は頭使うほどおかしな方へすっ飛んでくぞ。
という訳でMITのトイレにやっときたのだ。
遅かったじゃないかw
しーましェーン!
それでも雰囲気良い方だよね。板全体で見たら。
ある種の頭の良さと性格の悪さは比例するんじゃないか とかねがね思っているのだが。 仮にそれが正しいとしましょう。 Lisperは頭良い人の割合が多いから(マジで?!) そりゃイヤミな書き込みもあるだろう。 それでもそんなに言うほど空気悪くないのは 頭が良いだけではなく悟りを開いた人が多いから(マジで?)。 気になる人はストレス溜めておられるのでは。
頭が良いなら他の言語も使うし、第二言語なら執着もしないだろうな どうせお前らは第一言語を人に教えたくないんだろ
性格悪いっていうか、タイミングが悪いんじゃないか?
>>347 ・頭の悪い人は妬みやすい。
・Lispスレは頭の人が結構いる。
という仮定でも、
・Lispスレはイヤミな書込みが多い
と思う人が多くなるぞ。
この書き込みはイヤミじゃないぞ。
俺がそう思ってないし、
俺は頭良くないから、妬むでそう誤解する奴もいない。
Gauchebox-0.8.14-box1 がいつのまにかリリースされてたけど…。 拡張がぜんぜん入ってないんじゃあんまりメリットない気もする。 あくまで入門者むけのセットって感じなのかな。 コンセプトがイマイチはっきりしない。
むしろ入門者以外のどんな人間が使うと思ったのか聞きたい。
初心者向けと言ってもPLTみたいにはデバッグ出来ないんでしょ?
Gauche自体にデバッグ用の機能が欠けているから仕方がない。 デバッグ機能の強化は1.0以降の目標、と開発者が明言してる。 あと、Emacs辺り使うと簡単に編集と評価の繰り返しができるから、 デバッグ出力の追加とか、関数や式単位の評価とか凄い楽にできるし、 デバッガ無くてもあんまり困らない、ってのもあると思う。
んーでも真初心者のぽっくんはPLTの方が良いお。 1.0になったら使うかもしれないけど。
Windows 環境 (mingw+msys) で Maeve を動かしてみた。 (多少の修正は必要だったけど) 一応 example として用意されてる3つはコンパイルできてちゃんと動いた。 まだ性能を評価できる段階ではないけど、動くモノが出てきたってことで注目株だと思う。 気合いの入った最適化をする (予定?) みたいだし、期待できるかも。
jacalに自前関数追加したいときってどうすればいいんだろう maximaには解説結構あるけどjacalには見つけられない a:2; (aに2を代入) してからlisp層にいって qed; lisp上で変数aにアクセスするにはどうすればいいんだろう
loadすれば?
359 :
357 :2008/11/13(木) 15:00:17
maximaの場合 a:2; to_lisp(); > (print $a) 2 maximaの変数aはlispで$aになる という変換があるけど jacalでどんな変換になってるかの資料をみつけられないのです
ソース読め。sexp.scmなど。
>>354 私はすごい困っているんで、どうにかして欲しいです。。。
特にrun, break, watchがしたくて仕方が無い。
と、書いてて思ったんだが、デバッガ欲しい人たちって、 EmacsでM-x run-schemeとか使ってる? 俺もあれ知るまでデバッグ含めて色々しんどかったんだが、 あれを知って極楽浄土モードに突入した。
どうでもぃぃけど361はぽっくんではないぉ。 PLTは頑張りすぎで時々暴走モードに突入するお? やっぱりガウシェに頑張って欲しいお。 寄付金とかは募ってるんですかお?
>>363 もちろん使ってるけど、最初にオブジェクトを作って
それを処理していくようなプログラムの場合、
run-schemeを行うためにはダミーオブジェクトを作る必要がある。
それが簡単に作れるものならいいけど、例えば1000行程度のファイルをパースして得られるような
オブジェクトの場合、ダミーを作るのは簡単じゃない。
データが複雑になってきた場合のみ、発現するようなバグだと死ねる。
他にも、呼ばれているはずの関数がなぜか呼ばれてないのでその原因を調べたい場合は、
ステップ実行していけばすぐに分かるのに
デバッガが無いがためにいちいち途中経過を出力したり、
コメントを使って原因を特定する必要がある。
なぜか無限ループに陥ってる場合でも、ステップ実行&ブレイクができれば一発で原因が分かる。
366 :
357 :2008/11/14(金) 06:22:03
>>360 (define (symdef-lookup sym hdns)
...
あたりで対応する変数を探してるのかな?
自前のscheme programからjacalの機能使うのは難しそう・・・
SLIBに簡単な行列計算はありますが 特異値分解とかコレスキー分解とかしたかったらGSL使えってことなんでしょうか
>>351 > コンセプトがイマイチはっきりしない。
Gaucheboxは書籍「プログラミングGauche」のサンプルコードをWindowsユーザが手軽に試せるように作った。
>>368 もちろん書いてる。というか書かざるを得ない。
>>365 ダミーデータの部分が良く分からない。
実際にデータを解析したものを適当に束縛したのとかじゃダメなの?
わざわざ手動で1からデータ構造作らなきゃいけない訳でもないし、
何が問題で、デバッガ使うとどう改善するのか、もうちょっと詳しく教えてくれ。
あと、呼ばれてるはずの関数がなぜか呼ばれていない、ってのが気になる。
その部分って、副作用が前提になってたりしないかな?
なるべく副作用無しで書いておけば、関数の入力と出力だけに注目すればいいから、
もっと楽になると思うんだけども。
ゴーシュで以下のコードが動いてくれません。 (map (lambda (op) (op 10 2)) '(+ - * /)) gosh: "error": invalid application: (+ 10 2) どうすればいいですか?
(map (lambda (op) (op 10 2)) `(,+ ,- ,* ,/)) もしくは(map (lambda (op) (op 10 2)) (list + - * /))
>>372 それだと('+ 10 2)になるからね
動きました。 ありがとうございます。 '(+ - * /) と (list + - * /) はおんなじモノかと思っていました。 違うんですね…
>>376 gdbが貧弱なのでは
Cにスクリプトを組み込む場合を考えると、全部gdbでできるのが理想だ
>>376 うーん。長くなってきたし、上手くいけば有益な議論になりそうだから、
せっかくだからWiLiKiに書いてみない? 良い助言が貰えるかもしれない。
あそこ、色んな言語知ってる人とか、開発者の人とかいるし。
最後の補足をしておくと、副作用無しでプログラムを書くべきっていうよりも、
副作用べたべたで書く部分と、副作用無しで書く部分を分ける感じじゃないかな。
それと、確かに、処理系の事情で、特定の手法を強制されるのは好ましくない。
関数的な手法以外も選べるのが言語のひとつの特徴な訳だし。
ただ、こればっかりは開発側のマンパワーの問題だから仕方ないよ。
待つか、書くか、説得するか、諦めるか、乗り換えるしかない。
>>364 寄付金はどうだろう……。
とりあえず、プログラミングGauche買えば印税行くんじゃないか?
こういうので寄付とかしても意味ないんじゃない? コードを寄贈したり、フレームワーク作ったほうが喜ばれるかと。
>>375 listは特殊形式じゃなくて関数だから、
'(+ - * /)つまり(quote (+ - * /))と同じなのは (list '+ '- '* '/)。(quote/listの分配則)
(map (lambda (op) ((eval op (scheme-report-environment 5)) 10 2)) '(+ - * /))
最近、JITコンパイラありの言語処理系が増えてきたから、 (Lisp/Scheme界ではまだそうでもないが) デバッガ開発のコストが凄く上がってる。 例えばv8はネイティブ実行オンリーだから、 デバッグモードではインタープリターに格下げってわけにいかないし。
>>373 ,
>>375 ,
>>381 eval-applyを勉強する前だとはまり易いところだね。
(map (lambda (op) (op 10 2)) (list + - * /)) ; `(,+ ,- ,* ,/)
(map (lambda (op) ((eval op (scheme-report-environment 5)) 10 2)) (list '+ '- '* '/)) ; '(+ - * /)
最も初歩的な処理系が作れるようになってよかったね。
>>381 値としては同じだけど前者は定数扱いだから
実装によっては変更不可の場合がある
準クォートをどげんかせんといかん! (map (lambda (op) (op 10 2)) `(,+ ,- ,* ,/)) (map (lambda (op) (op 10 2)) (quasiquote (,+ ,- ,* ,/))) (map (lambda (op) (op 10 2)) (quasiquote ((unquote +) (unquote -) (unquote *) (unquote /)))) (map (lambda (op) (op 10 2)) (list (quasiquote(unquote +)) (quasiquote(unquote -)) (quasiquote(unquote *)) (quasiquote(unquote /)))) (map (lambda (op) (op 10 2)) (list + - * /)) こういうことを頭の中で一瞬にしてやってるの?
クォートをどげんかせんといかん! '(+ - * /) (quote (+ - * /)) (list (quote +) (quote -) (quote *) (quote /)) (list '+ '- '* '/)
準クォートをどげんかせんといかん! `(,+ ,- ,* ,/) (list `,+ `,- `,* `,/) (list + - * /) クォートをどげんかせんといかん! '(+ - * /) (list '+ '- '* '/) これぐらいのステップで考えてる。
クォートをどげんかせんといかん! (list '+ '- '* '/) (list `,'+ `,'- `,'* `,'/) `(,'+ ,'- ,'* ,'/) `,'(+ - * /) '(+ - * /)
listをquoteに展開して考えるのは良くないと思う
考えられないのはもっと良くない。 考えられるけどやらないのはいいけれど。
(define ((compose f g) x) (f (g x))) が、Ypsilonだと通らない。gaucheは通る、さすが。
別に攻撃しているわけじゃないよ。 どちらかというと、どの処理系を使えばいいのかわからんという愚痴。
>>391 それがGaucheで使えるのはshiroさんも知らなかったらしいですね
(Wilikiのとおる。さんの項より)
>>391 規格には無い挙動だよね?
伝統的に許容する処理系は少くないみたいだけど
R2RSまでは規格にあったそうで R3RSで削除されたそうです
('A`)y-~
ttp://www.thinkit.co.jp/article/157/2/3.html 上の記事で紹介されているDSLについてなんだけど、記事自体は面白いと思ってるし
次回に期待しているんだが、「DSLは魔法ではない」という言葉が、
記事の作者と自分とでちょっと違う気がして気になってる。
おれはグレアムの主張は「本物のPrologコンパイラ >>> 少ないコードで書いたDSLのProlog」
というだけの事だと思ってる。がんばればDSLでもPrologコンパイラに肉薄できるものが
作れると思うんだ。そうとう巨大になるだろうけど、compile があるCLなら原理的には不可能じゃない。
なので、DSLは確かに魔法じゃないけど、けっして限界があるわけじゃない、と思ってる。
誰か意見を聞かせてほしい。
>>382 ネイティブのデバッガの開発が高くつくのは
ネイティブコードをデバッグするのが難しいというよりも
「任意の」ネイティブコードをデバッグするのが難しいという理由です。
コンパイラとデバッガをセットで開発できるなら、例えば
(define (waha x)
(print x))
を
@define-function waha
@enter-function waha [何がしかのデバッグ情報]
@start-line [(print x)のある行] [何がしかのデバッグ情報]
@print x
@leave-function waha
(@はコンパイルされた命令ということにしてください)
とコンパイルし、その後、enter-functionやstart-lineの呼び出しを
デバッガ側でフックできれば、デバッガの開発はそこまで難しくはありません。
もちろんデバッガ側では、enter-functionに登録された関数がコールバックされれば
スタックトレースやローカル関数の一覧を更新し、start-lineの場合は
ブレイクを行うか調べたり、現在実行している行の更新を行ったりします。
まあ、そこまで難しくないというだけで、ある程度のマンパワーが必要なのは事実なのですが。
>>398 Lispで実装すると決め打ちすると、最適化の邪魔になるかもしれないよ。
仕様を見てから最適な実装言語を選ぶべきじゃないの?
勘で選ぶのではなく、数学的なやり方で。
・・・みたいな筋書きだと思う
Prolog世代の感想としては、昔は普通にLispで実装されていたしなぁ。効率以外で理論的にダメな理由はないんじゃない。 DSLというレイヤーでみたらWhatの実現手段が推論だろうが手続きだろうがそれこそどうでもいいんじゃないかな。 単に望みの記述を書くための手段なんだから、DSLの表現にHowを望むかWhatを望むかは使う人次第だと思う。 私はどちらかといえばHowを隠蔽してWhatを記述するためにDSLを使いますよ。
完全なものを積み上げていけば完全なものができあがる・・・ そんなふうに考えていた時期が 俺にもありました
>>401 うーん。自分はLispは「楽」なので使ってるだけなので、
その筋書きだとすると次回に期待。
>>402 >Prolog世代の感想としては、昔は普通にLispで実装されていた
うは。そうなんですか。勉強になります。
DSLをどう書くか、ってその人のキャリアに依存するんですかねぇ。
>>398 挙げているのがPrologだから、後付けで、
> 高速なマシン語に至る
をLisp処理系とシームレスに埋め込むのは結構難しいよね。
スタックの扱いがかなり違うから。
推論エンジンがボトルネックになりそうなら、高速化したいだろうし。
Grahamはその辺の微妙なラインの話をしていると思われ。
限界があるなんて思ってないと思う。
>>405 その高速なマシン語に至るってのはどっからでてきた話?
"On Lisp"の該当個所読んで。
読んでみた。処理系とのシームレスな統合が難しいとか、スタックの扱いがどうとかいう話には見えないなぁ。 最後の節は単に、この章でつくったのはネイティブコードにコンパイルされて実行されるかもしれないけど、 いわゆる「Prologコンパイラ」と呼べるようなものじゃないよって説明してるだけじゃない?
「呼べるようじゃない」理由は?
理由は件のマシン語うんぬんの前の節に書いてある。 >本物のPrologコンパイラはループに変換できる規則を探すが、この章のPrologは定数を >与える式やスタックに割り当てられるクロージャを探している。 と書いてある。要するに規則の実行が探索+解釈だから、インタプリタなんだ。 で、この後に「埋め込み言語は魔法ではない」ってのはProlog的な言語をLispコンパイラ向けに 作ったとしてもPrologコンパイラの代わりにはならないって話だろ。 Prologコンパイラが作りたければ、埋め込み言語の下に結局作らなきゃいけない。 Norvig本ではインタプリタの後にコンパイラも作るので興味があるなら読んでみるといい。
>>409 408じゃないけどOnLispには
「LispコンパイラはPrologのための最適化ではなくLispプログラムのための最適化」
を狙っていて、それは本物のPrologコンパイラがやるものより低レベル、と書いてるよ。
ただしあくまで「OnLispの第24章で書かれた小さな埋め込み言語」が
低レベルってことだと思うね。
プロプロロガー(っていうのだろうか…?)の意見がぜひ聞きたいなぁ。
412 :
411 :2008/11/15(土) 16:59:37
プロブロガーだけど呼んだ?
プロブロガーさんは命令型ブロギングと宣言型ブロギングについてどう思う?
case-lambda って common-lispにはないの?
規格にはないよ。R5RSにはあるの?
一時、制約系が流行ったけど、最近あまり観ないね。 Oz/Mozartは、本が面白かった割には言語は注目されないし。 そもそもLisp系がほとんどなかったしねえ。
制約と言えば、Garnet Toolkitを思い出す。 あれもDSL的なアプローチだな。 Lispの場合、DSLなのか、普通のプログラムなのか、 判断付きかねるところがあるが。
>>399 ところがそんなふうにベタにコンパイルするんじゃあんまりネイティブにする意味が無いんだな。
特にSchemeの場合、関数を素直に機械語レベルの(マシンスタック操作のある)関数にするんじゃ
性能が伸びない。
デバッグモードとリリースモードで最適化を切り替えるっていうのも、本当にデバッガが必要に
なるような難しいバグはリリースモードでしか出現しない、なんてことがよくあるのでうまくない。
もちろん、最適化をかけつつデバッグ情報を残すことはできるんだが、そう単純な話ではないということだ。
>>420 もちろん最適化後のトレースにはいろいろな問題がつきものなのですが・・・
だからといって
「リリースモードでのトレースには問題が出る可能性があるから、デバッグモードでもトレースはしない」
という姿勢はどうなのでしょうか。
個人的には、アプリケーションレベルでのテストやモジュール化を推奨するのではなく、
そういうところこそ綿密なテストとモジュール化を導入していただきたいです。
削減できる時間も全然違いますし。
(define ((compose f g) x) (f (g x))) の意味が判らない (define name (lambda 〜に直すとどうなんの?
>>423 姿勢はどうなのでしょうか、とか言われてもなー。
>>420 は「難しい」とは言ってるけど「しないでいい」なんて言ってないぞ。
もうちょっと落ち着きなさいな。
やるべきだと言えば やる気が出るものなのかね やっぱ楽しくないとだめじゃん
>>424 うちの処理系では
(define (compose f g) (lambda (x) (f (g x))))
になってnameがシンボルじゃないということでエラーになりますが。
構造化代入かと思ったけど違うようですね。
主観ではこんなのが通る必要はないと思います。
>>424 (define compose
(lambda (f g)
(lambda (x)
(f (g x)))))
かな
>>428 R2RSまでは規格にあった書き方らしいです
R5RSでも規格違反ではないでしょう(規格にないだけで)
StrongSmalltalk?みたいに静的型ギチギチのLISPかSCHEMEってないですかね。 型宣言をどこで行うか、ってのが毎回悩みます。 関数内の(declareには違和感が。
>>430 つ【マクロ】
とはいえ型付きLispはほしいですね
(typed-define int var 1) (typed-define ((int int) int) (add a b) (+ a b)) (typed-lambda ((int int) int) (a b) (+ a b)) ってことにすれば
静的な型矛盾の検出は?
consはどうするの (declare-type number-list (cons int number-list)) (typed-define number-list var (list 1 2 3)) ; ○ (typed-define number-list var (cons 1 2)) ; ×
(declare-type number-vector (apply vector (cons int number-list)))
>>436 静的な:実行時でなくコンパイル時もしくはロード時に
型矛盾:型エラーをおこす(|してほしい)ような式
>>434 number-listの終端条件がない
無限リスト?
>>437 うぐぅ
ボクの頭では無理そうだようぐぅ
C言語でもvoid *とか使うでしょ。 あれと同じレベルでならとりあえず作れるんでは。 簡単な型チェックができて、パフォーマンスが出ればそれでいいじゃん。 つまり明示的に型キャストするコードを入れるわけだ。
C言語なら(void *)とかを代入とかにはさめばいいけど Lispは括弧を跨ぐ必要あるから修正大変だよ うぐぅ
いまどきうぐうとか流行んねえんだよにぱー
WiLiKiにデバッグのページ作った奴、ここの住人だろ。 スクリーンショットで分かるんだよわは〜。
むす〜っていうのは22才だったのかw
おはヷ〳〵〰 〳〵ヷヷ〰(♛Д♛)ゔ〲〰ゔ〲〰 ゔ〲〰ゔ〲〰 乜勹〰スㄜㄝㄋ 〳〵ヷヷヷヷ〰〰〰ゔ〲〰ㄡㄦㄡㄦ ☺☻☺☺☻☺☺☻☺☺☻☺☺☻☺ うぉぐ!(*゜∀゜)〜♡ℳℴℯ❤ ℒℴνℯ..._〆(゜▽゜*)㌰㌰ 乜勹〰スㄜㄝㄋ ゔ〲〰ゔ〲〰 乜勹〰スゔ〲〰ゔ〲〰 乜 勹 〰 スㄜㄝㄋ う゛〲〰ゔ〲〰 乜勹〰ス (♛Д♛)ゔ〲〰ゔ〲〰 乜勹〰スㄜㄝㄋ 〳〵ヷヷヷヷ〰〰〰ㄡㄦㄡㄦ ヺ〲〰ヺ〲〰<br>ℒℴνℯ..._〆(゚▽゚*)㌰㌰ ヺ〲〰 乜勹〰ス ヺ〲 〳〵ヷヷ〰〳〵ヷヷ〰
MITのトイレは既にLisp制御じゃないぞ
それはポールの友人のトレバーが書いた「もどき」では。
Python版のSICPはもう出版されてるの?
あちらにコメント欄付いてるけど? :p
printfで十分
デバッガが必要ってどんなプログラミングスタイルなんだろ やっぱでっかい関数にグローバル変数使いまくりって感じか? まぁそりゃ無いよりはあった方がいいけどさ
>>452 うん、書いてきた。
真面目に話し合う気があるならWishListとかに要望として書けばいいのに。
律儀に行間を読んで返事してくれてるからいいけど、
あんなのぶっちゃけ議論の切っ掛けになる文章じゃないだろ。
せっかく、Schemeのデバッグ機能の実装の実情とか、
興味深い話聞けそうな良い機会なのにさー。
煽り対象が一気にLisp一般に拡大されてるのはなんでなんでだ
>>451 おれは暴走気味でかつ面白いと思ったよ。少しずつ整理したら何か意味のあるものが出てくるんじゃね?
Squirrelの情報とデバッガ原則はまるごと別ページでいいな。
開発者の態度が大人だからって甘えない方がいいぞ。
>したがってデバッガ開発者というのは常に、デバッグ対象となるシステム開発者やコミュニティに対して適切なデバッグAPIを提案し、その実装に対する圧力をかけていかなければなりません。 圧力…麻生じゃないんだから、もっと適切な言葉を選べよ。
>>382 その辺のレイヤーはLLVMに丸投げって手もある。
Stalinは人間がべた書きしたCよりも遅くなることはないのでしょうか?
そういうことを自分で理解した上で使いたいと思うものなんだよな 処理系の内部の解説がもっと増えるといいな
悪のりしすぎると感じ悪い。
>>420 > 特にSchemeの場合、関数を素直に機械語レベルの(マシンスタック操作のある)関数にするんじゃ
> 性能が伸びない。
ソース希望
アロハ君が、アロハ君さえいてくれたら・・・ ということで、デバッガのことは彼にまかせようや
$chicken-setup easyffi downloading catalog ... downloading catalog from www.call-with-current-continuation.org ... downloading easyffi.egg from (www.call-with-current-continuation.org eggs 80) gunzip -c ../easyffi.egg | tar xf - Error: argument is not a string or string vector: ("easyffi.so" "chicken-wrap") エラーメッセージで検索したらMLに誰か投稿してるんだけど誰も返信しないで放置されてる感じ osが悪いんだろうかubuntu8.04のaptでいれたchickenなんだけど
linuxだとどこが悪いのか収拾付かないから *BSDにした方がいいよ
>>462 その辺のレイヤーってどの辺?最適化?
個人的にLLVM興味持っているんだけど、あんまり情報ないね…
>>470 つ JIT+デバッグAPIプリミティブ
>>376 > 「副作用無しにプログラムを書くべき」という主張はわかりますし、
> 「テストしやすいようにモジュール化すべき」というのも理想としては分かります。
> しかし、デバッグ環境が貧弱なためにそう書かざるを得ないというのは
> 非常にダサいのではないでしょうか。
デバッグ環境が貧弱なために、ではない。
Scheme においては元々それが自然な書き方であって、
逆らったら何かと不都合なのはアタリマエなんだよ。
「記述スタイルが考えなしなためにデバッグ環境を期待してしまうあなたは非常にダサい」
ということ。
デバッグを支援する環境はあったら便利だとは思うけど、
Scheme (Lisp) 的でない書き方を念頭に置いた上では議論にならない。
デバッガでデバッグしやすい記述をしろとでも言いだしかねない雰囲気さえ読み取れる。
主張が最初からデバッガに向いてしまってて本質を見失っている。
煽る意味であえてそうしたのならいいけど、
Scheme (Lisp) でのデバッグ作業ってものをよくわかった上で検討しないと
デタラメな方向へ向かっていってしまうよ。
(Lisp) ははずしといたら?彼はEmacs Lispのedebugとか気に入るかもしれんし。
C/C++との色々な違いが本質みたいに言う人もいるが
個人的には、そんな細かいことで喧嘩すんなと言いたい
Lisp/Schemeは言語の中ではかなり平凡な部類に入るぜ
>>398 なんて命令型言語の代表みたいな扱いだしな
>>474 だよね。Lispは色々なスタイルを選べるのも強みなわけだし。
特に、Schemeなんかは、関数的な手法しかとれないなら、
わざわざ頑張って最小の構成要素考えた意味が、根底から吹き飛ぶ気がする。
Schemeで一体何をしたいのかということになる。 関数プログラミングをしたいのなら、副作用を嫌えばいい。 命令プログラミングをしたいのなら、どんどん使えばいい。 Schemeで、一体何をしたい? Schemeコミュニティは、一体何を目指している?
行き違い。スマン。
件の彼がおかしいのは、内容というより、話の進め方だと思う。 何らかの機能が欲しいのなら、まず、自分の要望を伝えて、 その利点を説き、相手に情報が不足しているなら提示し、 その上で、双方の落とし所を見つけるために話し合うのが筋だろ? いきなりデバッガトークをアクセル全開で展開し、 頼まれてもいないのに書くのが面倒とか言っちゃう辺り、 どれだけぶっ飛んだ思考回路をしてるのか底が知れない。 出した情報自体は他人の益になってるのが救いだけど。 それと悪ノリ。2chじゃないんだし、むす〜とか空気読めよ。
>>472 みたいな意見を、
Schemeコミュニティの総意だと受け止めて、
それなら啓蒙しないとと頑張ってしまったんじゃないの?
俺は受け手じゃないからどうでもいいんだが。
ム板最強言語スレage
Nuageが便利そうなんだけどSLIBの行列計算と互換ないのがちょっと不満
特異値分解ぐらい自分で書けってのがschemeの思想なのかな
Schemeのデバッグってtrace使うか、displayを入れるかくらいしか知らんかった。 ていうかそれで十分じゃない。ステップ実行みたいなのって必要あんの? と思う私はロートルで現状についていけないだけなのかも。
構造化プログラミングを意識しておけば十分だよな
schemeだから必要ないという理由は何も無い。 デバッガー使えない頭の固い老害はとっとと隠居しろ。
いちいち煽るなよw
>>485 正直、あんまり必要だと思ったことはないのは確か。
あると便利なこともあるけど、そんなことより今問題になってるのは
>>376 の主張が変ってことでないか?
伝統的な Lisp デバッガでダメなのはどこよ。
Lispデバッガがダメなのではなくて Schemeのデバッグ環境がCLほど整ってないのが問題なのでは?
>>488 PLT SchemeはGUIでの充実のデバッグ環境だぞ。
BiglooはBeeがあるし、Guileにもインタラクティブデバッガがある。
他にも各処理系で変わってくるけど、色々。
言うほど酷くないと思うんだが、使ってないだけというオチじゃないのか?
本物を求める君のEdwin
>>489 元ネタはgaucheにデバッガがほしいって話じゃなかったっけ?
デバッガ概説を始める理由がそれか?
>>376 が脳軟化じじいの煽りに対して、デバッガの有用性をうまく説明できなかったのが混乱の原因。
思考形態の切り口で煽ると「頭が硬い」になって、 肉体機能の切り口で煽ると「脳の軟化」になるんだな。 ちょっとややこしい。 一方発言者の頭は、硬い柔らかい以前に「悪い」で綺麗に統一されてそうではある。
Gaucheにデバッガが欲しいと2chに書いてみた ↓ 賞賛をもって受け入れられるハズが喰い付きが悪いので悩む ↓ 持論を作者本人にぶつけるべくWilikiに凸撃 ↓ Shiroさんとも話が噛み合ないので悩む(Lisper/Schemerのプログラミングスタイルを理解してないので当たり前) ↓ 勢い余って俺が仕様提示するから好きなの実装しろと書いてしまう ↓ それはおかしいだろという突っ込みが横から入る ↓ 慌ててページ整理のフリをしてコメントをすべて見えないように ↓ 編集履歴には残ってしまうので途方に暮れている ← いまココ
「プログラミングGauche」のデバッグの章を読んだ上での犯行なんだろうか?
それが若さってものだろう・・・でも「瓢箪から独楽」ってこともあるからな、節度を持ってがんがれ!
疑われてないと思うけどぽっくんではないお。
Gaucheの配下に移ったけど、GaucheどころかSchemeとは関係ない ・デバッガ一般論 ・別の言語のデバッガAPI の話しかないなあ。
> 内容はhistoryに残しましたので し?
schemeって規模の大きいソフトにも使えるの? namespaceなくてもなんとかなる例はemacs lispみてればなんとなく予想つくけど
>>499 お前のことは誰も疑ってないから安心しろ。
それにしても、やたらとビジュアル環境にこだわってるけど、
構築に必要なインフラがgdbと違うとでも思ってんのかな?
GUIだろうがCLIだろうが、処理系に要求されるものは変わらないよね?
ビジュアルなデバッガでも裏でgdb動かしてるのいるし。
マイクロソフト謹製のVisualなんとかの信者なんじゃね?
Lisp/Schemeの初心者なんだろう、きっと。 最初にLispでプログラムを書いたときにsetqを使いまくっていた 自分を思い出した。関数プログラミングに慣れるとデバッグに対する 考え方も変化すると思うよ。
C/C++のデバッグやってるときも、デバッガに頼るのはどうしようもないときの最後の手段にしてるんだけどなあ。 そういうのは少数派で、とにかくデバッガでやるってのが多数派なんだろうか。
C/C++だと、もちろんデバッグにも使うけど、読むための道具という意識も大きい。
でも、今回の件でShiroさんの構想をうかがい知ることができて、 個人的には色々興味深かった。Gauche 1.0に期待。
初心者だけどゴーシュの#?が好きすぎて困る。
emacs code browser ってlispは対応してるの? Visualな環境ならそれでいいような気もする
>>509 同意。
あとどんな相手からでも意味のあるものを取りだそうとする姿勢は
本当に見習いたいよ。
敵に回すと粗探し 味方につけると誉め殺し
嫌な相手からでもアンチパターンは取りだせるわな
自分の書き込みに責任を持たず、丸ごと闇に葬ろうとしてる辺り、 粗ってレベルじゃないけどな。
意味のあるものをなにも取り出せない というアンチパターンが513ってことだよ 特定の誰かを批判したわけじゃない
>>398 から延々続いてる話、そろそろ終了してくんない?
邪魔なんだけど。
>>517 とりあえず括弧にでも括っといて忘れちゃいなよ。
文句言うだけじゃなくて、自分で新しい話題振んなさいよ。
>>506 そうかなぁ?
実行単位でのステップ実行って「書き間違い」の認識につながると思うのだけど。
具体例だとテストユニットが通らないけど見た目で気がつかない(読み間違う)様なバグね。
↑みたいなのってステップ実行で変数の変化をみて「あ!」とか思う事あるとおもうんだけどなぁ。
atan を「あーたん」って読んでみると、愛着がわくよね。 あーたん かわいいよ あーたん
>>517 何か書きたいことがあれば書けばいいじゃん
>>517 おまえが蒸し返さなきゃとっくに終了してたな
>>523 Hyperって「度を越した」って意味だな。
超えたものを意味する Meta を連想してそこからメタボリックなオッサンが思い浮かぶ。
イマイチ。
萌えられる理屈を付けてくれ。
麻生聖拳。 それは福田聖拳を源流とする一子相伝の最強の拳法である。
誤爆したー。 orz スマソ
goshで (use slib) (require 'eps-graph) できなかった パイプでgnuplot使うのが普通なの?
>>530 (require 'eps-graph) の前に (require 'color)
goucheでscmutils使えなくて困ってる。 どうやったら使える? 特にup, down, literal-function, definite-integralとか。
Gaucheで動くのかい? Unix系のMIT-Schemeにべったり依存じゃなかった? 動いたらうれしいね。SICMが試せるよ。
>>533 >Unix系のMIT-Schemeにべったり依存じゃなかった?
随分古い情報ですね。Guile用とか出てますよ。
べったり依存は過去の話でしょ。
gosh>(use slib) gosh>(load "load.scm") gosh>(set-current-module generic-environment) gosh>(print-expression ((D sin) 's)) (cos s)
うわ〜、教えてください。 Gaucheに移植されたscmutilsってどこで入手できるんですか?
>>537 あなたがこれから移植すれば入手できます
ああ、やっぱりね。
>>536 (load "load.scm") が呼び出してるのは(load "load-real.scm")なのでその中身を見てみる。
; load-real.scm
(if (defined? 'scmutils-base-environment)
(set-current-module scmutils-base-environment)
(define scmutils-base-environment (current-module)))
(define derivative-symbol
(string->symbol "D"))
(define (with-working-directory-pathname path thunk)
(let ((old (getcwd)))
(chdir path)
(let ((result (thunk)))
(chdir old)
result)))
(define (in-scmutils-directory relative-path thunk)
(with-working-directory-pathname
relative-path
thunk))
(load "compat.scm")
(load "general/load.scm")
(load "kernel/load.scm")
(load "simplify/load.scm" )
(define symbolic-operators
(hash-fold (lambda (key value prior) (cons key prior)) '() symbolic-operator-table))
;load-real.scmの続き (load "display/load.scm" ) (define (lambda->numerical-procedure lexp) (primitive-eval lexp)) (load "numerics/load.scm") (load "poly/load.scm" ) (load "kernel/litfun.scm" ) (load "units/load.scm" ) (load "mechanics/load.scm") (load "calculus/load.scm") ; load-real.scm終わり
ということは (load "compat.scm") (load "general/load.scm") (load "kernel/load.scm") (load "simplify/load.scm" ) (load "display/load.scm" ) (load "numerics/load.scm") (load "poly/load.scm" ) (load "kernel/litfun.scm" ) (load "units/load.scm" ) (load "mechanics/load.scm") (load "calculus/load.scm") これを順番に潰していくわけだ。compat.scmからだね。
ちょっと手間かければ誰でも作れるものが作られてないというのは schemeがちょっとしたものなら自分で作れ という文化だからなの?
ちょっとしたものなら一瞬で作れてしまうスパーハカーばかり という文化のせいではなかろうかとふと思った。
>>496-497 その本手元にないから立ち読みしてきた。
単にデバッガーを使わないデバッグテクニックを紹介してるだけじゃねーか。
schemeにはデバッガーは不要という理由はどこにもないな。
デバッ「ガー」とか伸ばしちゃう男の人って
なんとなく デバッガ:GDBみたいなの デバッガー:レースゲームとかでひたすら壁に衝突したりする人 ってな印象が
ディッバガー
Schemeでクヌースの文芸プログラミングをサポートする ものがあったら面白いんじゃない? デバッガをぶん回す最近の流行に反発を感じるんだよね。
デバッガ前提でプログラム組む男の人って・・・
女はいいの?
Structured Programming with go to Statements DONALD E. KNUTH
>>549 あるよ。
www.literateprogramming.com/lpscheme.pdf
www.literateprogramming.com/tools.html
Knuth先生もMMIXエミュにデバッガ付けてましたが…
パイプラインレベルまでもエミュするCPUエミュレータw
>>546 用語の間違いを指摘することでしか反論できないようだな。
デバッガーは1.0になってからって話が既に出てるだろ。
>>559 しょーもない釣りはいらん。よそでやれ。
>>556 ありがとう。
プリミティブを公理、きちんと証明されてバグの取れている関数を定理、
自らが作り出したデータ構造なんかを定義、のように見立てて、
数学の証明をするかのように今、書いている関数の正しさを証明していく。
そんなスタイルに憧れる。工学的には手間がかかりすぎて有用ではないかも
しれないけれども。関数プログラミングなら正しさの証明は可能なんじゃないだろうか。
仮にそんなことができたとしよう。 その手続きもプログラムとして書き下ろせるはず。 すると、そのプログラム自身の正しさをそのプログラムで正しいと証明できる事になる。 さて、
このプログラムをちょっとだけ改造する。 このプログラムで検査したプログラムが正しかったときに、 不正なコードをわざと実行する。 従って、この改造されたプログラムは正しいプログラムではない。 ところで、
ああ、ゲーデルとかチャイティンとかそこまで神経質に 厳密にやるつもりはないんだよ。
>>564 純粋な関数プログラミングだと値の表示もできないよ。
それをするにはディスプレイやその他の状態を変更しなきゃいけないわけで。
Haskelみたいに分離すればいい
>>571 そこまで徹底しなくてもいいわけで。
Schemeだと割とゆるめに関数プログラミングできるんでいいと思うよ。
Little Schemer大体読み終わったけど、この本の会話みたいに 宣言的に書く・考えるということにどうも慣れません。 この先Schemerシリーズの続きあるいはLittleの復習、 Gauche本、萩谷先生の関数プログラミング どれから読むのが良いですか?
マジキチ
On LispとかSICPでも読んでみれば? Little SchemerはSeasonedと2冊で1セットだけど、 いやになったなら寄り道するのもいいと思うよ。
個人的には萩谷先生の「関数プログラミング」が好きだったね。 もし古本屋にあれば「ソフトウェア考現学」もマニアックで良かったよ。
PGの「ハッカーと画家」なんかをお勧めしたいなぁ。 Schemeのどういうプログラミングスタイルが効果的なのかを教えてくれるし、 どういったことを出来るようになると良いかを考えるきっかけになるから。 自分のやりたいことをハッキリさせれば読むべき本も自分で探せるようになるんじゃないかなぁ。
こういう変わった感じの関数定義ってどこで勉強してるんですか?
>>391 (define ((compose f g) x) (f (g x)))
>>570 (define (zip list1 . more-lists) (apply map list list1 more-lists))
>>570 のはこう書き換えられるのに気がつきました。
(define (zip . list1) (apply map list list1))
http://codepad.org/jAFgSvuC
>>579 >
>>570 のはこう書き換えられるのに気がつきました。
そう書換えてはいけない。
あえて理由は言わないでおくから考えてみて。
クオートとかクロージャとかマクロとかカリーとか、 そういうのは判ったから、そろそろそういうのに並ぶ新しい概念ってない?
リフレクション?
気ままに
型はそろそろなんとかしてほしいな。 あとはD言語とかの表明とか? 新しくはないな。
キチガイの人のところ見ればそれなりに見つかるんじゃない? 俺は気持ち悪くなるから見たくないけど。
>>576-578 >>574 ですサンクスです。
挙げていただいた本はいずれすべて読みたいです。
Littleが嫌になったわけではないです。とても面白いです。
むしろ早くSeasonedが読みたくて仕方ないです。
ただ、重いです。
情けないようですが、やっぱり理解しやすい日本語で
やさしく書いてあるものが読みたいのです。
Little8〜9章で結構難儀しまして、スレを参照しつつ
おかげ様でなんとか理解したかなと思いますが
だんだん難しくなってきてるのでSeasonedについていけるか不安なのですw
やさしい本を量を読みたいな、と。
でも2冊でひとつという事ですので今はSeasonedまでは読んじゃいます。
どうもでした。スレ汚しで失礼しました。
このスレ、レベルが異常。
モナドだな
今どきArrowだろ常考
モナド言われてたorz じゃあアクターモデルとか
アクターモデルは結構古い
いっそ論理変数と単一化とか…
>>590 ちょっとアローについておれに説明してくれんか?
戦国武将モナド元就が(ry
ゲーデルの不完全性定理にあるような自分で自分自身を 書き換えるなんてアブナイないことをしなければ 形式論理の範囲内で正当であることを示せるって考えて もいいでしょうか?
ゲーデルの不完全性定理の証明で使われた 自然数の体系は、最低限のものしか持ってないのに、 不完全性が証明されたのでみんな驚いた。 メタな記述に問題のあるような書き方だが、 体系の完全性等を証明したければ、 体系を形式的に記述する必要があるので、 どうしてもメタな記述を含むことになる。 形式的にやらないなら別だけど。
ありえる全ての形式についてそれが正当か否かをその体系内で示すのは (少なくとも自然数を体系に含むものであれば) 不可能なわけだけれど、 正当なもののサブセットを正当であると形式的に示すことはできるでしょう。 つまり、その体系内での証明器は、与えられた記述に対して「正当」「不当」「わからない」を返す。 このような証明器で、自分自身が与えられたら「正当」を返せるものが存在するのは自明だから (自分自身と一致するものに対して「正当」、そうでなければ「わからない」を返せばよい)、 後はそのような証明器がどこまではっきり「正当」/「不当」を答えられるようになるかって いう程度問題になるんじゃない?
そのサブセットはチューリング完全でないですねわかります
ありがとうございます。 うわ〜、難しいですね。 お聞きしたかったのは不完全性定理があるからといって 普通な(自己言及しない)数学の証明が破たんするものでも ないと思うのでプログラムの正しさの証明も自分自身に言及 するものでなければ可能なのかなぁ?ということでした。 マクロって自分自身を変身させるんでこういうのって扱いが 面倒なんでしょうか。
俺は自分が完璧であることを知っているが それを証明する必要は無いってことか。 だって証明不可能だから。
この流れ、個人的に\(^^)/ これからは、自己反映計算だ。
流れに乗って質問です。ゲーデル不完全性定理の証明で出てくるような 逆説的自己参照現象を適用系(applicative system)と呼ぶそう ですけど、ゲーデル以外に具体的にどういった適用系の例があるの ですか?
何このスゲー自演くさい流れ(爆)
数学スレでやれ
放っておけばくたびれるさw
>>580 レス有り難う御座います。
どんな場合にまずいことがあるんでしょうか?
考えてみたんですけどわかんなかったです。
LISPでお金儲け したいです 可能ですか??
「ばあちゃん?俺俺、俺だけど。 ACLっての申し込んじゃって請求書きてて困っちゃってるんだ。 お金振り込んでくれない?」 「おお、ケンジかい。ACLってなんだい?」 「あれだよLispだよ。コンピュータの、口座番号言うよ」 「ちょっと待っておくれ、メモ化しないと」 以下略
遅延評価なので振込は引き出しが行われる時に初めて行われ かつその1度しか行われません
「ばあちゃん、ATMで↑みたいに言われたら "身内の不幸"だって言うんだよ? うちら家族の問題だから。あーー あれだ、クロージャだよ」
>「ちょっと待っておくれ、メモ化しないと」 微妙な受け答えにワラタ
>>605 このスレ的にはDelta Calculusとか。
めったに乗らない電車で女子高生の一群と遭遇 A「めっちゃ怖い話し聞いた」 その他「何?」 A「一人暮らしのうちのおばあちゃんに電話がかかてってきて 出てみたら『お母さん?俺やけど・・・・』って言って おばあちゃんが『コンスセルか?』って聞いたら『うん』って・・・ でも、コンスセルおじさんって去年、replacdrで死んでるねん」 その他「えぇ〜!!怖いーーー!!!それで?」 A「『・・・俺、replacdrして・・・・』って言うから、おばあちゃん泣いてしもて 『replacdrの事は気にせんでいいから、もうガベージコレクトされて・・・・』言ったんやて」 その他「うっわー、怖い〜」「せつないーーー」「ほんまにあるんやなぁー、そんなGC」
関西のLisp文化は凄いんだな。
kishiwada.lisp
common lispのスレがもう少しで落ちたりして
621 :
デフォルトの名無しさん :2008/11/25(火) 13:22:50
schemeかlispをゲーム作りながら勉強したいんだけど そういうライブラリってあるの?
>>621 グラフィック出すだけのライブラリでいいなら、Gauche-glとかどうすか?
OpenGLの知識がいるけど。
623 :
デフォルトの名無しさん :2008/11/25(火) 14:30:26
Emacsでゲームをつくるという手もある
これから出そう(?)なLisp本 「はじめてのCommon Lisp」 「図解でわかる Lispの全て」 「Lispの絵本」 「Lispで極めるゲームプログラミング」
グラフィックとかGUIとかは、DrSchemeがお手軽っぽいけど、情報が少なくてどうにも。
SICPの最初のほうにあるグラフィックいじるやつってgaucheでもできんの?
名前がそれだとSunOSでコンパイルに失敗しそうだね
>>627 ちょっと前にそのあたりを読んでいたのですが、
自分はSVGを出力させることにしました。
SVGはただのXML形式のテキストファイルですので。
ビットマップ画像を自分で生成して出力したい場合は、
PPM形式が単純でよいと思います。
自分の場合は出来合いの画像をSVGに並べただけですが。
むろんgauche-GLとか使ってもよいと思いますが、あの例には大げさに思えます。
グレアムのANSI CLのレイトレーサの所でもPPM形式を使ってますね
Vim+MZSchemeをインタフェース使ってる方っていらっしゃいますか? Emacs Lispと比べてどんな感じですか? if_mzschをベースにif_guileとかデッチ上げると幸せになれますか?
635 :
634 :2008/11/25(火) 22:20:25
をの挿入位置間違えました Vim+MZSchemeインタフェースを使ってる方、です
>>634 if_*はVim scriptでできないことを補うためのもの。
if_*をバリバリに使うこともできるけど、標準では使えないという点で色々面倒。
Vim固有のことに首をつっこむならそれ用のAPIを介さないとダメで、
その辺が面倒臭くなりがちだから結局Vim scriptで書いた方が早いことが多い。
>>634 が何をやりたいかにもよるけれど、腐っても最初からLispなEmacsの方が良いよ。
あとScheme系はMzScheme interfaceがあることから
他の処理系用のinterfaceを書いても下手したら見向きもされない。
これは自分がGauche interface書いてvim_devに投げたら総スルーだったこととか関係ありで。
ブラックベリーやノキアでSchemeできないかなあ。 SchemeだけのためにPalm買うってのも何だし。 でも手軽に持ち歩いてどこでも勉強したい。ゲーム感覚で。
つザウルス NintendoDSでSchemeを動かしたって話が過去スレにあったような気も
640 :
634 :2008/11/26(水) 20:59:22
>>637 ありがとうございます、HP拝見させていただきました。
ソースは見られるけどtarやzipでダウンロードしようとするとNotFoundになりますね。
最近Emacs Lispでプログラムを書くのにストレスが溜まって来たので
VimをSchemeで制御できるのなら乗り換えようかと思った次第です。
とりあえず:guileコマンドだけ実装してみました。
(MSGを一回使わないと入力したコマンドが画面に残るのはなぜなんでしょう?)
>>636 Gauche の公式サイトに置いてある mingw バイナリでは SDL って使えないの?
Little Schemer面白い。 10代の頃に感じたコンピューテーションへのセンス・オブ・ワンダー みたいなものがよみがえる。 ただ英語がどんな空気なのか読めないのが悔しい。
Thundergirl Mutation
Computed Stevie Wonder
Little computed Stevie Wonder
m(_ _)m
slibの matrix:product が長い mprod mdet minv などの短い名前に変えると 何かと名前がぶつかることあるのか
名前が長い等の問題はユーザーにまかせておけばいいやって感じだな。 マクロもそうだし、そもそも処理系を選ぶだけでもユーザーの負担が大きい。
Emacs Lispが正規表現を文字列で記述することに対する不満は見かけるのに Scheme(除くGauche、PLTScheme)やCommon Lispではさっぱり見かけないのが不思議だったのですが Emacs Lispと違ってリーダマクロがあるからだったんですね(たぶん) リーダマクロのあるScheme処理系が結構多いということをはじめて知りました
Emacsはギャップバッファに対する正規表現サーチが 組み込み関数なんだよ。 ギャップバッファの性質上、(point)使って実装すると遅い。 Lisp/Schemeは、pregexpみたいなライブラリを自前で書いても それほど速度は落ちない。まともなコンパイラさえあれば。 ;; むしろpregexpは他言語のライブラリと比べても速い。
651 :
649 :2008/11/28(金) 23:44:30
あ、速度はともかく「バックスラッシュのお化け」なところです。 CLでppcreをコンパイルするとperlよりも速いそうですね。 リーダマクロについて調べてみたら Gauche:ない PLT, Guile, Chicken:ある Gambit-C:リードテーブルはあるがリーダマクロの追加・編集はできない のようです
JavaやJavascriptもヒアドキュメントが欲しいってリクエストがあるな。
>>651 たとえばprintf("%d", n);って書くでしょ
バックスラッシュやめて%を使えば解決
もしこれがprintf("\\d", n);だと大変だけど、文字列を使うこと自体は問題ない
>>652 javascriptは解るがjavaでヒアドキュメントが必要な用途ってJSPか?
つか必要な事する段階で間違ってないか?
なんでもやってみればいいのだ LISPならそれが簡単にできるのだから!
やりたいことはやったらえーがなー
657 :
649 :2008/11/29(土) 11:25:50
>>653 オレ表現とか書式文字列/formatテンプレートならそれでもいいかもしれませんが
正規表現ってバックスラッシュを多用しますよね?(私だけ?)
正規表現を文字列で表現するのが問題だというのではなくて
文字列として評価される時のエスケープシーケンスとしてのバックスラッシュと
正規表現としてのバックスラッシュが重なって読み辛くなるという話です。
そしてこれを解消するのはマクロでは無理で、リードマクロの力が必要になるということです。
リーダマクロのないEmacs Lispだから置き換えを勧めているだけでは? 理解力ゼロ?
651の言いたい事はそういう事か、やっと分かった。 理解力の問題か?
ちがった、653ね
リードマクロに健全なマクロ マクロは広大だわ
common lispスレは次は立てないで もうこっちに統合でいいような気がする
>>662 右も左もわからんようなのが来るとこっちのスレすぐに荒れるからやだ
↑みたいなのが荒れる原因
スレタイを肛門リスプにすればそっちの人が集まるだろ
なんて破廉恥な。
The prosecutor who blame other persons is usually a harasser.
>>667 訳:
他人を非難する人というものは大概にして害なる存在である。いないほうがまし。
どうやら
>>665 はスレ違いでないようです(><)←John McCarthy
非難とかスレ違いとか形式的な基準だけで良し悪しが全て決まるわけではないな 非難ってのは既存のものに言及するだけで新しい発見が少ない傾向があるかもしれない けど、例外はいくらでもあるし、意図的に例外を作り出すこともできる 意図的に糞言語を選んでキラーアプリを作ってみせる人間もいるかもな
「ちょっと変わったLisp入門」の第2回っていつ出るの?
,r;;;;ミミミミミミヽ,,_ ,i':r" + `ミ;;, __,、 ≡ 彡 ミ;;;i 〃ニ;;::`lヽ,,_ ≡ 彡 ,,,,,、 ,,,,、、 ミ;;;! 〈 (lll!! テ-;;;;゙fn __,,--、_ .. ,ゞi" ̄ フ‐! ̄~~|-ゞ, ≡ /ヽ-〃;;;;;;;llllll7,,__/" \三=ー"."ヾi `ー‐'、 ,ゝ--、' 〉;r' ≡ 自分自身を客観的に見ることはできるんです >、/:::/<;;;lllメ \ヾ、 ヽTf=ヽ `,| / "ii" ヽ |ノ j,, ヾて)r=- | ヾ: :ヽ;;: | l | l ''t ←―→ )/イ^ ≡ あなたとは違うんです ,イ ヽ二)l(_,>" l| ::\;:: | | | ヽ,,-‐、i' / V i、ヽ--イll"/ ,, ,//,, :;; l // l く> /::l"'i::lll1-=:::: ̄\ ≡ 花深く咲く処 行跡なし ヾ==:"::^::;;:::/;;;;;;;;;:::::::::::::: :::::ゞ ノ/ L/〈:::t_イ::/ll|─-== ヾ \__::::::::/::::::::::::_;;;;;;;;;;;;;;;;;ノノ ヘ >(゙ )l:::l-┴ヾ、ヽ )  ̄~~ ̄ ̄/ :::|T==--::::: // / ト=-|:|-─ ( l / / :: ::l l::::::::::::::::::/ /:::::::::::/:::::(ヽ--─ / | / ヽ_=--"⌒ ゙゙̄ヾ:/ /:::::::/:::::::::`<==-- ノ / /
なんて読むの?喪主?藻ッシュ?モーシュ?
Little Schemerの日本語訳があったんだな 大学で見て驚いた
>>674 SICP の eval-apply の図っぽさが欲しい
逝ってよしオマエモナー逝ってよしオマエモナー… 超循環モナギコ評価器は2chカキコの本質を見せる。
>>671 初期のSmalltalkはBasicで書かれていたらしいですね。
初期のLispはFortranで、とかそういう話か
Lispが出来た頃ってアセンブラとFORTRANぐらいしか 選択肢なかったんでないの
「1958年後半に、マッカーシーの大学院生の一人であった スティーブ・ラッセルがevalの定義を見ていて、 これを機会語に変換すればLispインタプリタが できるじゃないか、と思いついたんだ。」 ハッカーと画家 P.188
マカーシー「つまり、彼は私の論文のevalを[IBM]704の機械語になおして、 バグをとり、それをLispインタプリタと称したんだ。実際そうだった。 それが、Lispが現在の姿を取った瞬間だった。」 ハッカーと画家 P.189
実装言語がなんだろうと関係ない。作ってそれからどうするの? ということが問題なんだよ。
準備できたら、やっぱりいいことするんじゃないか
考えてみたらScheme出来るまで20年経ってるんだね。
R10RSを完全に満たしたScheme処理系でたら本気出す。
R2↑↑10RSを満たすScheme処理系が出るまで死なぬ
じゃ俺はR∞RS出るまで待つ。
第10法則を満たす処理系なら既にあるはずだ
R10RS=Common Lisp
結論:Common Lispを使え。
RωRS が出るまで寝ない。
終わった。
今まさにRεRSが生まれようとしています。
わずかな前進だなw
Little読んだぽっくんはR0.0001RSぐらいかな。 Schemer13章に入った(・ε・)ワズカニ前進
すでにR6RSまで出てますよ。
Schemeは、括弧が多くて、機能が少ない言語でした。
>>696 > RεRS
10秒くらい見つめてたら、眼鏡かけたオタが泣きながら口笛吹いてるように見えた。
(・δ・)
今夜ε-δ論法を語るスレはここですね
ところがここでR1iRSの登場ですよー
規格間の連続性を厳密に定義するわけですね
アキレスの亀による仕様の実装はいつまでも終わらない
処理系を作る以外にSchemeでやることなんてないだろう。
処理系作れるなんて素敵やん。
それで、作ってそれからどうするの?
それで、のしあがってからどうするの
それからエディタ作る。
のし上がってどうするかは 人の勝手
世の無常を感じて仏門に入る
政界に入って世界征服する
おれはみんなを幸せにしたい。
台所で切れていることに気付いたコーヒーを買いに行く
のし上がって悠々自適になったら、好きなだけ言語開発ができるな。
たとえばscheme処理系を作るとか?
今行うべきは、Schemeで一体何をするのが決めることだよ。
そういう金になる話はこんなとこには出てこないよ
Schemeは、数学、SICP,計算機科学がどうのこうのとか、継続が〜等々、 単なる言語なのにやたらノイズが多かった。 それらノイズが無くなれば、Schemeなんて単なる機能の乏しい言語だよ。 どう活用するのか決めないことには未来は無いだろ。 ひたすらノイズを楽しむというのも一つの答えではあるけど、 そんなの馬鹿馬鹿しいと思わない?
>>724 そう思うのならそれでおしまい。
ただ、それも一つの答え。
>>725 そんな言語だとして、こうして人がいるのはなんで?
お前はなぜこのスレに書き込んでる?
schemeと何か という組み合わせ問題を解けばわかるよ
>>725 因果が逆。君の言う「ノイズ」の結果がSchemeだろ。
>>725 おもわない。面白くないなら止めればいい。
>>725 おもわない。面白くないなら止めればいい。
schemeはCLをGCしたら出来た言語
そういう意味でC言語って成功した言語だよね。 ハードウェア寄りの記述もできるのにあまり大きくならなかったし、 色んな環境に移植されてる。 こうして見るとやっぱGCがネックなのがわかる。 処理系をGCレスで作れば色んなとこで使えると思う。
>>733 managedな部分とunmanagedな部分を分離する?
その場合は2つ以上の言語を組み合わせるのが普通だよな
単一の言語でやろうとすればC++の二の舞になる予感が
あらかじめ静的にあれば動的なメモリ確保なんてほとんど使わないっしょ ゲームとか組み込みとか それよ
いつの時代のゲームだよ。
737 :
デフォルトの名無しさん :2008/12/07(日) 22:48:25
全部without-gcingすれば?
consの扱いに困る。 人間のこなせる煩雑さではなくなってしまう。
>>738 ブロックで囲めばいいんでは。
必要なものはブロック内でマークしといて、
それ以外のブロック内で確保されたやつは抜けた時に全部削除。
>>736 今のゲームでも最大長みたいなのは判ってるから
固定プール内でやる事が多いよ。
あまり時代に関係ないと思うが。
>>739 関数やブロック内で寿命を終えるコンスセルの方が圧倒的に少ない。
そりゃわがままだろ
gosh> (use slib) #<undef> gosh> (require 'trace) *** ERROR: connot find file "d:\\gauche\\share\\gauche\\site\\lib/slib/trace" to load Stack Trace: _____________________________ gosh> (require 'trace) #t gosh> trace *** ERROR: unbound variable: trace Stack Trace: _____________________________ になるんですがどうしたらtraceつかえますか
連レス失礼します。 環境はWindows XPでMeadow21.4.1です。
>>743 おそらくだが、slibcat を一旦削除すれば良いと思う。
slib 自体のインストールは出来てるよな?
ここはGaucheサポート掲示板じゃないから
論理否定が理解できるなら継続も理解できる筈って言われたんだけどマジですか?
カリー、ハワードの対応とかいうあれ?
論理否定も継続も理解してるつもりだが、相関はわからん。 カリー・ハワードを勉強すればわかるの?
という用語を作り、SF ファンとして有名なフォレスト・J・アッカーマン氏が 12 月 4 日に 92 歳で死去したそうだ
アッカーマン関数の?
ほう、newlisp10.0が来ましたな
>>734 他の言語との連携が前提なら処理系ごとに違うffiをなんとかしてください
>>758 統一できるかどうかは直接は関係ないと思うんだ。
問題があるとすれば "ad hoc, informally-specified, bug-ridden, slow" のどれか。
>>755 おそらく湾岸戦争の兵站支援システムのことだろうね。Allegroです。
他にも軍の研究所とかがたまに人を募集していたなぁ。
>>760 Lispハカーの募集をしていたということですか?
>>760 ある程度大きいもの作ろうとするとnamaspaceありのcommon lispになるのか
emacs lispがnamespaceなしでなんとなってるのはなんでだろう
後方互換性という名の呪縛
「世界で一つだけの、自分で作る手作り中央銀行」 ってプロジェクトをPHPでやってるんだけど、興味ある?
omoti 何やってんの?
>>763 「emacs lispがnamespaceなしなのはなんでだろう」じゃなくて
「emacs lispがnamespaceなしでなんと”か”なってるのはなんでだろう 」では?
その前にnamaspaceへ突っこめ
懐かしい名前が出たなおい
>>748-750 とりあえず、第五世代コンピュータの成果本読んでみてからだよ。
せっかく和書で読めるんだし。
>>755 理論だけやって、応用をやらなかったら廃れる。
無意味に理論を追求しても、残るものは少ない。
概観を知ってもコードが書ける訳じゃないし。別にどうでも良いかな。
あんな馬鹿な値段で買わなくても図書館で読めるよ。 扱うLISPの仕様や実装が古臭いから、今読むと混乱するかもしれないし、 あんまり大したこと書いてないよ。 流し読み程度でいいんじゃないかね。
>> 仕様や実装が古臭い が、どういうことなのか解らないくらいの知識しかないけど、 今の時代に合った、Lispの処理系の作成本とか、読みたいな。
>>772 これは私も持っていますが、今読む価値があるとは思えません。
当時と違って、ソースは幾らでも手に入るし、
blogを通して作者と会話できる時代ですから。
>blogを通して作者と会話できる時代ですから。 週一更新のページで三日返事がないとか言ってぶち切れる人とか怖いです
処理系の利用者を大切にしてない(笑)
処理系作成本は売れるのかな・・
その本のはいわゆる俺LISPだな。 当時は処理系実装自体が珍しかったのか本になってるけど、 実装としてはあまり見所はない。 ソース読みたいならmini-schemeのソースでも読んだ方がいい。 1日あれば読める程度の規模でスタックレスで末尾再帰でフル継続だ。
MLやん!
>>769 >第五世代コンピュータの成果本読んでみてからだよ。
kwsk
なんか絶版になったのしかみつからなかった
スタックレスでついでにメモリプールも使えば、副作用だらけですな。 副作用を根絶するというより、よくあるパターンに落とし込むことでバグを防ぐ という方が正しいと思わないか?
は?
メモリの割り当てが副作用ならconsにも副作用があることになる。 副作用とは何か? 俺達は何と戦っているのか?
"Come, learn to fish!" Guy L Steele
もし誰かにつりを教えたらその人は川か海でつりをするだろう。 もし誰かに養殖を教えたらその人はいくらでも魚を増やすだろう。
>>785 同じ引数に同じメモリセルを返すconsなら参照透明だから
(eq? (cons #t #t) (cons #t #t)) => #t
それって理論が破綻してない? 実装的にはわかるけどさ
後藤先生のHLISPってそんな感じじゃなかったっけ
>>788 副作用無しで使うならセマンティクスも別に問題にならないと思う。
>>789 >それって理論が破綻してない?
全然。むしろ昔の数学的。
そのHCONSにはポインタの循環がないからGCレスにできると思うのだが、 純粋関数型言語はGC不要なの?
メモ化とか再帰のための循環参照をなくせば参照カウントにできると思います でもHaskellとか水面下で副作用を行う言語ではGCは必要です
別にどうでもいいトリビアだが、いわゆる参照カウント方式もGCの一種だ。
GCがなくてすむってのは、全部スタック上の一時変数で済むってことかな? 表面的な文法でなくて、本当に純粋に関数的な言語(プログラム)なら可能だと思うが、 それは道具として使い物にならないという話だと思う
ダイナミックであろうがレキシカルであろうがクロージャがある以上 (参照カウントを含む)GCなしのスタックだけには出来ないと思います そもそもコンスセルを返す関数がある限りGCは必要なのでは もっとも解放をあきらめるとか、明示的な解放に頼るなら別ですが
798 :
793 :2008/12/13(土) 21:23:15
訂正します 参照カウントは使っていいです boehmとかはだめです
>>798 何が聞きたいのかよくわからん
「ポインタの循環がないから、巡回チェック不要の参照カウントでOK?」
という質問か?
「巡回チェック不要の参照カウンタ」 が嬉しいのか?
(まぁ手間が省けるのは確かだが、だからといってCONSがどうとかは意味不明)
それとも、循環参照があると参照カウンタは使えないと思い込んでいるのか?
はたまた、「同じ引数には同じCONSセルを返す」 から、その引数は
永遠に固定メモリ領域においておけばよいからGC不要?みたいな発想かな。
すまんエスパーしすぎた
>循環参照があると参照カウンタは使えないと思い込んでいるのか? そうです それと、boehm gcの移植が不可能だと思い込んでいる、というのもあります
>>800 どんなプラットフォームに移植しようと思ったんですか?
802 :
デフォルトの名無しさん :2008/12/13(土) 23:56:46
質問です。 ラムダ計算の分野と コンパイラ作成や最適化の分野って 同じ?違う?
>>793 実装の問題と仕様の問題を取り違えている。
>>802 ラムダ計算を使って、
コンパイラを作ったり、最適化をしたりする「ことがあります」
俺たちは今まで一体何をしてきたんだ・・・。
勉強したラムダとはよく言ったもの
誰がうまいこと言えと(ry
>>802 >>805 確かに、「使う」 ことはあるかもしれんが、たぶん
>>802 の聞きたい
「分野」 という意味においては 「まったく別」 が答えになるんジャマイカ
コンパイラの最適化としてのラムダ式の変形が、 サイモンペイトンジョーンズ先生@MSリサーチの博士論文。 ガイスティール先生の > Rabbit: A Compiler for Scheme も似たような話。
いまのコンピュータはチューリングマシンのエミュレータとかいいますから ラムダ算法マシンでは役に立つんじゃないでしょうか
>>810 PLTの人たちはRabbitのあとを続けるような研究もやってるね。
今日現在までのところ最適化とラムダの間には直接の関係は何もない。 もしラムダみたいなものやリスプみたいなものが最適化の話にでてきたとしても・・・それは単に実装に便利だからというだけの話。 しかし、もし、アセンブラのニーモニックにlambdaとか入る時代になることがあれば話も違ってくると思われる。 一目でいいから拝ませてほしい。
ぷげら
極度に抽象化されたアセンブラか あんたそりゃLispやがな
抽象化されたアセンブラって
つ C--
RTL
会λλλ
(´・λ・`)
on lispでsicpをclassicalな本って言ってるんだけど そんな位置づけなの?
まぁ細かいところでは色々と古い。#t とか #f とかないし。
Schemeはラテン語みたいなものだ。 そういう意味ですか?(´・ω・`)
格調高いという意味では。
みなさん、SCIPより古いコンピュータ本で、 SCIPより最近の参照回数が多い本ってある? 俺はないわ。 ドラゴンブックやKnuthのアルゴリズム本は、 ずっと参照回数が少なくなってる。 D+A=Pなんて昔は良く参照したのに…
それらは中身はあんまり見ないけど、 本棚に並んでる背表紙をチラ見してニヤニヤすることは良くある。
ちょっと違うけど"R5RS-ja"と"Recursive Functions of Symbolic Expressions and their Computation by Machine"は印刷して持ち歩いて読んでました (前者はSICPより後ですが) 早くR6RS版Scheme48が出ないかなぁ リリースの間隔が開いてる所を見ると今度こそR6RS版になるのかなぁ 出たらR6RSを読み始めよう
Scheme48の48ってどういう意味なの?
>>829 思い立ってから48時間で出来ますた、の48
マニュアルに書いてあるよ。
>>826 SCIPに誰も突っ込まないのな
まさかskipとか言うオチ?
「HaskellでSchemeを48時間」、 Exerciseを全部やったとは言え、 480時間くらいかかった俺が通りますよ
codepad.orgのサーバーの能力を計測してみた。
http://codepad.org/ECYEp0w8 Timing per iterations: 100
cpu time: 260 real time: 1219 gc time: 90
参考までに自宅PCの結果を晒してみるwww
Timing per iterations: 100
cpu time: 1282 real time: 1297 gc time: 78
>>835 書き忘れた。
自宅のはCeleron 2.66Ghz。
サーバーのCPUって何だろう?
840 :
デフォルトの名無しさん :2008/12/23(火) 20:56:20
「Let Over Lambda」ってどうなの?
2CHで レス番+名前の行をWクリックで折り畳む機能っていつからついたの?
1年前
Cへのembedding ができるのはgoshだけ?
やればみんなできるんじゃないか? あとgoshはREPLを起動するプログラムの名前なので、その文脈ではGaucheと 呼ぶのが正しい。
正しい綴りではないけど発音は同じになってる。
ガウチェ(・∀・)
>>843 何でGaucheだけだと思ったのかは知らないけど、
PLTとかも普通にできるよ。ドキュメントにやり方がきちんと載ってる。
gosh ごっしゅ Gauche ごーしゅ って言い分けない?
goshだと「ガシュ」って読めると思うけど
Oh My Gosh!
怖い怖い怖い。
みなさんの大好きなアレおいておきますね。 つ()
gosh [ga∫] Gauche [gou∫]
なんでもoutline-modeのコード折畳みがlispにも欲しいと思った
common lisp関係のパッケージのバージョン管理がgitになっていた svnはもう古いのだろうか
Gaucheでメタプログラミング第2回が10日近く前に出てましたね
もういいだろ、やめとけよ。
859 :
デフォルトの名無しさん :2008/12/28(日) 12:35:05
質問です ifを使うときに set!をたくさん使ってカッコが増えると うまくいきません let*でくくろうにも複雑になり過ぎて わかりにくくlet*の外にも引き渡す値が多いのでそれもうまくいきません どうすればいいんでしょうか? (if (eqv? tate-on TRUE) ; 条件判定 ; 縦書きの時 ( ;;縦書き (set! mojisu(string-length text)) ;文字列の長さを数える (set! i 0) (while (< i mojisu) (set! moji(substring text i (+ i 1))) (set! mojitotyu (string-append mojitotyu "\n" moji)) (set! i (+ i 1))) (set! mojisu(string-length mojitotyu)) (set! text (substring mojitotyu 1 mojisu)) (display "縦書き") ) (display "横書き"); 横書きの時 )
つ begin
861 :
859 :2008/12/28(日) 12:49:19
ありがとうございます! ifの分岐の中にbeginをいれてやってみます
コードパッドに貼るのは良いけど、アンカーと一行説明くらい書いてくれ。
> (printf (regexp-replace* "(.)" "hello" "\\1\n")) h e l l o
867 :
859 :2008/12/28(日) 21:42:43
あれいつの間にこんなにレスがあってびっくりしてます。 >865 自分の使ってるGIMPというフリーソフトのscript-Fuという Schemeっぽいのでやってるんですが Error: eval: unbound variable: regexp-replace* Error: eval: unbound variable: printf でしたOTL すいません、また質問なんですけど 型の違う変数どうしを計算するにはどうしたらよいのでしょうか? wはint32 sはなにかわからないのですが0から1000までの数しか使いません (- w s)すると Error: -: argument 1 must be: number とでてしまいます たぶん型が違うんだなというところまでは分かったのですが その先どうしたらよいかわかりません よろしくお願いします。
そのwはどこで手に入れたの? wって本当に数値なの? 実はリストだったりしないの?
そのwはどこで手に入れたのw wって本当に数値なのw 実はリストだったりしないのw
870 :
859 :2008/12/28(日) 22:03:26
wのほうはソフトの方言?解説書によればint32で GIMPで開いている画像の幅で 実際に入力されている値(400)もきちんと出ています。
括弧で括られてないか?
マクロの練習がてら then/else式がそれぞれシンボルthen/elseに連なるリストの時は そのcdrをbeginで囲った式として働き、 それ以外はif式と同じように働くマクロif*を書いてみては? (if* boolean (then (foo) (bar)) (else (hoge) (funi))) みたいな
873 :
859 :2008/12/28(日) 22:40:47
うわあああwの値は括弧でくくられてた!!! 試しに普通の計算式(-12 5)をやってみたら 括弧のない7が表示されました。 あと、wを使った(- w s)の計算結果を 入力するところの型はFLOATです 後出しですいません。
874 :
859 :2008/12/28(日) 22:46:29
すいませんすいませんwを取り込む時に (set! w(car(gimp-image-width img))) という風にcarをつけたら計算出ました すいませんすいませんこんなことで煩わせてごめんなさい
というか、script-fuがschemeになっているの知らなかった。 SIODはscheme風のLispだったよね。
878 :
デフォルトの名無しさん :2008/12/29(月) 20:41:57
Pythonで書けるからわざわざScheme使ってる人も少なそうだけどな
Webブラウザで使えればSchemeももっと流行るだろうに
流行ると何が嬉しいんだ 流行らせる以外の解決策はないのか?
SGMLのDSSSLに採用されて流行るかと思った頃もありました(AA略
1. 人類すべてに叡智を授ける 2. アクシズを地球に落とす 3. プログラマの9割をバグで抹殺する
そういやMITの初年度のカリキュラムはSchemeからPythonになったとどっかでみたような ソース示せないけど
白いモビルスーツが勝つわ…
kknr
そのうちRubyになるんだろうなぁ。
ないない
都内の洋書屋行くと置いてある種類は Ruby>Python>>>>>>>>Lisp だね。 MITもポピュラー指向になったのだから次はより人気のあるRubyだよ。
Java>>>>>>>>>>>>>>>>>>>>越えられない壁>>>>>>>>>>>>>>>>>>>>>>>>>>Ruby>Python>>>>>>>>Lisp
>>890 アメリカではPythonの方がずっと多い。
ただRubyはたぶん日本のソフトウェアとしては過去最高の本の冊数だと思う。
Lisp、Scheme合わせても全く及ばない。
pearl、Rubyとくれば、次はDiamondだな
Rubyは言語仕様が曖昧・仕様変更とその理由はもっと曖昧 だからあんまり教育には向かない。 #それがいいか悪いかはまた別問題だが
Scheme is the Diamond language.
そのうちアメリカの本屋に溢れかえるのはArc本だ。 何故って世間はハッカーの遠く後を追っかけるからさ。
>>896 ミスター武士道とお呼びしてもいいですか
武士道は首都高速ですか。
今年はgaucheにかける!
汁を!
(cons 'ake 'ome)
schemeのソースを複数処理系に対応させたいと思います。 処理系依存の関数を使っている箇所があるので その関数を定義していなければ自作の代用関数で置き換えます。 今のところ、 scmでは組込のdefined? gaucheでは例外を利用した自作のdefined? を使って判定しており、他は未対応です。 ある識別子がdefine済みかどうかを判定する、 R5RSの範囲で互換性のある方法があれば教えてください。
r5rsの範囲からは外れるが、srfi-0とかsrfi-7あたりでそうでしょ。 問題は各処理系が自分自身を表わすfeature-identifierを持ってるかなんだけど。
そうでしょ、じゃないや。どうでしょ。
(cons 'koto (cons 'yoro '()))
>>903 Gauche では global-variable-bound? が使えるよ。
でも、これは実行時の判定になるので、不充分なケースがあり得る。
slib とかを参考にしてみたら?
908 :
903 :2009/01/02(金) 16:23:33
>>904 , 907
srfi-0のcond-expandで判定することにします。
ありがとうございました。
(abbrev my-foo foo-cl) (define my-foo foo-scm) でschemeでもclでも動くプログラムは書けるのだろうか
結婚式2週間前、IPA勤務の新郎がつこうた
http://tsushima.2ch.net/test/read.cgi/news/1230997845/ 仁義なきキンタマ ウイルス情報 Part80
http://changi.2ch.net/test/read.cgi/download/1229742858/546 546 :[名無し]さん(bin+cue).rar :sage :2009/01/04(日) 00:24:59
>>500 報告する時は、詳しく的確に、一部だけ報告しないでお願いね
[殺人] Administrator(20081230-101522)のキンタマ.zip 2,263,376,860 09ed98f10653c3fc2555621ceeed6bc33e8f6228
[殺人] Administrator(20081230-101522)のメール.zip 59,426,579 4da9459b30eec31f58b86530dbb48d1cf86ef4be
[写真集][IV] Administrator(20081230-101522)のアルバム.zip 2,205,946,474 9d87cc0e08dc0e3afd959fcead6c48d569787cee
膨大な量のファイル数キンタマ ファイル数 13508 フォルダ数2381
以前勤めてた会社の資料など多数 独立行政法人情報処理推進機構などの資料など無いと思うが
有るかも知れない、あまりにも数が有り過ぎる、メールなどは、古いものばかりメルマガなど膨大な量
個人情報などは、披露宴主席者などの住所、名前、電話、メール 数十人分しかしエロばっかり落としてるな
ちなみに ハメ撮りscr 踏んだみたいね
早稲田実業学校中等部卒業
早稲田実業学校高等部卒業
早稲田大学政治経済学部政治学科卒業
卒論「知的財産権とインターネット技術」
当時の同大学理工学大学院の大川功 賞佳作を受賞
コンピュータ関連会社に入社ソフトウェア開発の仕事を経て
2005年に独立行政法人情報処理推進機構に入社
ソフトウェア・エンジニアリング・センター企画グループに配属
同グループ主任 岡田さん33歳
2009年1月19日結婚式・・・・
r5rsで list の中に一つでも真があれば真を返す関数と 一つでも偽があれば偽を返す関数はありますか? 必ずあるとは思うのですが、 どんなキーワードで探せば良いか思いつきませんでした…。
orとandじゃ駄目なんかね?
>>911-912 あれは関数じゃない。
r5rs には無い。
けど、srfiでは定義されてる。
any と every
>>912-913 ありがとうございます
(eval (cons 'and (mapcar = '(1 0 2) '(1 1 2)))) -> #f
(eval (cons 'or (mapcar = '(1 0 2) '(1 1 2)))) -> #t
any と every は使えない環境でしたので
こうする事にしました。
そうだね、applyすればできるような、と思ったわけだが、やってみたら orとかandは関数じゃないのでダメ(shortcut semantics のためには関数にできない)だた。
...延々マクロで悩んでいたw
おいおいevalは最後の武器だろ
自前でanyとeveryを定義しとくって選択肢は残されてないのか。
何故スペシャルフォームでは駄目なのか……
要はその場でループ回せばいいと思うんだけど ループを細かく何種類も分類して名前をつけて再利用 でも、名前のない関数をたくさん使う おもしろいね
>>914 そういう動作でいいんなら
(memq #t list)
(not (memq #f lis))
じゃいけないのん?
>ループを細かく何種類も分類して名前をつけて再利用 ポイントフリースタイルですね、わかりました
John W. Backusキター!
■問 関数fのaからbまでの積分値を計算する手続きを定義せよ。 引数にf,a,bとnをとり、Simpson公式を使うこと。(nは公式で使用する分割数で偶整数)
宿題の丸投げか
教えて君はHead first Scheme読めば?英語だけど。
>>925 公式通りに愚直に実装したよ
こんなの提出したら赤点喰らうだろうな
これは多分SICP 1章の練習問題だから、綺麗なものはググったら見付かるだろう
(define (simpson f a b n)
(if (and (< b a) (zero? n))
(error "undefined")
(let* ((h (/ (- b a) n))
(f0 (f a))
(sige (do ((ret 0)
(i 1 (+ i 1)))
((> i (- (/ n 2) 1)) ret)
(set! ret (+ ret (f (+ a (* 2 i h)))))))
(sigo (do ((ret 0)
(i 1 (+ i 1)))
((> i (/ n 2)) ret)
(set! ret (+ ret (f (+ a (* (- (* 2 i) 1) h)))))))
(fn (f b)))
(* (/ h 3) (+ f0 sige sigo fn)))))
しかしsicpが教科書とか羨ましすぎる
俺の学校は林晴比古の新C入門だった
(* (/ h 3) (+ f0 (* 2 sige) (* 4 sigo) fn))ね…orz
>>930 > 俺の学校は林晴比古の新C入門だった
...説教してやるから先生連れてこい、とか言いたくなった
>>930 925じゃないが,やっぱSchemeすごいな.
(define testfunc (lambda (x) (* x x)))
(simpson testfunc 0 1 100)
で「1/3」と出るんだね.C/Fortranばっかやってたから新鮮だわ.
CLで (defun simpson (f a b n) (let* ((h (/ (- b a) n)) (e (* 2 (loop for i from 1 to (1- (/ n 2)) sum (funcall f #1=(+ (* 2 i h) a))))) (o (* 4 (loop for i from 1 to (/ n 2) sum (funcall f (- #1# h)))))) (* 1/3 h (+ (funcall f a) e o (funcall f b))))) (simpson (lambda (x) (* x x)) 0 1 2) ;=>1/3
はひー 新年早々 積分で盛り上がるこのスレって 奇跡で出来てるんですね〜
はい、そこ 恥ずかしいS式禁止
微分: 微かに分る 積分: 分った積もり
今年の抱負 Seasoned Schemerの残り(15〜最後)を読む! SICP読む! ものまね鳥読む! GEBよむ! わだばSchemerになる!わだばSchemerになる! わだばSchemerになる!わだばSchemerになる! わだばSchemerになる!わだばSchemerになる!
xyzzy Lispで (defun simpson (f a b n) (let* ((h (/ (- b a) n)) (i 1) (r 0) (e (* 2 (loop (if (> i (1- (/ n 2))) (return r)) (setq r (+ r (funcall f (+ (* 2 i h) a)))) (setq i (1+ i))))) (i 1) (r 0) (o (* 4 (loop (if (> i (/ n 2)) (return r)) (setq r (+ r (funcall f (- (+ (* 2 i h) a) h)))) (setq i (1+ i))))) ) (* 1/3 h (+ (funcall f a) e o (funcall f b))))) (simpson '(lambda (x) (* x x)) 0 1 100) -> 1/3 (simpson '(lambda (x) 1) 0 5 100) -> 5 (simpson '(lambda (x) x) 0 5 100) -> 25/2
あらあら うふふ
Alysia P. Hackerさんですか
Lispコードを素早く読むコツを教えてくれ 括弧が多すぎて対を探すのが手間かかりすぎるw
Common Lisp, とりわけSBCLを使ってるんですが, コアファイルをダンプするように, リスト,配列,構造体などの個々のLispオブジェクトをファイルにダンプしたり, 逆に読み込んだりするようなライブラリはありますでしょうか?
括弧? そんなものあったっけ? マジレスするならちゃんとしたエディタ使えばインデントでわかるっしょ 慣れてしまえば括弧なんて空気みたいなもんだよ
インデントがあれば括弧は要らない……なんて言っちゃいけないんだろうな
つ SRFI-49
>>947 >>948 おお゛お゛う, なんというスピード対応, ありがとうございます.
早速試してみます.
navi2chのバージョンアップ汁
今だったら、LISPマシン向きのアーキテクチャをFPGAなんぞで実装出来るのでは?
>>952 なるほど、興味深いハードウェアですね。
>>947 ,948の考え方と併せると、将来はプログラミング過程をチップに
ダンプ(配線)として保存しながら、「昨日の続きをやるか」となるかもと妄想。
ARIAネタにつきあってくれたSchemerのみんな、ありがとう。
こちらこそ、でっかいありがとうです。
>>952 元個人VAX11ユーザだったせいかurlにほくそ笑んだよ
on lispの日本語翻訳みれなくなってない?
あ、ほんとだ見れないや
Gaucheのlet-syntax&syntax-rulesの動作が他と違う。 これはR5RSに合っている? 合っていないなら既知のバグ? #外側syntax-rulesでキャプチャした_argsの中のx:が #内側syntax-rulesのキーワードx:と別扱いされているのかも。 (define-syntax test-let (syntax-rules () ((_test-let . _args) (let-syntax ((_test (syntax-rules (x:) ((_test x: . _args2) '_args2) ((_test _any . _args2) '(_any . _args2))))) (_test . _args))))) (display (test-let x: 1));=>(1) (newline) (display (test-let y 1));gauche=>(1), others=>(y 1) (newline)
Gaucheではsyntax-rulesマクロを生成するsyntax-rulesマクロは正常に働きません
962 :
960 :2009/01/11(日) 18:32:56
963 :
961 :2009/01/11(日) 18:34:14
とはいうものの > 外側syntax-rulesでキャプチャした_argsの中のx:が > 内側syntax-rulesのキーワードx:と別扱いされているのかも。 なら(test-let x: 1)のほうがうまくいかないはず。 (test-let y 1)がどうして(_test x: . _args2) にマッチするんだろう? ???
純粋さよりシンプルさを重視する傾向にあるRnRS-Schemeで どうしてsyntax-rulesやsyntax-caseみたいな複雑なマクロが採用されているのかわかりませんね
965 :
964 :2009/01/11(日) 23:53:51
syntax-rulesやsyntax-caseを否定/批判しているわけではありませんので、悪しからず
いや、もっともな意見だね define-macroでいいもの 追求してオナニーするための道具でしかない
シンプルさ重視ならレガシーマクロもいらないんじゃないの eval-whenとかけっこう複雑だし javascriptかluaを使えばいいと思うよ
個人的な意見だけど、ハイジーニックなマクロは define-macroに付き物の 「実行時・コンパイル時」とかそういう「泥臭い」概念を 排除して、純粋に「アルゴリズミックランゲージ」を追求しようとしたんじゃない かなーと思う。 あと、コンパイル時にLispコードが走るってのは理論面でちょっと扱いづらい ような気もするので、それもあるかも。 まぁ良し悪しは別ね。 俺はdefine-macroの方が好き。
> 968 syntax-rulesまではよかった、までは・・・
そのよさを説明できないのが問題なんだな 逆に、syntax-caseのほうが強力だと説明するのは簡単だけど
>>968 >あと、コンパイル時にLispコードが走るってのは理論面でちょっと扱いづらい
ような気もするので、それもあるかも。
それはあると思う。別にdefine-syntaxはコンパイルタイムで実行しなければならない
というわけじゃないんじゃないか。
たまたま、分離できるから分離してコンパイルタイムで実行しているだけで、別にその
必然は無いだろう。
関係ないけれど、Schemeがらみでよく考えると意味がつながらない説明が結構ある気が
する。(いままで何となく納得していたけど)
例えば、代入はダメとか。手続き型みたくはプログラム書くなとか。それでいて、
具体的に、どういうものが関数型プログラミングなのかよくわからないという状態。
なんかもー別に、関数型スタイルにこだわる必要ないんじゃない?
>>972 内部に状態を持たない処理を組み合わせて、
プログラムを書く手法が関数型なんだと思うが。
お前さんも自分で書いてるように。
関数型にマッチしなけりゃオブジェクト指向とかも使えばいいし、
何でもかんでも参照透明にしないでもいいじゃない。
ハッシュとか普通に副作用使ってるし。
参照透明にしたところで、幸せになれることってそんなに無いし。
お前が幸せになるためにあるわけじゃないから当たり前だな。
再現できたりできなかったりするバグとお別れできるのって、 割と幸せじゃない?
関数型で書くから人は幸せになれるんじゃない 幸せになろうとする過程こそが幸せなんだ
幸せってなんだっけ
しょうゆ〜こと
言語が複雑になるとcall/ccの実装が困難になるの? common lispにcall/ccないのはそのため?
call/ccがあるとunwind-protectの実装が不可能になるとか GCとC++デストラクタみたいな関係?
>>976 手続き型から関数型への変換は機械的にできるんだが、
それをやってもバグが簡単に見つかるわけじゃない。
そうやって変換したものは、形式上は関数型だが 内容は手続き型そのものだから「こんなの関数型じゃない!」となる。 「関数型」の定義が分からないっていうのはそういうこと。
>>982 関数的な、参照透明性が保証されている書き方をするなら、
同じ引数を渡せば必ず同じ値が返ってくる。
再現できたりできなかったりするバグっていうのは、
内部に状態を持ってて、その状態がその時々で異なるからこそ、
発生するわけじゃない?
ついでに言うと、どんなバグでも見付かりやすくはならんぞ。勿論。
説明しよう 手続き型のプログラムを機械的に変換することで 「再現できたりできなかったりするバグ」はなんか別の種類のバグに変換されるのだ そして、どんなバグでも見付かりやすくはならないのだ
綺麗なモジュールと汚いモジュールを分離できるのはある程度有効なんじゃね 綺麗な奴はテストで品質を保証しやすいし、 怪しいのは汚い方だろう、と見当がつけられる
綺麗か汚いかをどんな基準で決めるかって話だが・・・ 代入を使うか使わないかはあまり意味がない気がしてきた。 ポイントフリースタイルは複雑にならなければ綺麗だと思う。 代入を使わないんじゃなくて、変数を使わないスタイル。
>>988 綺麗汚いっつったらなんか主観的な美的観点っぽい話になってしまうか
俺の判断基準はもっとシンプルで、
外部の状態に依存する/外部の状態を変更するものは汚い
そうでなく、もし状態を扱っていても、内部で完結していれば、綺麗
です
グローバル変数、I/O、状態を扱う外部モジュールへの依存、などなどが
「汚い」部類に入ることになります
オブジェクト指向っぽくなってきたね やはり最後に勝つのはマルチパラダイムか
Lisp的にはもともとそうなのでは LispでEmacsのようなプログラムが作れるわけですが 参照透明でお上品でお綺麗なEmacsなんて想像もつかない キーを一文字打鍵するだけで全部コピーするのは流石にナシでしょうし モナドだらけになるのでしょうか?
>>989 I/Oもなの?
Lisp/Schemeが、I/Oに対して行なったストリーム抽象の貢献は、
先行があったとはいえ、独自のものがあったと思うけれど…
993 :
デフォルトの名無しさん :2009/01/13(火) 16:29:40
Scheme やり始めた者です。Gauche でやってます。 質問です。 (define (foo a b c) (define (bar d e f) (略 こんなふうに、手続きを作る define の中に、手続きを作る define って書けるじゃないですか。 で、内側の define の前に、if とか when とか書いたら、 (define (foo a b c) (if (null? a) (exit 1)) (define (bar d e f) (略 gosh: "error": Compile Error: syntax-error: the form can appear only in the toplevel: (define (bar ..... って怒られました。 何でダメなのでしょうか。 環境: %uname -prs FreeBSD 7.0-RELEASE-p1 i386 %gosh -V Gauche scheme interpreter, version 0.8.14 [utf-8,pthreads]
>>992 えーと、自分の「汚い」という意味は、「悪い」というのとは違います
I/Oなしで意味のあるプログラムを書くのは不可能ですし……
単に「現実の泥仕事」に近く、「バグや問題が出やすい場所」と認識しているだけです
>>993 defineは式ではないので本体部の先頭かトップレベルでしか規格で許されていないから
996 :
993 :2009/01/13(火) 17:54:15
>>995 さん
ありがとうございます。
調べたら確かにそうかいてありました。
きれいな言語仕様してるだろ ウソみたいだろ 死んでるんだぜ。それで… たいしたキズもないのに、ただ、ちょっとタイプどころが悪かっただけで… もう動かないんだぜ な ウソみたいだろ
もうわけわからん。
まだだまだ終わらんよ
1000なら今年はLispで仕事ができる
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。