1 :
デフォルトの名無しさん :
2011/04/20(水) 20:41:36.21
1乙-p?
r7rs では健全でないマクロは書けない? それとも large language で規定されるのかなぁ
おっぱい
即死判定とかってなくなった?
関数 (define (fn args) ... outputval ) を拡張して出力ふやしたい でかいライブラリの一部なのであまりいじりたくない。のでglobal varを増やすべきか (define fn-option-output nil) ... (define (fn args) ... (set! fn-option-output someval)... outputval ) 多値出力で補助的出力を返すべきか もっとエレガントな方法ありますか?
多値でなんかいけない理由があるの?
fnをcall-with-output-stringで呼ぶこと多いので オプション出力の扱いがめんどう
>>8 オプショナルな引数を追加できるなら、mutableな構造を渡してそこにセットさせる
(define (fn args . opt)
... (when (and (pair? opt) (pair? (car opt))) (set-car! (car opt) someval) ...))
か、あるいは継続手続きを取らせる
(define (fn args . opt)
... (if (and (pair? opt) (procedure? (car opt))) ((car opt) outputval someval) outputval))
lambdaをランバダ・・・!?とよんでしまった、恥ずかしい///
何年前のネタだよ
さて私は何歳でしょうカッ!
Gaucheの専用スレってないの? ここでいいのかな?
>>16 ここでいいよ、 gauche ユーザ多いし
Gauche って r6rs の便利な部分だけは取り込むって感じのスタンス だったけど、 r7rs にはなんか積極的な雰囲気を感じる。 (まだまだこれから議論されるからなんとも言えんとこもあるが。) やっぱ r6rs は駄目な子なんかな。
結構違うから、実装するの面倒だしな。 r5rsの部分もない状態なら、r6rsだけやる選択もあっただろうが。
Gaucheはscheme原理主義
ン?さらにschemeのバージョン違いの話でしょ。
Gauche は実用主義だよ。 割と節操なく CL とかの便利機能を取り込んでる。 とは言え、 Scheme らしいスジの良さとのトレードオフの見極めがうまいとは思う。 俺は r6rs ってそれほど駄目だとは思わんのだが、 スクリプト言語として使うならやっぱ Gauche が「楽」という印象。
ゴーシュでいいの読み? セロ弾きのゴーシュのGaucheだよね。
名前の由来のひとつではあるし、だいたい俺が会った人はみんなゴーシュと呼んでますね。
なんだフグじゃないのか? 辞書引いたら病気の名前もあった。 Gau・cher's disease n. 【医】 ゴーシェ病 《遺伝性のグルコセレブロシド代謝障害》
綴ってある通りに読んだらゴシュかゴーシュにならない?
電子辞書に発音させてみたらゴシュと言った
「左」という意味だと聞いたが
gauche = ガウチェ
翻訳ロボット 作れるって本当ですか?
作れます
階乗とかハノイの塔あたりを作ったあと、次になんかまとまった プログラムが書けません。お題というか、次のステップにつなげるいい本とか ないでしょうか?
>>35 計算機科学の基礎教養があれば、適当なコード読んでLispのイディオム学べば良いし、
そういった知識がないなら、SICPとかの計算機科学の教科書を読めば良い。
ウェブに転がってる大学の講義の問題をLispで書いてみたりするのも良いと思う。
もっと軽めにやりたいなら、Practical Common Lispとかは割と実用的で軽め。
racketで作ったwebサイトがracketのバージョン上げたら動かなくなった 何か大幅な変更あったの?
なんでバージョンアップする前に変更点チェックしないんだよw
>>35 他言語の小さいアプリを移植してみるのがわりとおすすめ、その際schemeらしい処理に書き換えながら行う
unitテストのついてる奴があればテストで同じ結果がだせるようにすることで間違いなく関数単位で動作させている安心感もえられる
まさかチュートリアルに書いてあるようなことまで変更なるとは思ってなかった
うんまあ、なんでも断言する奴はバカだ(キリッ
人を見て法を説けということだねえ
もう明日からPythonに乗り換えるわ
連休だからな
マクロの必要性をあまり感じないのは、俺だけ? 正直、文法を拡張したいと、思ったことが無い。
>>47 おれは文法を拡張したい、とは思ってないよ。
おれは個人で巨大なプログラムを、効率よく書きたい。
そのために、マクロでプログラムを短く圧縮して書く以外の
方法を知らない。ある意味しかたなくマクロを使ってる。
>>42 別にSICPとかの教本がLispでポピュラーだから挙げただけで、
アルゴリズムとかデータ構造、計算量などの概念などを無理なく学習できるなら、
手段は別になんだって良いよ。要は計算機科学の知識が大事なだけであって。
フレームワークとか使ってても、ロジック部分は自分で書かなくちゃいけない。
そこで、配列にすべきかリストにすべきか、そういった技術上の取捨選択をするときに、
大学でやる程度の計算機科学の基礎教養がなければ、判断することもできない。
>>47 loopとかiterate、receiveとかマクロないと割とだるいと思うけど、その辺どうだろう。
Schemerだから再帰しか使いませんとか、call-with-valuesで不便に感じませんとか、
そういう人なら要らんかもしれんけど、普段は意識しないだけじゃないかな。
あと、CL-WHOみたいな、DSLを扱う場合はマクロの威力を思い知ると思う。
>>42 「現実に課題を抱えた職業プログラマ」 はコンパイラ作らないし
レキシャルアナライザもパーサジェネレータも使う事はないだろうから
当然といえば当然
antlrぐらいなら使うけどな
> レキシャルアナライザもパーサジェネレータも使う事はない 俺は、たいていの仕事でお世話になってるんだが # 全体の量から比べると比率的には小さいけど、 # だからこそ、そんな所に時間使いたくないしね
antlr とabcl かKAWA を組みあわせた人いない?
>>42 は、何が書いてあるかより誰が書いたかが重要で
そんなものが根拠になると考えているっぽい点で
こだわりのあるオヤジプログラマと同類っぽい
>>55 書き込む前に意味が通るかどうか読み返すクセつけろ。
今日から。
>>51 何度もぶつかる同じパターンにはDSL作ってプログラマー以外に仕事させたほうがいいとおもうけどなあ。
職場の事情に類することはマ板でやってくれ。
職場の情事はム板で桶
jsonでもyaml、xmlでもいいじゃない。
そもそもだな、HTMLやXMLをS式を使わなかったのが問題だ。
CSSはDSSSLそのまま採用されていた可能性はあったけどな。 MSがCSSを提案して飲まれちゃったんで。
S式とリストについて質問です。 リストはS式、それともS式はリスト? それともリストとS式は等価な意味? 少々ここら辺が良く分かりません。
Lispにおいて、リストはコンスセルを使ったデータ表現の一つです。 コンスセルはリストを表現するためのものではなくて、例えば二分木も表現できます。 S式はLispデータ全ての総称、あるいはその印字表現です。
Scheme限定だと規約読むのが一番いい。
>>65-67 どもです、分かりやすい説明ありがとうございます。
お勧めしていただいた資料も一緒に読んでみたいと思います。
>>58 一度onjoさんのLISPサイト見るべき
Lisp的にキモイコードの話はもの凄く参考になる
70 :
デフォルトの名無しさん :2011/05/06(金) 23:57:20.87
define-syntaxで作った制御構造を使うときに エディタのインデント制御ってどうしてますか? 気にしない? 今、win環境でxyzzy使ってて、xyzzyのlispなら自前の制御構造定義した直後に (setf (get 'mymacro 'ed::lisp-indent-hook) 1) とかやってるのですが、Gaucheとかのプログラムを書いてるときは みんなどうしてるのかなーと。
インデントは全部同じ形式。気にすると切りがない。
>>70 Emacsだとlisp-indentation
オライリーの「プログラミングGauche」ってこのスレ的に評価どう? アマゾンで買おうかどうか迷ってるんだけど。
>>73 karetta.jp(震災の影響でサーバ止まってる)に全文あるけど、買っても絶対に損はしない。というか買っとけw
>>73 前半は Scheme 全般に適用できる基礎知識で、
後半は Gauche 特有の機能の紹介。
全体にやや平易。 入門者向け。
あなたが既に Scheme ユーザーなのなら若干物足りなく感じるかも。
表紙の魚の名前が可愛いから買っとけ
フムフムヌクヌクプアアアだっけ
みんな買って持ってるの?
そんな事ありうるわけ無いだろ
オライリーのGauche本、本屋にあって買ってきた。というかサイトにあるなら買わなきゃよかったなあ。 LISPに関してはまったくの初心者なので、いったいどいうのはいいのかわからないんだけど、リスト操作の 基本からじっくり解説している感じなのでよかったかな、とは思う。 『 初めての人のためのLISP』なんかは一見面白そうだけど、なんか変なクセがあって敬遠してしまった。 Smalltalkの青木本みたいな感じがして。衒学ですごそうに見えるけど、結局何言ってんだかわからん、 になると危険なような気がして。 今どきのLISP入門はどういう本をどういう順序で読むのがいいのだろう?
>>81 今どきは "scheme 入門" でググれば cons からコンセツ丁寧に解説してくれている文書が
沢山あるんじゃないかな。10 年前に自分が勉強した時もネットに沢山あったよ。
一口に LISP と言っても Common Lisp と Scheme と(他にも色々)あるんだけど、
どっちを勉強したいの?
>>81 もしも貴方が、LISP というおかしな言語があるという事をお聞きになって興味を持たれたのでしたら、
それは多分 Scheme の事ですから、"Scheme 継続" で検索されると良いでしょう。
そうではなくて、LISP という何だかおかしな言語があるという事をお聞きになって興味を持たれたのでしたら、
それは Common Lisp の事ですから、"CL リーダーマクロ" でお探しになると良いと思います。
どちらにせよ、あなたの幸運をお祈り致します。
入門だけなら本気でネットのテキストで十分だと思う。SchemeもCommon Lispも。 コンスセル、quote、シンボル、主要な特殊形式なんかが分かれば、大体問題ないだろうし、 細かい部分は、結局RnRSとかHyperSpec、CLtL2読まなきゃいけないし。 実際の所、コードはすぐ書けるようになると思うけど、Lispで壁に当たるのはむしろその後だよね。 開発環境の整え方とか、日本語の扱いとか、実行ファイルの作り方とか、ライブラリの管理とか、 有益な情報源の在り処とか。入門はやたら検索に掛かるけど、応用例は驚くほど見付からない。
racketはこれからも互換性ない仕様変更をしまくるのだろうか みんながGauche使う理由がなんとなくわかってきた
そういうのは、 #lang XXX を何にしているか次第なんじゃないの? 複数の言語が実装されている環境なんだから。
>>85 > とりあえず買ったのを最後まで読んでw
なんで小馬鹿にするんですか?
気のせいです。
LISP界隈は態度だけえらそーな無能古参が多いからいちいち気にする必要はないな。 似非ハッカーが9割。
racketに #gauche あればいいのに
空リストについて質問です。 表記上は () と書きますが、これは(nil . nil)と同等なのでしょうか? それとも () を評価したときに買ってくる単なる nil なのでしょうか?
() = 単なるnil。 (nil . nil)だと(nil)=(())になっちゃうよ
>>93 なるほど、どもです。
分かりやすい解説ありがとうございました。
それこそちょっと調べればわかるレベルの質問だな。
90 名前:デフォルトの名無しさん [sage] :2011/05/09(月) 12:51:05.90 LISP界隈は態度だけえらそーな無能古参が多いからいちいち気にする必要はないな。 似非ハッカーが9割。
「不完全にしておよそ正しくないプログラミング言語小史」を参照。
>>97 俺のコーヒー返せw
その内訳、モニターにかかったカフェイン70%
鼻に抜けた牛乳30%である
#口に物を入れてよんじゃだめってかいてわりとマジデw
1冊の本を最後まで読みきるなんて勉強スタイルは受験勉強と共に卒業すべき。 ある本でよく分からない記述があったら別の本でその説明を探すって感じで、 何冊もの本、ウェブ上の教科書をつまみ食いする方が効率がいい。 大抵の理解できない記述は、自分じゃなくて著者が悪いんだと思う方が気が楽。 そして実際に書き方が悪かった、ということの方が多い。 「見下し」というプログラミングテクニックをはやく習得しなさい。
ぜんぜん「見下し」と関係ないじゃん。 バカなの?
90 名前:デフォルトの名無しさん [sage] :2011/05/09(月) 12:51:05.90 LISP界隈は態度だけえらそーな無能古参が多いからいちいち気にする必要はないな。 似非ハッカーが9割。
"condescension"を「見下し」って訳は酷いね。 まあ煽ってなんぼって考えの翻訳者なんだろうね。
lispが詐欺が多いのは知ってるけどね
Lispで儲けたのはPaul Grahamだけだ ってどこかに書いてあったな
普通の奴の上を行け
確かにLispの仕事で得た金銭がPaul Grahamを超える人物はいてもごくわずかだろうけど さすがに「だけ」ってほど狭き門でもないだろ、多分w 「Lisp以外の言語では1銭も得られなかっただろう、Lispがあったから俺は今日を生きてるんだ」 レベルの「Lispのおかげで儲かった人」はめったにいないだろうけど……つーかいるのか?
LISPを勉強している人のことはたくさん聞くけど、 LISPで何かProductを作ってる人のことは、ほとんど聞いた事がない。
Cと比べたら母数がすくねえしな。 日本語環境もGUI環境もWEB関連も満足なものがすくないし。
こないだ公開されたbyflowはClojureを使ってたと思う まあぶっちゃけLispで募集出してもそう集まるもんじゃないだろうし Lispで募集出すような会社は元々Lisperが多いとしか思えない 仮に使うとしたらWebサービスはランタイム込みのバイナリを配布せずに済むからありかなと思うが PHPかRubyかPythonの方が集まるっていう
大学にいたころはLISP使ってる人しかいなかった
世間から隔離されたキチガイの収容施設だもんしょうがない
LinuxにインストールしたGaucheでスタック使い切ったらどうなるかな、と思って 再帰の多いやつやってみたらLinuxがいきなり落ちたので笑った。 最近のLinuxはWindowsより堅牢じゃないのかよ。
>>113 sh -c 'ulimit -d 'するとどう?
ものすごい勢いで、カタカナで高度なウンチク語る人は多いんだよな。
それOSより自分のハードウェアを疑うところ。 S.M.A.R.T.とメモリの確認した方がいいとおもう。
>>113 本来こういう時ってどういうエラーがでるのが正しいのかな?
OSがスタック確保できなくなった、というエラーを返して、Scheme側がエラーを出して終了?
>>118 Gaucheは自前でスタック管理してて、あふれるとヒープに移すから、無限再帰するようなプログラムは
ヒープを使い尽くすまで走るよ。通常はまずスラッシングでめちゃくちゃ遅くなって、最終的に
ヒープが確保できなくなったらGaucheがabortするんじゃないかな。
Gaucheの組み込みルーチンで、Cで書かれているものの中で再帰した場合 (writeとか) は
Cのスタックを使い切ったところでSEGVして終了。
fold とか reduce とか 名前を統一してくれないものか
今からleft/rightを両方持ってる言語を作るならfoldでいいんじゃね leftだけある言語や昔ながらの言語はreduceなことが多い気がする (rreduceとかreduceRightとか命名してる言語もあるが)
Schemeが標準でサポートしていなくてはならない関数一覧は、 R5RSではなくSRFIで定義されているものでよいのでしょうか? それともSRFIは拡張ライブラリ的な扱いなのでそしょうか?
「標準」という言葉の定義によるとしか言えない。 「R5RS準拠」ならR5RSを満たしていればいい。
R5RSが定めている標準関数は、6章の標準手続きに登場するものだけということでしょうか?
>>113 落ちたって、具体的には?
スラッシングで反応遅いのとは違いますか?
昔からlinuxはだめだめですよ
qobiScheme使う人って日本にはいないの?
発展解消したので、stalinやCheckenの方を使っているのでは?
Checken → CHICKEN
qobiScheme Last update Tuesday 24 August 2010 ? 割と最近まで使われてたみたいな気がする
CHICKENはコードベースが違う。 Stalinは直系だけど開発がほぼ停まってる。
>>126 遅くなって、特にエラーメッセージなしでOSが落ちてPC再起動。
Ubuntu11.04
普通メモリ使い切るとかだとOOM Killerが発動して終わり、だと思うけどなぁ たまたまバグがあってそれを踏んでるとかだな多分
iOS向けにiSchemeってREPL載っけて売ってる中華圏の人がいるんだけど、 なんで他の配布してる無料アプリが俺妹っぽいイカ娘アイコンなのw
なんでそれで審査通ったのか不思議
Appleの審査がいかにザルってことかだよな。 その割に意味不明なReject。
>138 追加コンテンツにも30%だまって払えば何でも通りそう
みんなはLispで具体的になにやってんの? 自分は具体的は利用シーンが思いつかなくて、役立ってません。 面白い言語だと思うのですが。
何回同じ質問繰り返すんだよw 会社で利用したいけど、周囲の説得のために事例を知りたい、とかならまだしも、 自分で使う分には、汎用言語なんだから、好きな物作れば良いよ。 みんなはC/C++で(ryみんなはJavaで(ryみんなはPerlで(ryみんなはPythonで(ry みたいな質問するか? それと一緒だと気付いてくれ。
質問したら答えるでしょ というか聞かれる前に何やっているかblogとかに書いてるじゃん
>>140 「女の子と付きあいたいけど、付きあって何したらいいか思いつかない」
なんてことを言ってる奴は絶対にモテないぞ!
Lisp も同じで、好きに使えばいいんだ!
ブラウザの拡張をLispで書けたら楽しいんだけどなあ
既に Scheme to JavaScript なトランスレータがあった様な・・・ 元々 NetScape の人は JavaScript じゃなくて Scheme を載せる予定だったんだっけ? 何かそんな話を聞いた事がある気がする
好きなもの作れよってあたりまえだろ。 それが思いつかないから質問している人がいるわけで。 こういう特性があるから、こういうもの作ったら、みたいなヒントや雑談すればいいのに。 誰でも思いつく正論わめいてドヤ顔ってどんだけ頭悪いんだ?
作る物が思い付かないなら作らなきゃ良いだけの様な・・・ 普通は作りたい物があるから作るんだと思うんだけど、 自分の作りたい物も分からない人はまず初心者スレに 行ったら良いと思う
それなら最初からどういう分野に向いていますか、って聞けばいいじゃん。 自分は具体的な利用シーンが思い付かないとか言われても知らんがな。 で、他人からこういうもの作ったら、って言われて、それ作んの? 馬鹿馬鹿しい。 書きたいコードのネタなんて、その辺に転がってるのを自分で見付けてくるもんだろ。 動的型でリストという柔軟なデータ型が基盤だから、プロトタイピングに適する。 また、優れたメタプログラミング機能により、DSLの構築をし易い。 リーダーが含まれるので、S式を使えば設定ファイルなどでパーサを書かずに済む。 言語コアが小さく、構造もシンプルなので、組み込み用途に向く。 こういった特徴があるけど、汎用言語だから大抵のものは書けるし、 FFIやリーダーマクロを使えばアクロバティックなこともできる。
LISP界隈は態度だけえらそーな無能古参が多いからいちいち気にする必要はないな。 似非ハッカーが9割。
JavaScriptコンパイラなら、CLだとParenscriptとかあるぜ。
無能古参とかドヤ顔とか煽ってる奴も、元ネタへの回答とか、 助言とかはしてやらないんだなw
死ねよ無能古参
和やかな雰囲気のところ失礼します (defun member? (x xs) (cond ((eq xs nil) nil) ((eq x (car xs)) t) (t (member? (cdr xs))))) この場合、次のどちらになるでしょうか 1. 再帰のたびにxsのcdrを新しく生成するので、最悪の場合にはxsの階乗分のメモリを食う 2. cdrへのポインタなり参照を渡すだけなのでxsひとつ分のメモリを食う
cdrはconsingしないよー。cdr部のアドレス渡すだけー。 cdrでコピー作っちゃうと、eqとかeq?でアドレス比較できなくて困る。
ごめん。読み違いしてた。関数にリストを渡すとき、コピーを作るかどうか、って話だよね。 2で合ってるはず。仮に引数に渡されたリストをコピーするなら、破壊的な関数が存在できない。
気の利いた処理系なら末尾再帰の最適化を行うのでループになって ぐるぐるして終わりだと思う。
>>154-155 惑わせてしまってすいません。
>>153 の時点では
関数に値を渡す際に何が行われるかって問題と、
関数が何を行って何を返すのかって問題がごっちゃになっていたようです
問題がはっきりして助かりました。ありがとうございました
今後そのあたりを意識しつつ勉強していきたいと思います
>>156 末尾再帰だと再帰をループに展開できるんですよね。調べてきます
>>141 >みんなはC/C++で(ryみんなはJavaで(ryみんなはPerlで(ryみんなはPythonで(ry
>みたいな質問するか? それと一緒だと気付いてくれ。
他の言語に対して、同じ質問しないよ。
成果物が沢山出回ってるので、聞かなくても分かるからね。
お前みたいな、ウンチク野郎が多い割には成果物が見えないから、聞いてみたんだ。
お前の言葉で理解したよ。Lispは覚えるだけで偉そうにできる、成果を出す必要が無い、ウンチク言語だって。
これからも、お勉強してウンチク語って満足してください。
ありがとうございました。
他人の成果物を見て想像を膨らませたい人には辛い言語かもね。 さよなら。
成果とか些細なこと気にするなよ
最初からそんな考えで聞いてれば、そりゃあ思惑が透けて見えて皮肉られるだろ。
色々仕事で作ってるけど、お客さんの注文に合わせた単品ものだから こういうものって説明が難しいなあ。成果物は出回らないし、 NDAがあるからあまり具体的にも話せない。 別にLispじゃなきゃできないってもんでもない。自分はLispで書くのが 速くて楽ってだけ。C++でも書けるだろうけど書きたくない。 低レベルのところのチューニングのウェイトが高い案件が多いので、 そのへんが直接いじれない言語(処理系)ではできないとは思うが。
やっぱAllegro? それともSBCLとか?
NDAがあるのは他言語でも同じなんだが それでも成果物出回ってるよ
>>165 Lisp で「低レベルのところのチューニングのウェイトが高い」とか
ぃってる奴なんだから、そっとしとこうよ。
じゃあ、真面目に回答するけど、EmacsとGIMPじゃ不足? uimとか古くはCannaとかもそうだね。 CLikiは見た? 「Lisp Wiki」で三番目に出てくる。GitHubやBitbucket、Launchpadで検索しても良い。 Slashdotとか読んでたら、高速httpdのteepeedee2とかのニュースも読んだことあるかもしれない。 この前Googleに買収されたITAはLispのユーザーだし、RedditはかつてLispを使っていた。 ALUのWikiには商業での事例が載っているし、ゲームのクラッシュ・バンディクーとかを作った Naughty DogはLispを使ったゲーム作りもしている。 この辺はグーグル先生に聞くだけで、簡単に出てくる。
>>166 コンパイラマクロとかdeclaim、declare、the、disassembleとかをご存じない方ですか?
実装依存の機能なら、ACLのLAPとか。
163だけど。使ってるのはAllegro。disassembleは手放せない。
>>165 他言語でも、出回ってるのはある程度汎用性の高いものでしょ。
これは言語によらないけど、単品ものってお客さんの業務の内部事情に密接に
関わってるんで、「何をするもの」ってあんまり具体的に言いにくいんだよね。
よっぽどぼかしても、近い人だとピンときちゃうことがあるかもしれないから。
ものすごく大雑把に言うと、データを集めて格納して探すもの、ってパターンが多いかなあ。
性能を追っかけるのと、ロバストネスを高めるところがだいたい毎回ポイントになる。
>>168 いや、そんなもんに頼るウェイトが高い案件が多いなら、
そもそも処理系の選定から間違ってるように思うけどな。
まあ君がそれが楽だと言うなら別にいいんだけど。
>>170 CL 派の人たちは割とそういう世界観な気がする
生成される機械語のコードを結構気にしてるよね
>>172 そう思わせてlisp本売ってる人もいたけどな
yacc/lexと等価な処理をambでもっと短く書けそうだけど 誰もやってないのかな
yaccの寿命は長いねえ
Parser combinatorまで大きな進展なかったしな。
PEGにしかできないこととYACCにしかできないことがあるので 単純な置き換えは無理な気がする
>PEGにしかできないこととYACCにしかできないことがあるので そこまで使い込んだことないけど、書きにくいことはあるのはしってる。 どんな事例だとできないの?
とりあえず英語でPEGのサイト作ってる人の学位論文に、CFGでは不可能だけど PEGならできる、という文法の例がいくつか載っている。 実用的には、PEGだと展開の候補がCFGみたいにパラレルなものじゃなくて、 A = B / C / D は B でダメなら C 、それでもダメなら D という意味なので、 基本的にambiguityがない。 YACCは例えば、 EXP = EXP '*' EXP EXP = EXP '+' EXP とか定義しておいて、結合性と優先順位は外付けする、とかできるので、 理論的なPEGの範囲内にはそういうのはない。
ambで短く改造しやすいコードにすれば コードいじって例外処理入れるの簡単じゃない だれかやらないかなあ
>>180 あっ そういえばOn Lispの最後の方に状態マシンを短く書く方法載ってましたね
LCやSchemeでは、Cで言うところのconst変数(定数目的)はどのように記述するのでしょうか? setqなどでシンボルに束縛するだけでは変更できてしまうので何か手法があるのかな・・・
LCじゃなくてCommon Lispだけど。 つ defconstant
CommonLispならよういされているんですね、ありがとうございます。
SchemeでもGaucheほかいくつかの処理系にはdefine-constantがある。
Rって実質、中身はschemeと同じと聞いたのですが lispの勉強をある程度している人向けのR入門書でいい本ないですか?
Lispを「ある程度」勉強したものはそのようなレベルの質問はしない。
90 名前:デフォルトの名無しさん [sage] :2011/05/09(月) 12:51:05.90 LISP界隈は態度だけえらそーな無能古参が多いからいちいち気にする必要はないな。 似非ハッカーが9割。
東電君が教えてやれよ
愚問を貼る→叩かれる→コピペを貼る→うれしい のループってのはLISP界隈に限ったことじゃないな
LISP って書く人と Lisp って書く人の境界線は何なんだろ…
ま、叩くのも自分でやってくれるんでw
>>191 昔のコンピュータは大文字しか使えなかったんだよ。
LiSP
たとえばFortranとかCobolと書くと、F90とかかなり近代的な版というイメージがある。 たぶんLISPとLispもそんなところだとおもう。
Laserみたいに単語として定着すると、元が頭文字集めたものであっても一単語として 扱うのは当たり前だよね。ならL..I.S.Pと表記するのかと。 ハッカーという言葉もさあ、もともと悪い意味だってあったのに、「いい意味だけで使いましょう」 というそれ自体結構ゆがんだ「運動」を真に受けて、ハッカーとは正義の意味にしか使っちゃ だめだ、わるいのはクラッカーと言え、みたいなキチガイが出てくるからコンピュータ界隈は 一知半解なクセに妙な使命感で言葉狩りする奴が多くて疲れるわ。 こう書くと出現するよ、キチガイさんが(笑)
ちょっと何言ってるか分からない
>>196 俺はキチガイ、まで読んだ。
英語の一般的なルールでは、頭字を連ねただけのもの(FBIとか)は全部大文字、
頭字を連ねたものだけど、それがひとつながりの単語になってるもの(laser)は小文字。
COBOLをシーオービーオーエルと読む奴はいないけど、コンピュータ関係の古い語で
大文字だけで書くものがあるのは、昔はOSでファイル名とかコマンド名とかに大文字しか
使えない奴があった(というかCommon Lispにすらその名残りがあるけど)ためというだけで、
別にたいした意味はない。
case sensitiveな言語が当たり前だと思ってる人がCLなどを初めて触ると「:fooって書いたのに:FOOになるんですけど……」とかなり焦る
えーと、Lisp界隈はなんちゃらが多くて9割方どうとかなので気にしないこと とか何とか
Lispなんかやるとそういう悪い先輩や同僚の悪影響だけ受けるからやらない方がいい。
texのスタイルファイルを自分用に修正してるんだけど もうGaucheかなにかでバッチスクリプト書いて修正かけた方がいいような気がしてくる 自前スクリプトを作るか既存の設定ファイルいじるかの境界ってどのへんなんだろう
迷っているなら、何でもGaucheで作っちゃえばいい。 時間がもったいないとか、損得考えるとキリがないし。 もしくは、自前スクリプトを課題とみて、 他のLisp方言や、思い切って別言語に手を染めてみてはどうだろう。
cpanあさると大概のものありますものね Gaucheのモジュールとしてcpan使えたらいいのに
>>203 自分にとって都合のいい方を選べない時点でチョトおかしい。
そんな事いちいち書き込んでいるのは相当おかしい。
alienという単語を知ってるのに一瞬シークレットありえんテクノロジーと読んでしまった
あまりに巨大なLISPプログラムを書いたら意識を持って自己増殖して暴走するSFとかないですか?
2001年宇宙の旅とか?
Gガンダム?
未来の二つの顔 by JP.Hogan wikipedia みて知ったけど、去年亡くなってたんだな...、合掌。
自己増植させるのは超簡単 自己増植と自滅のバランスをとり続けるのが難しい
ペギオ乙
…
>>220 label="<car>car|<cdr>cdr"
の方が好みだな。
>>223 pythonになったんじゃなかったの?
それを言うならご本山じゃまいか という気がしたがいまいち自信がない
いや、俺も書き込みつつ間違えたと思ったw
本尊というのはたっといものであるから御をつけるわけだが、 本山は基本的には場所のことであるから御は普通付けないのではないか。
本尊っていうのは寺の中心の仏とかの像で、転じて重要な人物の意味でしょ。 普通人物に使う。 MITがSICPの中心だ、ならメッカだ(最近はイスラム教徒からの抗議あり)、 本家だ、総本山だ、とかいうのが適当。 この程度のこともすらすら出てこないとは、ほんとお前らって頭悪いんだな(笑)
全部読んでからまた来い。
翻訳気に入らなければ英語で読めばいいと思う。
訳者がlispな人じゃないだけ?
この手の仕事はCommon LispよりSchemeが得意なの? CLはyacc間接的に使うパッケージとかあるんだけど
CLもSchemeもできることは大して変わらんから。 放射線計れるようにはならんし。
>>237 メタプログラミングの能力なら、R6RS SchemeとANSI Common Lispはほぼ互角。
構文解析は件の記事とは関係ないけど、SchemeにもCommon Lispにもいっぱいある。
LALRとかLLとかPEGとか再帰下降とかパーサコンビネータとか方式も選り取り見取りで。
R6RS stands for " Revised^6 Report on the Algorithmic Language Scheme" and it already includes the word "Scheme".
Does it have a reader macro?
What's the reader macro?
どこまで続けんだw そういえば、リーダーマクロとかコンパイラマクロはScheme側の規格にはないね。 Racketとかは確かリーダーいじれたと思うけど、処理系依存でしかない。 表現力は同等でも(これはそう外れてないよね?)、応用例はCLの方が広いか。
Lispはオワコン
Racketは突然に仕様変更で使う気なくした 独自仕様つらぬくならとことん貫いてくれよ
突然仕様変更なら、独善仕様を貫いていると言えるがどうだろう。
scheme を勉強しようと思って、スタックベースで実装してみようと考えたのですが、 (速度は考慮せずに、javascriptで実装してみたいです) 継続の実装方法が思いつきません どういう方針を立て、どこから着手すればよいのでしょうか? それと、スタックベースの実装で参考になるページがあれば教えてください
Schemeの実装ならまず3imp.pdfだろう
SECDマシン。 SECDR schemeでもいいけどソースは今どこに転がってるのか知らない。
SECD ... 懐かしいなぁ。 30年ぐらい前にちょっとかじってたこと思い出した。
>>252 SECDは数年前にちょっと面白い進展あったよ。
"A Rational Deconstruction of Landin's SECD Machine"
"A Functional Correspondence between Evaluators and Abstract Machines"
現在英語で書かれた教科書でschemeを学んでいます. そこで練習問題として Write predicates free? (respectively, bound?) that detemines if an expression contains a free (respectively, bound) instance of a particular variable. という問題がありました. 特定の変数の独立したインスタンスを含むかどうか判別する述語free?を作れという文章だと思うのですが,どうでしょうか? また,その場合free?をどう作れば良いのかわかりません. どなたか方針だけでも お願いします.
>>254 線形代数のガウスの消去法をやったときに出てくる自由変数についての問題のようにも見えるが
>>254 式をどんどん分解して深くいく分割統治的再帰
関数の返り値は自由変数のリスト
分割統治の合併はappendで
累積変数でbounded variableのリスト
変数を見たら↑に含まれているかどうかチェック
自由変数なら返り値で返す
>>256 すみません。
もう少し詳しくお願いします・・・
理解力がなくて申し訳ありません
(define (f x) (+ x y))みたいなのがあったときに (free? '(define (f x) (+ x y)) 'x)とやるとfalseで (free? '(define (f x) (+ x y)) 'y)とやるとtrueな感じ? 変数を束縛する可能性のある構文 関数引数(define (f x)...)やλ式(lambda (y) ...)やlet(let ((z 1)...)みたいなのに出会うごとに 束縛されてる式をappendしてく ((x v1) (y v2) (z 1)))みたいなリストができるので 最後に、それに'xが含まれていないかどうかを調べる
なんてことだ 書き込む前にリロードすればよかった
なんで IRC の #Lisp_Scheme チャンネル すぐ過疎ってしまうん?
>>261 lynxやw3mで参加できるならもっと増えると思う
schemeのlexical addressがイマイチ理解できません。 lexical depthなどはどうやって判断すればいいのでしょうか?
Lisperってまともなもの作れないカスが多いくせに 態度がでかくてかなわん
式を下降しながら、alist等で実現されたスタックフレームを累積変数で持つ。 要するにevalと同じ構造。
>>264 目的が違う
Lispは論文を作成するのが目的なんだから
このスレの人たちは論文を作成するためにLisp使ってるのか
ゲーデルも LISP 使えば良かったのに。
Marvin Minskyか
>>270 ゲーデルはS式ではなくて算術の完全性を証明したかったのだ。
実装に潜ったり普段の作業を自動化するのに使ったりはするけど SICP持ってないからレベル1だな
今更ながら新しくなった『Scheme手習い』を買ってみたんだけど、独特っすなあ・・ 説明を読むより慣れろって事なんだろうけど、いきなり lat? とかいう述語が出て来て面食らった。
Lat式ミクたんカワユス
>>263 今のスコープを探し、なければ、1個遡ってさらに探す
という単純な話だと思う
※の部分でxは一番内側の0、yは一番外側の2に束縛されてる
(let ((x 2) (y 2)) ;←※から見てlexical depth 2
(let ((x 1)) ;←※から見てlexical depth1
(let ((x 0)) ;←※から見てlexical depth0
(+ x y) ;←※
)))
SICPを古いとか言う人いるけど、ひげぽんみたいな一流ハッカーもそれで勉強しているんだよね。少しでも近づくために勉強すべき。
SICP がいい本だというのはわかるけど、 あんまり Scheme にからめて紹介するのはひかえた方がいいかもしんない。 実際、 Scheme の説明はそれほど無いし。 Scheme を学ぶつもりで買って Scheme とは関係ないところで挫折しちゃう人も少なくないみたい。
280 :
デフォルトの名無しさん :2011/06/16(木) 22:57:44.70
SICPに必要なSchemeの知識をつけるために書かれた本が The Little Schemer(Scheme手習い)だそうじゃないか。 TLSとか適当な略称つけてブログで絶賛して流行らせろ。
TLS だと検索しずらい。 元タイトルが SICP ほど長いわけじゃないからそのまま書いてくれ
ひげぽんが一流のハッカーって 世の中の役に立つこと何一つしてないでしょ あの人
ハッカーというのは善悪の価値基準外の存在だと思う その何とかさんがハッカーかどうかは別として
Little Schemerはプログラミングの本なのに 処理系なしで読めるのが素晴らしい まるで黒板に書かれたコードを読んでいるようだった
>黒板に書かれた その例えじゃ褒めてるように聞こえないな
電車で読める技術中心の本は珍しいしね。 C、Javaパズルブックも良かった。
次のタイトルのあてっこをしよう Scheme開眼
>>284 自分は筋トレしながら読んでる
レッグレイズしながら読むのに丁度良いんだよね〜
Macro の草子
sche sche sche sche sche! scheme! 一休 さん
>>291 検索したらTwitterに一件だけあったw
Gauche本かった。 そんだけ。
mosh 0.2.7 がキタ。 ビルドするのめんどいので誰かバイナリ上げてくれ
自分でビルドしろカス
common lispのコミュもscala化してきてんのかな? あそこみたいに荒れるコミュは嫌だな。LISPが休止で頭がキレ気味なのか?
あの程度で「荒れるの嫌だ」なんて言っちゃうような人は、 何事も指をくわえて見てるだけにしたほうがいいと思う。
荒れるというのは言いすぎだったかな。 片方は野心があって王様になりたいという意思が見え隠れしてる。 片方は殺伐な考えにうんざりしている。 それだけだからな。
304 :
263 :2011/06/19(日) 20:01:30.29
>>277 遅くなりましたが回答ありがとうございます
なんとなくですが理解できました。
また質問なのですが
今Essentials of Programming Languagesという本で勉強しています。
それのExercise2.3.10が分かりません。
本をお持ちの方教えてもらえませんか?
Scalaコミュニティって殺伐としてんの? 溜め込んでた鬱憤が、ふとした切っ掛けで噴出して止まらんだけでしょ。 出だしが皮肉感たっぷりだったから、相手が噛み付くのも無理ないし。 正直、お互い様だから放置おすすめ。
>301-303,305
何の話?
>>304 質問の仕方おかしいぞ。せめてどんな問題か書いてくれよ。
>>305 あそこは中心になってる人物が他の言語のコミュニティにすぐに喧嘩を
ふっかける傾向にある。だから、近づかない。scalaを批評したsmalltalker
のブログが荒れた事件+Rubyの教祖様ともややもめたのも最近あったくらい。
ただRubyの教祖とScalaのその人物は大学の先輩後輩みたいだから、子供を
扱う親みたいな感覚なんだろう。
あれくらいで「すぐに喧嘩をふっかける」なんて言ってたらやってられんぞw Linusとか観察することをおすすめする。
LinusやStallmanはあれだったな。 プログラマって観察してると面白いんだけど、性格的にネジが壊れてるほうが 向いてる職業だな。だから、いいのかもしれないが。planet.xxxをみてても 言語によって雰囲気が違う所がまた面白い。
Lisp のスレだと思って開いたら、何か違ったでござる Lisp の話になったらまた戻ってくるでござる
私BSD界隈を見て育った幼女だけど、TheoはよくDQN扱いされるのに、
Linusは喧嘩しても流されるのはおかしいと思うの。
>>306 Twitter。
312 :
304 :2011/06/19(日) 20:46:15.16
>>306 すいません分かりづらいですね。
問題は
式を引数にとり、その式の変数参照のlexical addressを表示する手続きlexical-addressを作れ
です(英語で書かれているので訳が微妙に違うかもしれません)
実行例が
(lexical-address '(lambda (a b c)
(if (eq? b c)
((lambda (c)
(cons a c))
a)
b))
(lambda (a b c)
(if (( eq? : 1 0) (b : 0 1) (c : 0 2))
((lambda (c)
((cons : 2 1) (a : 1 0) (c : 0 0)))
(a : 0 0))
(b : 0 1)))
という風になっています。
ツイッターの話は、ツイッターでヤーレ
Theoみたいなやつ好きだよ。俺は
>>312 (foo: x y) => foo は、現在地から相対的に見て、x 番目の深さの lexical frame の、
y 番目のエントリーを参照するという意味で、
(eq?: 1 0) => eq? は、現在地から相対的に見て、1 番目の深さの lexical
frame(つまり global frame)の、0 番目のエンティティを参照という事で、
eq? や cons はプログラムの中に定義が含まれていないので、 global frame に
あるものとして、その中で順番付けしており、
a, b, c は lambda の引数として与えられている値なので、その引数の lexical
address を引いていると、、、
lambda は lexical frame を作る側だから除外、
if はスペシャルフォームだから除外、
という事なのかな。
318 :
304 :2011/06/19(日) 22:18:46.69
>>317 たぶんそうだと思うのですが
実際にどういう風に手続きを作ればいいのか全く見当もつきません・・・。
リストで与えられているものからどうやってlexical addressを求めたりすればいいのでしょうか・・・?
>>318 0. リストを順に辿る
1. lambda というキーワードが出て来たら lexical frame を作成する
2. lambda の引数をリストにまとめて lexical frame に登録する
3. lambda の body を辿る
4. if が出て来たら読み飛ばす
5. 変数が出て来たら、現在の lexical frame の中に同じ名前が無いか探す
6. 現在の lexical frame の中に無かったら、一つ上の frame を探す
7. 変数が見つかったら、そのアドレスを計算する
以下繰り返し
じゃないの?
Scheme手習いの続編出てるんだな。 こんなもんWEBで無料公開でいいだろ 金儲けばっかり考えやがって
八連(パーレン)制覇と paren (括弧)制覇の駄洒落を思い付いた時は、 正直、心の中でガッツポーズだったのに、Macro に負けるとは・・
322 :
304 :2011/06/19(日) 22:55:02.78
>>319 2番のlexical frameを作成するとはどういうことでしょうか?
そしてそれ以降もあまりわかりません・・・。
質問ばかりで申し訳ありません・・・。
>>307 片方は「批評」で、
もう片方は「荒れた」、「もめた」かよ。
あんな駄文をよく「批評」なんて言えるなw
>>322 >>312 をパースすると、最終的に↓こんなリストが内部的に作成されると思われ
(('eq? 'cond)
('a 'b 'c)
('c))
1, 2 は、lexiacal frame のつもりの適当なリストを作成して、そこに lambda の
引数を順番に追加していくという処理
まあ、自分は素人なので、きっと誰かが正解のプログラムコードを貼ってくれる筈
326 :
304 :2011/06/19(日) 23:26:46.26
>>324 なるほど・・・。
今までのを参考に一晩考えてみます
色々とありがとうございました
>>323 同意。
誤解に基いた記事に合理的な理由を付けて反論しているのだから、論争だよな。
「複雑さ」の定義が噛み合ってなかった点もある。 でも、それはお互い様の話。
現時点で少数派である Scala 派は過剰なくらい主張しないと釣り合わないってこともあると思う。
>>320 じゃあ、お前はタダで翻訳作業やるのか?
あのテの専門書はほとんど利益でないもんなんだぞ。
330 :
277 :2011/06/20(月) 02:05:40.46
>>326 そこと、相互再起が理解できるとプログラミング言語作れるよ
schemeはフレームがデータ構造の、ただの相互再起関数だから
condが特殊形式じゃなかったりと、その本が
どういう風に構築してるのかはわからないけど
lexical frameがどう使われるかが理解できたらすっきりするかも
SICPの処理系の場合、フレームは
(('c 値))
(('a 値)('b 値)('c 値))
トップレベル環境)な感じになって
carでたどりながら最初に見つかったシンボルが今の値になる
331 :
324 :2011/06/20(月) 02:11:33.01
あ、cond は自分の間違いです... 正しくは cons でした... あと、イチイチ quote する必要も無かったですね...
>328 技術書翻訳って、部数出ない代わりに単価が高いんだから、 それなりに儲かるんじゃないの?
論理的に欠陥があるな。
>>334 単価が高いたって、専門書でも2万円を越えるようなものはそう多くない。
5000円かそこらだ。
5000円で人を雇ったらせいぜいひとりを半日くらい使えるくらいじゃね?
本を書くのに何日かかって、編集やら組版やら流通やらに何人がかかわると思ってんだよ。
>>333 eq?やconsが事前登録なのと、リスト途中のlambdaの扱いが気になるな。
自分ならこう組むかな。(Gaucheべったりのコードだけど)
(use gauche.sequence)
(define (lexical-address expr)
(define global (list '()))
(define (sym->addr sym env)
(let1 idx (or (find-index (pa$ memq sym) env)
(begin
(set-car! global (append (car global) (list sym)))
(- (length env) 1)))
(list sym ': idx (find-index (pa$ eq? sym) (list-ref env idx)))))
(let loop ((env global) (expr expr))
(cond ((symbol? expr) (sym->addr expr env))
((not (pair? expr)) expr)
((eq? (car expr) 'lambda)
`(lambda ,(cadr expr) ,@(map (pa$ loop (cons (cadr expr) env)) (cddr expr))))
((eq? (car expr) 'if)
`(if ,@(map (pa$ loop env) (cdr expr))))
(else
(map (pa$ loop env) expr)))))
汚っ!
>>336 数人ぐらいでできるでしょ
誰も一冊で食おうなんて思わないしw
もう相手にすんな
5万x20日で普通に100万ぐらいだな
儲かるとおもうなら 自分でやればいいじゃない
部数が少なくて単価が高いならあまり儲からないだろう、普通 多くの人が買う見込みがあるなら多く刷って一冊の価格を下げられるし 一冊の価格が下がれば買ってみようと思う人が増える The Seasoned Schemerの日本語版が小説やビジネス書を抜いて ベストセラーランキングに食い込むような世の中なら コンピューター書も少しは安くなるさ
翻訳本の価値は訳の質じゃない 第一義は原著者の言いたいことが分かることだから、 矛盾のない訳であるだけで十分であり、上手くなくとも、直訳でも構わないはず 翻訳本の価値は読者が(自分で訳したり、機械翻訳するために打ち込んだりするような) 翻訳する労力と費やすはずだった時間を翻訳者が担ってくれることにある それ以上の事、例えば日本語として自然な訳であるのは翻訳者のサービスだ だから、出版物より上手く訳せるならお前が訳して売ってくれというのは 翻訳本に求めるものを完全に間違えている
>出版物より上手く訳せるならお前が訳して売ってくれというのは そんな話は誰もしてねーし、矛盾がなくても日本語として不自然すぎて 読みづらく時間のかかる訳は品質が悪いとしか言えんわ。
>>344 上手くない直訳でもないよりはずっと良いですが、
訳の質が悪いと原著者の言いたいことも分かりにくくなります。
下記の例では「軍人が手ぶらで帰った」事がわからないと
なぜ軍人が絶句したのかわかりません。
原文:Richard Hamming "You and Your Research"
http://magic.aladdin.cs.cmu.edu/wp-uploads/hamming.pdf Some military person came to me and demanded some answers by Friday.
Well, I had already dedicated my computing resources to reducing data on the fly for a group of scientists;
I was knee deep in short, small, important problems.
This military person wanted me to solve his problem by the end of the day on Friday.
I said, "No, I'll give it to you Monday. I can work on it over the weekend. I'm not going to do it now."
He goes down to my boss, Schelkunoff, and Schelkunoff says, "You must run this for him; he's got to have it by Friday."
I tell him, "Why do I?"; he says, "You have to."
I said, "Fine, Sergei, but you're sitting in your office Friday afternoon catching the late bus home to watch as this fellow walks out that door."
I gave the military person the answers late Friday afternoon.
I then went to Schelkunoff's office and sat down;
as the man goes out I say, "You see Schelkunoff, this fellow has nothing under his arm; but I gave him the answers."
On Monday morning Schelkunoff called him up and said, "Did you come in to work over the weekend?"
I could hear, as it were, a pause as the fellow ran through his mind of what was going to happen;
but he knew he would have had to sign in, and he'd better not say he had when he hadn't, so he said he hadn't.
Ever after that Schelkunoff said, "You set your deadlines; you can change them."
翻訳1:研究にどう取り組むべきか
http://sites.google.com/site/himazu/you-and-your-research ある金曜日、軍人が来て、金曜日までに、ある問題の答えを出すように要請しました。
私は既に、ある研究チームの必要に応じてすぐにデータ処理をできるように自分の計算機資源を割り当てていました。
私はいくつもの小さな重要な問題にどっぷり浸かっていたのです。
その軍人は金曜日中に問題の答えを出すよう要請しました。
「それはできません。月曜日にお渡しします。週末にやります。今はできません。」
その軍人は上司のシェルクノフのところに行きました。そして、シェルクノフは私に言いました。
「この問題に取り組んでください。上司命令です。金曜日中に完了させてください。」
私は言いました。「なぜですか。」 シェルクノフは言いました。「命令です。」
「いいでしょう。でも、その軍人が帰るのを見届けるまで残っていてください。遅いバスに乗ることになるでしょうが。」
私は金曜日午後遅くに答えを出して軍人に渡しました。
シェルクノフの部屋に行って、軍人の帰り際に、私は言いました。
「部長、私は脅されていません。でも、ちゃんと答えを出しましたよ。」
月曜日の朝、シェルクノフは、その軍人に電話で聞きました。
「週末にオフィスに来来て仕事をしてらっしゃいましたか。」
軍人が言葉を詰まらせているのが聞こえました。
どのように話が展開するか考えていたのでしょう。
嘘をついたらより窮地に追い込まれると思い、軍人は正直に仕事をしていないと言いました。
それ以来、シェルクノフは「締め切りは自分で決めてください。そして自分で変更してかまいません」と言うようになりました。
翻訳2:
リチャード・ハミング「あなたとあなたの研究」前半
http://d.hatena.ne.jp/lionfan/20080726 リチャード・ハミング「あなたとあなたの研究」後半
http://d.hatena.ne.jp/lionfan/20080727 さて大物の軍人が私のところに来て、ある問題の答えを金曜日までに出すよう要求しました。
ですが私は既に科学者のグループのために急いでデータを圧縮するのにコンピュータの資源を費やしていました。
私は短期の細かく重要な問題でいっぱいいっぱいでした。
この軍人は金曜日の終わりまでに解くことを私に望んだのです。
私は「すみません、月曜日にしてください。週末に解きますよ。今は無理です」と言いました。
彼は私の上司、シェルクノフの所に行き、シェルクノフは「彼のためにやってやれ。金曜日までに必要なんだ」と言いました。
「私がですか?」と私は言い、「君がやるんだ」とシェルクノフは答えました。
私は言いました。「わかりました、セルゲイ。でも金曜日の午後はいつもより遅いバスで帰ることにして、
この部屋に座ってそいつがドアから出るときを見ておいてくださいよ」と。
私は金曜日の午後遅く、軍人に答えを渡しました。
次に私はシェルクノフの部屋に行って座りました。その男が帰るときに私は言いました。
「ねえシェルクノフ、あいつ、小脇になにも抱えてなかったですよね。でも私はあいつに答えを渡したんです」
月曜日の朝、シェルクノフは彼を呼び出して言いました。「この週末、仕事に来たかね?」
私は彼が一瞬、絶句して、事態を理解するさまを聞いていました。
しかし彼は建物に入るにはサインが必要だということもわかっていたので、
正直に認めたほうがマシだと考え、「行きませんでした」と言いました。
それ以降、シェルクノフは「締切は君が決めなさい。変更も君に任せる」と言うようになりました。
350 :
304 :2011/06/22(水) 14:50:33.19
>>333 回答ありがとうございます!!
答えもらってるのに失礼なのですが
自分はまだcond,set!,letを学んでいません。
動作は何となく理解できたのですが、これらを使わないで作るにはどうすればいいの
>>333 でしょうか?
351 :
304 :2011/06/22(水) 14:51:47.15
3行を超える文と、3インデントを超えるコードは宗教上の理由で読まないことにしてる。
低能で技術書を読みこなせないを翻訳のせいにしているんだよ
低能で英語がよみこなせないから糞訳になるんだよ
なあ、翻訳ってLISPで機械的にできるんじゃないのか? 英単語→日本語なら形態素なんてあんま関係ないし それぐらいの希望を持ったっていいだろう
誰も出来てないから
機械翻訳って昔からできるできると言いながらさっぱり進歩しない分野だと思う。 日本語→韓国語みたいに単語の置き換えでできるレベルの言語以外は100年後も 相変わらず意味不明珍文ジェネレーターのままだと思うよ。
まじかお
>>344 > 翻訳本の価値は訳の質じゃない
> 第一義は原著者の言いたいことが分かることだから、
> 矛盾のない訳であるだけで十分であり、上手くなくとも、直訳でも構わないはず
ところが、直訳で用を成す場合ってのはめったにないんだな。
訳語一つとっても内容を理解していないとダメになる。
そういうのは構文で致命的なミスをしていると見ていいよ。
学術書の翻訳でダメなのは英語の問題というより、そのジャンルを舐めているとしか思えんね。
まあ訳者が内容を理解できてないんだろうね
一応自分の専門ということになってる分野ですらそれだから 英語なんか出来るわけない罠w
>>350 cond, letはifとlambdaで等価なものがかけるよ
set!部分はなんか適当に再帰書けばできると思うよ
では席もだいぶ温まってきたことだし、古くて新しい話題、SICPの日本語訳は良いか糞かの話題に移ろうか。
The Computer Music Tutorial/Roads Curtisっていう、 バカでかいけどDTMからサンプリング定理、DSPまで入っている名著があるんだけど、 こいつの日本語版は訳者まえがき(後書きだったかもしれん)に興味深い話があったな。 翻訳作業を始めた当初は、数人の翻訳者が直訳派と意訳派に分かれていたけれど、 作業が進むにつれ、出版に耐えうる直訳は意訳に近づき、著者の意図をあますとこなく表現している意訳は直訳に近づいていったとか。 まあ、自分の得意分野の話題だったら英語でも日本語でも大丈夫だよな。 逆にニュース記事とかはさっぱりだ。
>>365 > 作業が進むにつれ、出版に耐えうる直訳は意訳に近づき、著者の意図をあますとこなく表現している意訳は直訳に近づいていったとか。
何が言いたいのこれ?
著者の意味をあますところなく表現する訳は出版には耐ええないのか、両者は限りなく近づいていくと
いうことか?
訳せたから読めたんじゃない。読めてるから、必要な場合には訳せるんだ
読める読めると自己申告の奴を試すのに一番いいのは訳させること。 ぜんぜん理解できないのが分かったりする(笑)
受験生の時はそういうのを吹っかけてくる奴をたまに見掛けたけど、 大人になったら居なくなったな
期待されてない大人乙
Lispとか英語とかの話題になっただけでコンプレックスが爆発する奴は死んだらどうか。
>>370 いや、英語が出来て当たり前な場所にいるだけ
なんだやっぱり単なる自慢か。もう飽きた。
374 :
304 :2011/06/24(金) 13:43:37.36
>>362 すみません。
condは無くせたのですがset!とletがなくせません・・・・
どなたか教えてください・・・。
>>374 (let ((a x)(b y)(z c)...)body)は((lambda (a b c...)body)x y z...)と等価
ttp://codepad.org/0tm5NSwq set!なしで書こうとしたものの、
eq?が出現したタイミングでフレーム作らないといけない感じなんで
set!かcall/ccかcpsかと考えたら本末転倒になったので諦めた
set!は等価な変換はできなかったような 擬似的なものはできるが
>>373 こんな場所でしか自慢する所がないんだよ、察してやれ。
そんなに気になるんだ?
380 :
304 :2011/06/26(日) 17:41:16.26
set!の等価は難しいのですね ではcondとletだけ使わないで書くとどうなるのでしょうか? 自分で書いてみてもうまく動作しません。 どなたかお願いします。
set!はprimitive
あとは
>>375 を読め
lispやschemeを(できれば日本語で)解説する動画を誰か投稿してほしい
SICPを元にしたMITの講義ならpodcastで見れるが、
lisp/schemeプログラミングの現場(のようなもの)を動画として見てみたい
それと、Anarchy Golfのlisp/scheme解説も見てみたい
(たとえば、"hello, world!" の出力をたった22バイトで成し遂げるってどういうテクニックを使っているんだろうか
http://golf.shinh.org/p.rb?hello+world )
もしかして、 (print "hello,world!") 夢を壊したらゴメン...
slimeの紹介ビデオ (イタリア人によるもの) やonjoさんの→let実装ビデオなら転がってたと思うが。
shiroさんくらいの現場のビデオなら興味津々だな。
386 :
382 :2011/06/27(月) 09:19:56.48
387 :
304 :2011/06/27(月) 10:38:24.09
皆さんのおかげでなんとかなりそうです。
ありがとうございます
ところで今更なのですが
>>333 のコードで
lexical-addressの中でdefine recがありますが
recを外でdefineするとエラーになります
なぜこのように書かなければならないのでしょうか?
別にエラーにならないけど。かなり基本的なことを理解してないと思う
389 :
304 :2011/06/27(月) 11:32:47.05
すみません よければ説明をお願いします・・・。
荒らしをスルーできないのは君だったか。以降君にはレスはしない
Lispのデバッグのコツみたいなチュートリアルビデオがあるなら見てみたい 途中で止めてコード修正して、継続実行できるのがすごいんだとかが書籍にとかインタビュー記事にあるけど、実際どうやんのかとかさっぱりわからん
手取り足取りでプログラマーになるつもりかよ
Gauche本が結構詳しく書いていなかったっけ?
ちなみに「ガッチェ」と読みます。(キリッ
ガウチョ!
397 :
デフォルトの名無しさん :2011/07/11(月) 17:00:48.69
>>397 javascript流行ってるのかな
中間表現としてはいいよね
>>398 JavaScript は Lisp in C's clothing と言うくらいで、
Lisp と相性が良いし、言語の素性も良いからね
ウェブアプリの分野は JavaScript の独占状態だし
アイク先生がブラウザ内で動くSchemeを実装する約束でNetscape社に入ったら、 いつの間にか文法をC風にすることになっていて驚いたって逸話があるくらいだからな。
LIST遊びって本良いの?
ずぶの素人には難しかった
>>401 Emacs使い以外には用のない本。
Elispは古典的なLispだけど、今や少数派なので。
>Emacs使い以外には用のない本。 全くそんな事はない。 あくまでもElispを題材にとっているだけであって基本の説明をしている。
しっかりとした内容で良い本だと思うけど、lambda が出て来ない(よね?)のはどういう意図なのかな 続編として、マクロ遊びもキボンヌ
高階関数とかまでを扱うレベルの関数型プログラミングの本じゃない、ってことでしょ
だが高階関数を封じてlispを使うのは両腕を縛って泳ぐようなものではないかね。 がんばれば溺れることはないだろうがとても苦しそうだ。
アスペかよ。
気楽に再帰に親しんで貰うための本だったような。
『第4章の「再帰」は本書で最も読んで頂きたい書です。』って前書きに書いてあるね。 つーか、「リスト遊び −Emacsで学ぶLispの世界−」ってタイトルを見て、なぜ高階関数とか出てくんのかね。 ちなみに薄い120Pで1200円。
リスト関連の関数と高階関数は結構深い関係だと思うぞ
遊びの本なのに > 高階関数を封じてlispを使うのは両腕を縛って泳ぐようなもの なんて大上段なレス返すのがおかしいだろ、って話よ。 その先は他の本格的な本読んでくれってスタンスだろあの本は。 文句の付け方がおかしい。
でも今読むならscheme手習いでいいんじゃない?
>>413 後書きによれば、それは「次に読むべき本」だって
>>410 リスト遊び → リスト操作 → 高階関数
Lisp の世界 → S 式 → マクロ
っておもたよ
でも、どっちもないよ
ただ、lambda は敢えて入れてない様に見えたので
対象読者のレベルを考えて入れなかったんだろうね
だから続編キボンヌ
本の内容はとても良いので、読んでない人は買って
読んだらいいと思います
続編きぼーつうたって、著者の興味は今やHaskellだし
著者だと気づかず、twitterでフォローしてた俺
てか「あどけない話」の人だったのか!
Mewの人でもある。
リスト遊び好きだったなぁ 良い本だよ、楽しい。
『ハッピー・ネットワーキング』は名著
lispからhaskellに行く人ってなんでいくんだろ あんま違わないと思うんだけどなあ
根本の考え方は確かに似てるだろうけど 手続き型言語同士の別言語くらいには違うと思うぞ
チワワとシベリアンハスキーくらい違うだろ
いやー、まったくの別物だと思うよ。コードを書くときの考え方すら違うと言われることもある。 モナドひとつとってもLispとHaskellで全然使用感違うし、Lispで関数合成多用とかしないでしょ? Lispは「コンビネータも使える」だけど、Haskellは「コンビネータを使うのが普通」って感じだし。
Gauche-mingw-0.9.1.exeでインストールしたら 環境変数のPATHの設定値がGaucheのパスだけになって もともとの設定値がみんな消えてしまった。 トップページをよく見たらその問題について書いてあったけど後の祭り。 せめてインストーラのダウンロードページに書いといてほしい。 「対応策を考えています」ってなってるけど半年経っても修正されてない。
Chickenでeggのbindを使ってC++のクラスを呼びたいんだけどmake-instanceでunbound variableってなってこける (use bind)って書くだけじゃだめなの?
>>428 そんな苦労してまで Windows を使わなくても良いと思うんだが...
確かお金も掛かるんだよね?
ここに書くより本家に突撃した方がいいんじゃないか。要望が多い方が対応が速いだろう。
「お金が掛かる」ってのは「Gaucheが有料なのか」ってことなら無料だよ。 PATHが消えたこと以外は問題なく使えてるし。 「PATHの内容が1000文字に近い場合」に問題が発生するということらしいけど 大抵の人はそこまで長くなくて問題も出ず、対応も鈍いのかも。 うちのPCは前に何か実験したときに無駄に長くなって放置してたはず。 本家に突撃すべきってのはその通りですね。
OS (Windows)自体が有料、ということじゃない? それはともかく1000文字なら超える人がいてもおかしくない数字だね
NSIS の問題なんだろ? NSIS は問題を認識してるっぽいから修正を待つしかしょうがないんじゃないか? Gauche のプロジェクトとしてできる対策は NSIS を使わない (じゃあ何を使う?) か、 NSIS へ改良案を出すということになるけど、 NSIS の改良を Gauche の開発者に求めるのは筋合いだろ。
自分では修正できないにしても 問題点の周知について改善すべき状態ではあるね
>>432 Gauche がお金掛かる訳無いじゃん...
オープンソースでフリーソフトウェアなのに
GaucheをWindowsで動かすこと自体が目的でないなら、 別の処理系使うか仮想LinuxをWindows内で動かすか、 Macに鞍替えしたほうが早いと思う。残念ながら。
早いというのはどういうこと? 「とりあえずschemeを使いたい」という目的は十分果たせているけど。
とりあえずでいいなら、いいんじゃないの
440 :
437 :2011/07/23(土) 19:11:52.53
>>438 すまん、とりあえず問題ないならいいんだけど。
正直、おれはWindowsでSchemeしたい人がどういう層か分かってないんだ。
schemeを使ってWebアプリ書いたりデータベース作ったり、
もしたいなら、Linuxの方が断然楽だよ。
Windowsにこだわるより、Linux環境を作ってそっちも
一緒に勉強したほうがいいんじゃないか、という意味で書いた。
いやおれは自分のことしか考えてないな、すまんかった。
>>440 そうなんだよな、winはwinの流儀のプログラム書くツール使う方が遙かに楽だし。
なもんで俺はwin機でunix流の事するときはvmに載せたos使ってる
シームレス表示使うとめちゃ便利だし
人が Scheme を始めるとき、手段ではなく目的である場合が多い。
Mac を含め Unix 系 OS だと楽で良いよね
Scheme を始める理由の5割くらいは処理系の実装じゃないだろうか
俺はスクリプト言語的に使ってるだけ。 フィートを提供してないサイトの巡回を自動化するだとか、 ファイルの種類ごとにフォルダ分けしたりだとか、そういうの。
>>443 Macは日本語ファイルの扱いがgitやsvn使ってるときにむかつく以外は良くできたunixだな
>>446 むかつくを再現してみたいので、どんな設定にしているのか教えて下さい。
設定も何も、OS Xの標準ファイルシステムのUnicode正規形がNFD(「が」のような単独コードポイントでも複数コードポイントでも表現できる字を 「か」と濁点のような複数コードポイントで表現する正規形)だって話じゃないの? 文字集合としては合成という機能があるなら合成で表現できる文字に別の符号を割り当てるのは美しくない(=NFDだけがある文字集合の方が良かった)ようにも思えるが 既存の文字集合の上位集合にするには「が」みたいなものも必要だったし、現にNFC(「が」を単独コードポイントで表現する正規形)なシステムの方が多いからな……Canonical XMLもNFCだったはず
stalinが使いたいのが目的だった
>>447 >>448 が技術的背景を描いてくれてるので、具体例をあげると
svnやgitのリポジトリに"debug担当者の作業手順.txt"をコミットしても問題起きないが
"デバッグ担当者の作業手順.txt"をコミットすると"デバッグ”が濁点との合成文字でファイルシステムに書かれるためにgitやsvnからは別ファイルにみえちまうってこと
日本語いれんなってのはまぁ解決方法の一つだが、チーム全体でそういう統一ができなかったりする。
どっかのブログでracketは最新版は怪しいから 常に少し古いの使ってるってみかけた どのぐらい古いの使うのがお勧めなんだろ 5.1.1が今のだけど4.**とか?
>>450 HFSやCocoaのことしか考えられてないからねえ。
ブラウザのファイル操作、USBサムドライブ、ネットワークヴォリューム、
あちこちで問題起こしてる。NFDもNFCも積極的にはやらないのが、
外界とのやりとりでのトラブル防止に一番いい。
要するに相手の事情に寛容になって受け入れるってことなんだけど。
ファイル名だけでもopen/creat/symlink/mkfifo/socketのwrapperを
Lisp/Schemeの処理系で使うだけでは済まずに、
アーカイバなどのアプリケーション層まで影響する。
WiXか、いいね
(define (a) (b)) (define (b) (c)) (define (c) (a)) 全然ダメですな template<typename AType> AType a() { return b(); } template<typename BType> BType b() { return c(); } template<typename CType> CType c() { return a(); }
Schemeのコードは無限ループだよね? TCOされるからスタックも溢れない。 C++の方はどういう結果になるの?
a b cが関数ってことならあってるのでは?
>>456 (define (a-int) (b-int))
...
型指定すればそれっぽくなるけど
int a_int()
{
return b_int();
}
int b_int()
{
return c_int();
}
...
なるほどですね。 ぼっちで閉じた環境で居ると他のファイルシステムを気にしませんもんね。 勉強になるぅ...。
正規化しないならしないでファイル名をhexdumpしないと何が起きてるのかさっぱり分からない状態が作れるけどな 完全なローカルファイルでそうなるのは単に困惑するだけだから公開されない限り大したことないが ドメイン名でそんなこと許したら目視で判別できないフィッシングサイト作り放題だから、RFC 3491やRFC 3987の正規化はローカルに適用する気も起きない特別仕様 基本的にファイルシステムやVCSのリポジトリでは正規化せずに、もっと上で(例えば検索する前などに)正規化を施した方が融通が利く より多くの開発者に普段から正規化を意識するように要求する方法でもあるが
>>455 ありがとう、色々試してみる
ここから日記
ソースを落として読んだらmake-instanceなんてのは存在しなかった
で代わりに
(use bind coops cplusplus-object)
(bind-file* "hoge.h")
と頭に書いて(new <Hoge>)でインスタンス生成(delete hoge)で削除
make-instanceに捕まってた自分が馬鹿だった
一つ問題があってhoge.hで他のヘッダ(<iostream>とか)をインクルードするとコンパイルが通らない
山括弧で囲むのがだめなのかもしれない
わけがわからないよ
一般プログラマが Lisp を勉強する事の最大の利点って何だと思います? ・REPL の便利さが理解出来る ・末尾再帰や相互再帰のプログラムを奇麗に手早く書ける様になる ・副作用を意識したプログラムが書ける様になる ・関数型言語のイディオムが身に付く ・プログラム言語を扱うプログラムを書ける様になる ・プログラム処理系を書く為の知識が身に付く ・ラムダ算法への理解が深まる ・人生の楽しみが増える ・その他
グダグダ考えている間に、 触ればひとまずは使えるようになる簡便な言語であること。
思想の違いに寛容になる(一部除く)
組み込みスクリプトとして便利 単純なので処理系のバグが少ない 覚えることが少なく、プログラミングの本質を学べる
関数型ですっきり書けないような問題は何が原因なのか考えてみることは 手続き型で仕事をするプログラマにとっても参考になる、かもしれないよ すっきり書けているように見えて効率が悪い原因とか
あらゆることを動的に変更できる利点と欠点を知れる。 メタプログラミングの力に触れることができる。 現在のLisp特有の利点っていったらこれくらいだと思う。 他は別の関数型言語でも体験できるんじゃないかと。 他の言語も色々なアプローチをしてるみたいだから将来は分からないけど、 メタプログラミングの分野において、現時点で一番実績があって実用的なのは間違いなくLisp。
>>464 関数が1st classである事とREPLだと思う
この2つはLipsの特徴だし。
REPL無しのLispとか泣けるし、関数が1st classじゃなかったらもっと泣ける。
(+ 1 2 3 4) =>10 最近こういう使い方ばっかり
腎臓悪い俺の .emacs には以下の関数が書かれている(男性用) (defun eGFR (cr age) (* 194 (expt cr -1.094) (expt age -0.287)))
「プログラムを扱うプログラムを書ける様になる」が仕事で役にたってるな。 MDAですとかテキトーな事いって括弧は隠してる。
Clozure CL 1.7 リリースおめ
>>466 寛容かもな。それぞれの言語のコミュニティって 色があるよね。
477 :
デフォルトの名無しさん :2011/08/06(土) 13:29:51.56
大学でコンピュータ専攻した人教えて下さい。 日本の学校でもSICPが教科書指定になったりする? Schemeは良い教科書いっぱいあるのに、日本ではSICPの情報が 目立って多い気がする。しかもチョット崇拝されて。 学校でコンピュータ勉強しなかったので、みんなどこでSICPと出会うか不思議。
2ちゃんねるに専用スレがあるくらいなのに不思議なのか。
stalinより速い処理系作ったら論文になるかな
日本の情報処理なんて 既存の処理系の特定の処理を高速化しただけで 論文になるレベルだろ
SICP評価高いのになんでまともな日本語訳ないの? クリエイティブなんとかで自由に翻訳していいのに
>>481 丁寧な解答ありがとう!
上のリンクやってない人以外と多くてワラタ。
そこにもあったけど自分はBerkeleyの授業(OCW)で読んだ。
SICPも良かったけど講義してたBrian Harveyの方に惹かれたので、
この人のsimply schemeも日本でもう少し人気でないかな〜って思うけど
こっちはschemeよりだから難しいかなぁ。残念だ。
>>477 九大にいった友人は、一年時はschemeの演習だったって聞いたな。
SICPが教科書指定だったかは聞いてないけども
ちなみに、俺の居た大学はprologで、教授が作った気合いの入った資料だった。
聞いた話によれば、prologを海外から輸入したスゴい教授が居るらしい。
訳について文句を言う奴か、いちいち反応する奴か どちらか一方でいいからいいかげん学習しろよ
和田が英語を学習しろ
和田っちが日本LISP界、プログラミング界のボトルネックって状況はやばくね?
LISP知らない人には 和田さんはキーボードの人でしょ
Gauche0.9.2きてるー
>>476 他人に興味がないだけな気もする。
自分の世界あってナンボみたいな印象だ。
社会的なLisperには怒られるでしょうが。
Lisp の場合は大抵の事は自分で実装出来てしまうから、 思想のぶつけ合いをしている暇があったら手を動かす ってな感じなんじゃないかな あれいいなー から つくったよ までの期間が短い というか
>>488 > 和田が英語を学習しろ
和田は英語は得意だよ。若い頃の海外論文の紹介とかの翻訳はマトモというか実に読みやすい。
SICPの訳は恐らくは機械翻訳で粗訳してから手を入れるという方法で手抜きしようとして、手入れの際の見落としがあるんだと思う。
それか東大退官後にどっかの大学で教えてゼミとかで学生に順番に読ませて学生に訳させたかのいずれかだな。
しかしまあ、名著をああいう翻訳で出すのは学問に対する良心を疑う、という批判には賛成だな。
自分でちゃんと訳す時間が自分になければ最初から訳者を引き受けなければいいんだからね。
噂によれば一章以外はまともなんじゃないの?
元の英文がやさしい文章はまとも
いやいや あんな文体で翻訳するソフトないから
あの訳は好きなんだけどなあ 賛否あるのは分かるが
>>485 prologを海外から輸入したらスゴイのか
俺もなんか輸入するかな
他所から持ってきただけでスゴイスゴイと言われるのはおかしな話に聞こえるが 海のものとも山のものとも知れない時期に有用性を理解して 早期に導入したんだとしたら、それはある程度評価されてもいいんじゃない その人が輸入した時代のprologをとりまく状況は知らんけど
あんな文章をひねり出す機械翻訳やら、いまどきあんな大時代な文章を書ける学生or院生が、
いたらそのほうが凄いわw
他人に訳させて監修者がろくに監修の仕事してないだろ、とか言われたものといえばK&Rだが、
なんかそういう「世間の悪評」って奴を適当に拾ってきて継ぎ接ぎしただけで、全く一文もSICPを
読んでないのが丸分かりで馬鹿を晒してる
>>494 が哀れを通り越して滑稽。
翻訳ソフトの訳そのまま載せて 回収になった本あったな
そっちは真面目なスレだから雑談はこっちです
>「数数千が、訪問代表団と会合するためにユニオン列車車庫に群がった、そして、パレードは200台の酔っぱらっていて旗の包茎の車を含んでいた」 これか 普段から糞訳本読みなれてるうちらからしたら わりとありふれたレベルの訳だな
>>506 包茎の車がありふれてるとかどんな本読んでるんだ…
そうぞうすらできん
アインシュタインの伝記だよ。
ここまでの珍訳だと回収前の本はプレミアつくだろうな
そんなことよりGaucheの話しようぜ!
好きに話していいのよ
>>475 ccl って地味に凄いよね
自分はもうしばらくまとまった量の Lisp のコードは書いてないけど、
Lisp でアプリケーションを作る事になったらこれを使うわ
>>513 先輩にCommon Lispやるならsbcl使えって言われたんだけど、cclってそんなにいいの?
どっかのブログの人も推してたし
>>514 SBCL も良いと思いますよ
歴史的な経緯や目指している方向が大分違うと思うので、自分は CCL の方が好きです
>>511 github を検索してみると Gauche を使ったものって意外にあるよね。
Gaucheのダウンロードリファレンスマニュアルまだ0.9.1なのな
普通に make しても html 版は生成されない。 doc ディレクトリに行って make htmls すること。
>>516 SICP とかの本の演習問題を解いたのとかがたくさんあって、注目すべきプロジェクトとか探すのめんどい。
>>513 商売でやってるから、SBCLとかだと後回しにされがちな所も、
きっちりサポートされてたりするのが良いよね。ARMとかだと現状多分これ一択。
>>514 最適化とか型推論とかの性能はSBCLのが基本的に良いよ。
流石に国防総省に金もらってやってたCMUCLの派生だけあって。
人気も断トツだから、ライブラリからのサポートも厚いし。
どっかのブログの人が推してたのは安定性の観点からだけど、
SBCLも別に不安定って訳じゃないし、CCLも1.5とか凄いバギーだったよ。
SBCLのWindowsスレッドサポートも進展してきたし、今割と熱いかも。
どっかのブログの人で通じるんだなwwww まあLisp界隈は狭いしな……
Windowsでまともに使えるタダで速いclはどれ?
ccl のソースツリーに android と書かれているけど arm 対応はそういう事か 凄いな
>>518 知らんかった。
地味にありがたい情報だわ。
たとえばリテラルを書き換えたときの挙動なんかは未定義だったりするけど、 うっかりやっちゃうことだってよくあることじゃん? 最適化かけたら問題が顕在化するとかありがちじゃん? 言語処理系としては仕様に従ってたらいい話なんだけど、 言語ユーザーの誰も彼もが仕様の詳細を把握してるわけでもないし、 ちょっとしたミスを許容するナイーブな処理系の方が結果的に安定して動くことはありえる。 これはちゃんと仕様を習得するのにかかるコストだとか、 必要なパフォーマンスとかとのトレードオフになってくる話で、 どちらがより安定しているかという客観的な指標で言うのは難しいと思うんだよな。
とりあえず使ってからコメントしては?
やっぱりGaucheなのか Racket常用してる自分は少数派なのか
>>528 mz系もウィンドウズ使ってる人にはいるだろ。
俺はSTk。Demo-htmlのダサさは癖になる。
>>526 それ安定性って言わんと思う。処理系には何の責任もない。
強いて言えば、どっちかというと堅牢性(robustness)に類する話だと思う。
規格に反する書き方すると警告出してくれたりすると親切で良いかもね。
この手の性質について定量化するのは難しいという部分には同意。
さらに、一般的に言われる不安定さっていうのは、イメージによるものが大きいし。
>>528 Racket便利じゃん。
526は小難しい事言ってますって満足感得たいだけのアホ
>>528 > やっぱりGaucheなのか
> Racket常用してる自分は少数派なのか
俺もPLT Scheme時代からずっと使ってるRachet派だ
533 :
526 :2011/08/09(火) 01:07:53.94
>>530 処理系の責任とは思ってないよ。 むしろ、「それって処理系以外の要因で結果的にそう見えてるだけじゃね?」という意味合いのつもり。 先に述べたように、言語処理系としては仕様に従ってたらいい話だとは思う。
ちゃんと規格通りに言語を使えている人とそうでない人にとって見え方が違うということで、使い方によって印象に差が出ることもあるという例で出しただけ。
安定性の話に限らず、速さとかでも総合的なベンチマークの結果がよくても弱点を踏んだとたんに遅くなることもあったりするし、必要なのは特性を把握するってことなんだよなぁ。 万能はあり得ないんだから。
だから
>>528 が少数派であろうが多数派であろうがその選択肢が用途にマッチしていると考えたのならそれでいいんじゃないのか。
折角だからどういう用途で使ってるかも書いて欲しいね。 その上で各処理系のメリット・デメリットの情報を共有するのが建設的だろう。
>>533 >>530 は「安定性という言葉の認識がおかしいよ」って言ってるんであって、
別にそれ以上でもそれ以下でもない。書いてある通り。
あと、言いたいことは理解できるんだが、割と致命的に文章がおかしい。
言葉の選び方から文章の前後の繋がり方まで色々。もうちょっと推敲して欲しい。
悪いがてめーのレスはread-errorだぜ!HAHAHA!
536 :
526 :2011/08/09(火) 12:49:08.54
何気なく 「コンピューターおばあちゃん♪コンピューターおばあちゃん♪」 と口ずさんでいたら、いつのまにか 「ハンバーガーおばあちゃん♪ハンバーガーおばあちゃん♪」 と言っていた。 な… 何を言ってるのか わからねーと思うが おれも何をされたのかわからなかった… 頭がどうにかなりそうだった… 催眠術だとか超スピードだとかそんなチャチなもんじゃあ 断じてねえ もっと恐ろしいものの片鱗を味わったぜ…
537 :
526 :2011/08/09(火) 12:49:52.35
すいません誤爆しました。 上の書き込みは忘れてください。
macのハンバーガーwww
>>536 ですべてがどうでもよくなった。どこに投稿するつもりだったんだw
やっぱお前らって面白くないわ
>>541 の面白い話が終わる事無く次から次に出てくるスレと聞いてやってきましたよ!
Lispを手足のように使いこなす俺らの会話は パンピーにはちょっとハイセンスすぎるんだよな…
>>541 日本人だからしゃーない黄色人種だし
そっちの方がレアだろ
一人頑張ってる奴がいるけど 引き際が肝心
にわかには信じがたい。
どっかで教材ででも使ったのかな? 6月だとそれもあんまりないよな いちおう有隣堂には、たくさん置いてあったが、、、、
Scheme勉強中でSICP買おうか迷ってたんだけど 手習いと修行ってそんなに良い本なの?
>>549 SICPはschemeの為の学習本じゃないって事は知っておいた方がいい。
552 :
デフォルトの名無しさん :2011/08/15(月) 08:38:58.09
プログラミングHaskellの役者って山本和彦だったんだ。 やっぱ時代はHaskellだな。
SICPってやたら推してくるヤツいるけど、別に読む必要なくね?
解読?
世の中に絶対必要なものなんてない。
絶対とか極論するなよ
SICPは単なる教科書のひとつだから、別に他の教科書で勉強しても、 同じ内容を理解できてれば何だって良いよ。一定の評価を得てるから、 初学者に教科書を紹介するときにしばしば引き合いに出されるだけ。
同じ内容を理解する必要はあるの?
そりゃ基礎だから、理解できてないとまともなプログラム作れんでしょう。 まともな教育機関なら、普通にやることだと思うけど。独学でも途中で通過する所だし。 同じ内容って表現が悪かったかな。アプローチはそれぞれ違うだろうから。 根底にある考え方とか、そういったものの話ね。
翻訳がクソだってさんざん言われてるけど、そこまでか? 翻訳本ってあんなもんじゃないの?
いやまあ、計算量とか再帰とかデータ構造とか抽象的な計算機の概念とか、 そういった諸々知らなくてやってけるなら読まなくてもいいだろうけど。 Cのプログラマとかだって普通に知ってる(使ってる)内容だよ?
まあ経路が違っても、あの内容は全て知ってるのが普通。
SICPはMITの電気電子/情報科学コースで「最初に」「4ヶ月で」やる授業の教科書だった。 プログラムの初心者や、自己流でやってきた学生に、短期間でそれなりの基礎を 身につけさせるって目的で書かれた。Schemeを使ってるのもそれが理由。 言語そのものの説明が簡単に済むから。 既にある程度経験があったり、時間をかけたり、独学するんだったら、他に良い本もあるだろうさ。
問題は、この本を読まなくてもこれくらいの内容既に身に付けているか そのうち身に付けてしまうような人ほど喜々として読んで 「面白かった」と言うけれど、 この本をペンと計算機片手に読む必要のある人ほど 言い訳したり何だりでマトモに読まず 「クソ本だ」と言っているところ まあこの本に限ったハナシでもないんだけど
みんながみんな、理想的なプログラマになる必要も無いでしょうし、 自分も、プログラミングは好きだけど、他の事は沢山さぼってるからなあ
570 :
デフォルトの名無しさん :2011/08/17(水) 02:49:16.19
またジジイの繰り言か。 さっさとくたばれ。
そういうのは他のスレでどうぞ
scheme手習い買いました eq?という使い方の分からないものが出てきました こういう時のために関数の一覧とかないんですか
釣れますか?
釣りとかじゃありません。 ほんとにわからないんです。 それともこの本は私が読むには早いんでしょうか?
その本は単語帳よろしく右半分を隠して読む本じゃないぞ、とエスパー
誰だって最初は初心者だ。分からないことがあって当然。 分かってる人はそれをふまえて発現しないとな。俺がまだ初心者の頃、先輩はこう言ってくれた。 半万年ROMれ
私がつまずいているのはすごく基本的なとこるみたいですね。 経済関連のニュースで、 Yahho Shoppong のベースになった view-web は パウログラハムさんが Lips で描いたと知って興味をもったんですが、 文系には Lips は難しいみたいです。 もうちょっと独自に勉強してまだ来ます。
あやつめついに法王の座にまで上り詰めおったか
>>577 俺も文系だけど、Lisp が好きだし、Lisp の処理系の実装を読むのも大好きだよ
個人的には、Sheme 手習いは初心者の一冊目の本としては向いてないと思う
ウェブ上の解説とかで良いので、Scheme の基礎的な所を理解してから
再挑戦されると良いと思います
英単語をスペルミスする呪いにでも罹ったのか
lisp スレだからな
なるほど
時代はlispよりもhaskell 教養としてのプログラミングならこっちを勧めたい
意図的にスペルミスしてるのは釣りなんだから相手しちゃだめ
スチームと読ませるのはありなのか
lips で描くとか、どんだけ苦行なんだ
俺は ESC/P ならプログラムから出力したことある
Haskell怖いよ
>>577 via web は c++ で置き換えられちゃったみたいね...
理系出身でも、ちゃんと計算機科学を専攻していないと、lisp ナニソレ
フルクサイいんたーぷりたゲンゴでしょ状態の人が自分の周りには多かった。
いやいや今どきの lisp はコンパイラの方が主流だよって教えてあげたら、
ソモソモいんたーぷりたが何なのかすらきちんと分かってない感じだったわ。
え? Gauche=インタープリターが主流じゃないの?
ばいとこーどいんたーぷりたーのハナシ?
商用系 Common Lisp とかはコンパイラだよねぇ?
オープンソースでもメジャーなのは全部コンパイラじゃないかな しかも clisp 以外はネイティブコンパイラばかり
Gauche が主流とか、それどこ情報よー。 と、煽りにノってみるテスト。
せっかく出したトリップだがNGにしてやんよ
597 :
572 :2011/08/18(木) 04:57:38.08
僕は一度しかレスしてないんですがなりすましを見るのは楽しいですね eq?は右を見れば理解しました
600 :
デフォルトの名無しさん :2011/08/18(木) 07:52:34.32
さめこ定食一つ
初めてのscheme書籍のお勧めをいくつかお願いしまうす
>>602 ありがとん。
電車の中で読むのに、プリントアウトすんの面倒だな〜と思って。
>>602 「プログラミング Gauche」は Scheme の初心者に適した内容になっていてオススメできるかな。
Gauche の名前を使ってはいても前半は Scheme 全般に通用するし。
逆に、 Scheme をある程度知っている人が Gauche 特有のことを学ぼうと思うとかなりヌルい本だと感じるかも。
それから、「プログラミング言語 SCHEME」もオススメ。
単に順番に言語機能を紹介するのではなく、 Scheme の理念をきちんと解説しているところに好感が持てた。
Lisp は関数型と分類されることもあるし、リスト操作に注目されることが多いけど、
実際の強みはそういった基本機能の上に様々なパラダイムを構築できることにあることがよくわかった。
これらの後に「Scheme 手習い」「Scheme修行」で演習というのが初心者向けにはいいコースなんじゃないかと思う。
SICP は名著だけど、 Scheme を学ぶために最初に読むような本ではないので注意。
いきなり読み始めても早々に脱落するケースが多いのでそれで Scheme を諦めるともったいない。
「プログラミング言語 SCHEME」は初心者向けじゃない、クイックリファレンスだって尼の評価にあったから避けてたな〜。 ポチっとこ。
原著が公開されてるのでどういう本かぐらいはチェックしたほうが
>>606 Scheme というか Lisp 系言語も世間で言われているほどに難しいわけでは全然ないと思う。
でも、異質であるのは事実だから、機能だけ紹介されても使いどころがわからんのよ。
「プログラミング言語 SCHEME」では、その機能がどうしてそうあるのか背景となる理念と同時に基本となる使用例を押さえている点で初心者に読んで欲しい本だと思った。
俺自信はある程度 Scheme に慣れてから読んだのでもしかすると初心者には難しいと感じられるのかもしれん。
まぁ
>>605 はあくまで感想レベルの話だから他のレビューも見て総合的に判断してくれ。
社会人にとっては高い本でもないからとりあえず買っといて難しいと思ったら後回しにするっつーのもアリだろうし。
>>609 基本要素が少ないことを活かしてるわけだな。 事前に言語そのものの教育をする必要がそれほどないと。
つっても Scheme のサブセットで済ましてるから、 SICP をまともに理解したとしても Scheme を充分に理解できてるわけではない。
だから SICP で Scheme を学ぶのは向いてないと思うわけだ。
R6RS の範囲に踏み込むと割と複雑になってくるし。 特にマクロまわりが。
マクロを話題に上げればフェイズの話になるし、フェイズとなると library もからんでくる。
俺としては R6RS はキッチリしてて好きなんだけど、これをちゃんと説明して理解させるのは難しいと思うわ。
R6RS を前提とした書籍っていうのは (日本語では) 多分一個も無いんじゃないかと思う。
ただ、「プログラミング言語 SCHEME」ではフェイズの問題には触れない範囲とは言え R6RS のマクロシステムの解説をしているので、目を通しておくといいと思った。
(厳密には R6RS のマクロシステムではなく、 R6RS の元になった提案。 そのマクロシステムの提案者が著者自身であることからもわかる通り、著者は Scheme 界の大御所であるので記述がそれなりに信頼できるというのもある。)
611 :
609 :2011/08/22(月) 03:54:51.74
あがー、萩谷さんじゃなくて湯浅さんだった、すんません KCL開発者って覚えてて、いつも混同してしまう、、、
言われて調べてみたけど、「プログラミング言語SCHEME」ってDybvigが書いてんだね。 何か引っ掛かってたけど「The Scheme Programming Language」の邦訳か。スッキリした。
まぁはぎゃ先生ないし湯浅先生の指導で勉強する、とかいうんだったら、前提が全然違うわ。 しかも奥乃先生も付いてるんでしょ? 鬼に金棒、じゃなくて、鬼が二人w
>>612 原書 (英語) の方が通りがいいのか。
お前インテリだなー。
横のものを縦にするだけで食っていける国健在なり
インテリだなー。
Shibuya.lisp の発表者を募集してるらしいね。 誰か応募した?
締め切りはいつ?
募集してるのは発表者だけだよね? 参加したいな〜と思って参加登録探したけど見つからない
コテハンに反応するなっておばあちゃんが言ってた。
お前はもう 反応している
学生が食いつくと思ったんだろう
R7RSって大体R5RSを拡張したようなもんって聞いてるけど 「Scheme:マクロ:CommonLispとの比較:意味論」で言われてるような問題って解消されてるの? (問題点:R5RSでは<expression>≡<datum>って解釈の実装を許すような意味論定義がされてる)
今ドラフトの第三稿見てるけど、そこで指摘されてる点はそのまま残ってるように見える。 全文を読んでないから断言はできないけど。 まあ、R7RSのsmall languageってsyntax-case入ってないし。
んー、でも6.3.2に
> That is, according to Scheme's grammar, every <expression> is also a <datum> (see section 7.1.2).
って書いてるな。これはR5RSの6.3.2にもある文。まあ、7.1.2の方は例によって指摘通りなんだけど。
ちなみに、
>>626 の「<expression>≡<datum>」ってtypoだよね? それだと逆になっちゃう。
the datumではなく、a datum。
Gaucheはイカ娘になるしかないな
>>629 ごめん。英語苦手なんで、できればもう少し詳しくお願いしたい。
具体的にはどう解釈する余地があるの?
>>626 古典的なSchemerにとっては解決する必要のない問題。
ダングリングエルス問題に似てる。
そもそも、意味論が完璧になっても、使う側からしたら何の役にも立たんしね。 多少穴があろうが、syntax-caseとかexplicit renamingが使えればどうでも良い訳で。
てすと
問: 「あたかも」を使って短文を作りなさい。 答:R6RSから俺にとってどうでもよくなる危険性が あたかもしれない
『プログラミングgauche』の問題(p.56)について2点質問します 1.リストの長さを計算する関数をfoldを使わずに定義するものとしてこう書いてみました (define (length2 lis) (if (null? lis) 0 (+ 1 (length2 (cdr lis))))) 通常のリストならただしく動くのですが、ただ、'(2 . 3) のようなドット対がくると動きません 2. リスト中から条件を満たす要素だけを抜き出してリストを返す関数が動きません (define (filter2 pred lis) (cond ([(null? lis) '()] [(pred (car lis)) (cons (car lis) (filter2 pred (cdr lis)))] [else (filter2 pred (cdr lis))]))) > (filter2 even? '(1 2 3 4 5)) *** ERROR: invalid application: (#f ()) それぞれどう修正すればいいのでしょうか
null?を(not (pair? にすればいいんじゃね condの括弧が大杉なんじゃね
(cond ([...] [...] [...])) (cond [...] [...] [...]) ぱっと見勘違いしちゃうよな やっぱり括弧の種類増やしたら駄目だ、全部(...)で統一しようぜ(w
括弧を廃止して(a)を a begin endにしよう + begin 1 2 3 end => 6 うむ。
condはclojureのが好きだなぁ、括弧の数省略されてて楽だ
また cond
lambdaこりゃ
643 :
636 :2011/08/27(土) 23:51:22.02
>>637 ありがとうございます。
その通りでした
括弧の数え間違えなんて思考停止をいつまで続けるつもりだ? BASICみたいに対応付けが簡単な仕組みに変えればいいんだよ +begin 1 2 3 end+ => 6 あ、あれ?これって○MLじゃ
それのどこが簡単なの?
それのどこがBasicだよ begin-endはAlgolだ
上のを見て括弧の数え間違えとか言っちゃう人はLisperじゃないだろ。 あれはcondの文法を少し勘違いしてただけで、一度覚えたらああいう間違いはしない。 S式disりたいなら式単位で編集できるようになってから出直してこいよ。
どう見ても括弧の問題です。 ありがとうございました。
どうみてもおまえの目が節穴です
それなりの経験があって括弧に文句言ってる奴とそうでない奴はすぐわかる
だから糖衣構文の問題なんだよ (cond ([...] [...] [...])) (cond [...] [...] [...]) このふたつは勘違いしやすいが (cond ((...)(...)(...))) (cond (...)(...)(...)) これなら分かりやすいだろ? 純粋なS式なら問題ないんだよ
>>651 どういう根拠で[ ]の方が間違いやすいのかまるで理解できない。
それじゃあ単に[ ]が嫌いなだけにしか見えないよ。
>>638 もそうだけど、具体的な理由も出さずに否定されても。
見栄えの問題を、新たな記号の導入で解決するのはスマートじゃない、
みたいな主張なら、聞いたことがあるし、理解もできるけど。
知るとちょっと使って偉そうにしたがる言葉ナンバー1だよね。 糖衣構文って。
clojure 良く知らないんだけど、いつ[]を使っていつ()を使うか、 って明確に文法的に分かれてるの? おれはカッコの数を気にしない回路が脳内に出来てしまってるから、 覚えることが少ない方が嬉しいなぁ。
じゃあ気にするな
Scheme の宿題スレが無いのはなんで?
作ってくれればSICPわかんなくなった時に気軽に質問しまくるわ
ジュンク堂で「リスト遊び」があったのでつい買ってしまったけど、薄っぺらで割高だし、 内容も薄くて買って損したわ。これならオライリーのフグ本の方がずっといいな。
確かにフムフムヌクヌクアプアアはフグ目だが。
フグ本、というのは、ハリセンボン本の自称として予約されてるから混乱する。
まあでも、スコープ的にはフムフムなんとかが優先じゃね
任意の数値リストをシリアライズしてテキストファイルに保存したいけど どんな形式がいいんだろ S式そのままだとmatlabとかRが読めないんだよなあ
>>659 え、この内容で薄っぺらなの?
そもそもこの程度の本の技術は持ち合わせていて必要無かっただけでは?
本は薄いけど、初心者の俺にとって中身めちゃめちゃ濃すぎ。
lambdaを入れてない段階で糞本だろ。幾ら薄いといってもそれに触れてこそ、Rubyとか 他のプログラミング言語でのプログラムに役に立つ知見が得られる。 いまこの本を読む(初心者としてLISPに触れる)ならそれがないと。 安いといっても薄いし、説明の丁寧さではGauche本だって同じくらい詳しいし、到達する 地点はずっと遠いわけだから、いまリスト遊びを選ぶ意味はまったくない。
機会があれば読んでみるかな
on lisp読み終わって let overlambdaがつまらないので途中でやめた SICPは最後の章以外呼んだ さて次なに読もう
AI memo の lambda the ホゲホゲを全部
LionのGCCはPICがデフォルトになって云々ってGaucheのMLでも見かけたな
673 :
668 :2011/09/03(土) 21:21:24.04
The Seasoned Schemer の和訳が本屋に積まれてた 立ち読みしてみたけど 以外と面白いね 次はこれいいかも
今始めるならClojureがGaucheかどっちがいいですか?
windowsやmacでやるならclojureがいい、環境ととのえるの楽だし 本を読みながらならgaucheがオススメ
ここで聞いたらGauche。 向こうのスレで聞いたらClojure。 基本だけならSchemeのがおぼえやすいかな JAVAプログラマでライブラリ使える程度知識あるなら、 Clojureのが応用しやすい
Kawaのことも思い出してあげてください
>>677 > ここで聞いたらGauche。
> 向こうのスレで聞いたらClojure。
なんでそんなこと言っているの。ここはLisp・Scheme全般のスレなんだが。
Gaucheは実用基本ライブラリが充実しているが、速度が難点だし、マンセーしたいならScheme単独スレ立てれば?
とJava嫌いのsbcl使いが言ってみる。
Scheme単独スレってあったっけ?
ない。CL単独ならあるけど。
>>675 どんなことやりたいのか教えてくれないと、答えにくいと思うよ。
ライブラリを組み合わせてアプリケーションを手早く作るなら、
Javaの資産をそのまま使えるClojureが有利で、FFI頼りのGaucheは分が悪い。
日常的に使うスクリプトなんかをUNIX向けに書いたりする場合、
shebangをそのまま使えるGaucheの方が楽だろうし、何より処理系が軽い。
あと、JVMが動かない場所ではClojureは動かないけど、
Boehm GCが動けばGaucheは大体どこでも動くだろうし。
使い捨てスクリプトにはClojureみたいなJVM言語は向かないね nailgunみたいな起動高速化技術を使ってもスタートアップに時間がかかりすぎる
>>682 ClojureだとAndroidでもうごいちまうからなぁ
BoehmGCが動かない環境の方が少ないかもしれないが身の回りのプラットフォーム考えたらClojureに軍配があがっちまう
javavmとwget、leiningenスクリプトの3つがあればコンパイルとかせんでも動くってのは魅力だよ
ただスクリプトとして速起動ってのが目的だったらGacusheが一番いいだろう。
Win,Mac限定ならYpsilonも魅力的
なんでChicken schemeが選択肢に上がらないのかと R5RS準拠でC/C++の資産がそのまま使えて、移植性抜群の上 とっつきやすさはGaucheと同レベル、コンパイラとして使えばトップクラスの速度 どうしておまえらChickenを選ばずGaucheを使うんだ
うるせーんだよチキン野郎
Chicken scheme、MacPorts 使って Lion に入れてみたけど、駄目だなこりゃ。 csi -v すら暴走してCPU100%になる。 git clone git://code.call-cc.org/chicken-core で落とした奴はコンパイルすら出来んし。
揚げ足取るわけじゃないけど今時のOSでJVM動かないのなんてあるのかしらん
>>688 iOSくらいじゃね?
あとは古いCPUのが動かないけど今時じゃないし
chickenそんなにいいならとおもっていれてみた さっそくman chicken だれがマンチキンやねん
>>687 MacはMach-O形式その他独自なところが
UNIX方言としては敷居高くて保守が行き届かないことが多いね。
gauche64bitはGCのバグでFreeBSD(amd64)ではportsのコンパイル通らない。
んーGCヘッダのインクルードまわりで何か変なことが起きてるようなら、 どこかで似たようなの最近見たぞ。 俺がチェックしてる範囲内だから、確かそれも言語系だったはず。
>>678 Kawaはslibに使えないのがいっぱい
あれなんとかならないの
kawaってまだproper tail recusionじゃないんでしょ?
一応 --full-tail-calls オプションがあって、 eval 以外は OK らしい。 でも JVM 使ってる限り R5RS が言うような proper tail recursion は 期待しない方がいいと思う。
独学でschemeを学んでいます。 defineで関数を定義している中でさらにdefineを使っているコードをみかけたのですが、これは中でdefineする意味はあるのでしょうか? 別々に定義する事はできないのでしょうか?
>>698 その定義が関数の中からしか参照できなくなる。
つまり、他から不要な物を外に見せずに済むので衛生的。
実用的な話なら、意図しない関数や変数の参照を防げる。
もちろん、関数の外で定義しても良い。そういうスタイルもある。
ただし、R5RSではモジュールの機能がないので、
グローバルな定義になってしまうのだけ注意。
ちなみに、処理系の独自の機能としてモジュールの定義ができたり、 あるいは名前空間を分けられたりするので、処理系に依存するコードで良いなら、 問題にはならない。あと、新仕様のR7RSからはモジュール機能が導入される予定。 パッケージで名前空間を扱うCommon Lispだと、ローカル関数を定義せず、 小さい関数も外に出すスタイルが主流なので、好きな方を使えば良いよ。
λかわいいよλとつぶやくとEmacsからのtweetだが LispかわいいよLispとつぶやくと声優オタになる不思議
LISPもう終了したじゃないですかー!
カッコいいよならいいんじゃね?
>>700 R7RS (ドラフト) のモジュールと R6RS のライブラリの違いをちょっと解説してくれんか
>>702 そりゃ舌っ足らずなんて名前の声優ユニット無くなって当然じゃなかろうか?
あらためて考えると相当やばいネーミングだな
つまり、違う部分が多いし、R6RSの仕様と照らし合わせるの面倒だし、 短いから自分で読んでくれなさい。
俺そろそろ寝るわ。 lambda が1匹、lambda が2匹、lambda が3匹、・・・
>>707 いや、
>>700 の「新仕様のR7RSからは」とあるのが気になった。
R6RS では名前空間を分けられてない致命的なところでもあったのかと思ったけど、意味的にはそれほど大きな変化は無いのね。
R5RS → R6RS ↓ R7RS
と思ってたけど、R6RSベースのところがあるのか
>>710 ああ、ごめん。そういうことか。
「新仕様」の部分は、俺も書いた後で気付いたんだけど、
本当に無意識にR6RSを黒歴史としてスルーしてたわw
用途と目的は一緒だけど、セマンティクスは全然違うよ。
精読はしてないけど、R6RSでの7.2の部分とか大幅に省略されてる。
現状ではR5RS以前までの、多くの実装を許す寛容さがある感じ。
>>712 基本はR6RSのライブラリなんだけど、文法が少々変更されていて、
意味的にはインポート・エクスポートレベルとか、フェーズとか、
R6RSで非常に細かく決められていた仕様がなくなってる。
あるいは、まだ書かれてないだけでこれから追加されるのかもしれないけど。
R7RSドラフトでのモジュールは、"5.1. Programs"で本当にさらっと触れられてて、
あとは"5.5. Modules"で書かれてる程度。細かい挙動とかは定義されてないっぽい。
SchemeはR4RSからやり直す必要があるのさ
Gaucheのモジュールはどれに一番近い?
http://codepad.org/arrsvMiU ↑このコードで
35行目の部分なのですが、expがpairじゃなかったら35行目にいきますよね?
つまり#fという事なのに(#t (format・・・frames))))
とはどういうことなのでしょうか?
#tの意味がわかりません。
どなたかお答えお願いします。
29行目の(pair? exp)を評価すると偽(#f)なので、35行目に行く。 #tを評価すると真(#t)なので、それ以下が実行される。
>>719 以下が実行されるということは
#tを書かずに(format-variable exp depth frames)
だけでも同じ動作をすると思うのですが、違うのでしょうか?
実際に試せば速いのですが、今手元に環境がないので検証できません。
どうかお答えお願いします。
また、このプログラムでoutputに表示させてるのは21行目のvであってますよね?
(cond (条件式1 式1) (条件式2 式2) ... (else 式n)) のelseを省略して、代わりに条件式に常に真になる式#tを使っただけ。 必ず真だからそこで引っかかるわけで、昔のlispのcondはelseなんて なかったからむしろこういう書き方が当たり前だった。
>>721 なるほど。
elseの代わりだったということですね。
では#tをelseに変えることはできて、どちらも書かない事は出来ないという解釈でいいですか?
>>722 condは、(条件 式 ...)を任意の個数受け取る条件式で、
それぞれの(条件 式 ...)の「条件が成立したときだけ式を評価する」ものなので、
条件を省略することはできません。elseは必ず成功する条件の構文糖です。
(cond ...
((format-variable ...)))
とか、
(cond ...
(format-variable ...))
みたいにできないか、ってことですよね? 無理。
>>712 R6RS - R5RS ∩ R7RS = やったら、逆に怖いわ。
単なる戦争やん。
racketのパッケージシステムになれちゃったから それに合うようにマクロ書けるならそれでいい
R6RSでlibraryって名付けたものをmoduleって改名したり、 意味論までR5RSまで逆戻りってのを見てると、喧嘩売ってるとしか思えないけどな。
まあ実際R6RSって誰が得したの? とは思う
モジュールの仕様をこれから詳細に決めていったら結局は R6RS みたいな感じになるんでないの?
可能性がないとは言わないけど、限りなく低いとは思うよ。 R6RS推進してたPLTの中の人とかはRacketに行っちゃったし、 Dybvigいないし、ドラフトもR5RS以前への揺り戻しが凄いし。 多分、そんなんやったら、またSussmanがどっか行っちゃう。
とは言っても、フェイズの問題とかを未定義で済ますわけにもいかんし。 環境を分離しないのがいいなら Common Lisp 使っとれって思うし。 R6RS がそんなに忌避されるのが納得いかないんだけど。 複雑ではあってもキッチリしてていいじゃん。
>>731 Common Lisp がキッチリしてないとは思ってないよ。
Common Lisp についてよく知らんけど、記述は詳細だというのは知ってる。
フェイズの考え方をどう決めるかについて、
Common Lisp 的にしちゃうくらいならそういう奴は Common Lisp を使っとればいいのであって、
Scheme でやるからには Scheme らしさってものがあって欲しいという意味合いのつもりだった。
そして俺は R6RS は Scheme らしさが有ると思ってる。
SRFI に追い出すべき部分がどれかについては議論すべきところはあると思うけど。
R6RS を元に削ぎ落していくんじゃいかんかったんか?
>>733 これはどうしてこうなってないんだ? って思うような案は
既に出されて否決されてることが良くあるよ。例えばモジュールについて
r6rsを元に簡略化するって案も検討されて否決されてる。WG1のwikiのballotのところ参照。
それについて不満があって、WGメンバを説得できるだけの根拠を示せるなら
scheme-reports MLに投稿すればふたたび投票にかけられる可能性はあるけどね。
つうか、ほんとに疑問に思ったり良い案だと思うなら、こんなとこに書いてないで
MLにポストすればいいんじゃないか。単にどこにも影響を及ぼさない雑談を
したいだけならここでもいいけど。
とりあえず、本筋から外れるCommon Lispは置いておいて。
R6RSは反対意見多かったし、一度R5RSから出直そう、ってことじゃないの?
R6RSは根本の意味論の部分からして操作的意味論になっちゃってるから、
削っていくのも難しいんだと思う。表示的意味論の方が良いって人もいるし。
で、ベースのコンセンサスの得やすい部分だけ小さな仕様としてまとめちゃって、
その上に実用を目指した詳細で(R6RSも考慮して)大きな仕様を乗せましょう、と。
前者がsmall languageで後者がlarge language。WG1とWG2がそれぞれ作ってる。
これ別にRnRS + SRFIと何も変わらなくね? と書いてて思った俺ミニマリスト。
>>734 ああ、興味なかったら長々と申し訳ない。
>>734 だって俺、英語わからんし。
なんとか文章にしたことろで説得力のあるものになりそうもない。
>>735 モジュールの枠組みは規格に入れなきゃならん最低限のとこじゃね?
そうなるとフェイズの話、マクロの話はくっついてくるし、個別に考えられるようなもんじゃないと思うんだよな。
Unicode 関係とかレコード関係とかは規格に入れずに済ませることもできたと思う。
大きな規格が望ましいと思ってるわけじゃないが、かと言って「最小限」のラインを小さく考えすぎだと思う。
>>735 > R6RSは根本の意味論の部分からして操作的意味論になっちゃってるから、
> 削っていくのも難しいんだと思う。
なことはない。
>
>>734 > ああ、興味なかったら長々と申し訳ない。
基本、ここはスレ伸びないし、ネタになればなんでもありじゃない。
仕様が大きいと創始者がおれScheme言語つくるの大変だし、その言語の開発に関わりたい人もコミットしにくくそうだよね。
そもそもだけど、R5RSの問題点ってなんなの?
740 :
デフォルトの名無しさん :2011/09/06(火) 04:47:31.09
「Guile-Schemeは最良の拡張言語だ」という主張
http://developers.slashdot.jp/story/11/09/05/0922202/ >Schemeベースのプログラム言語の1つに、「GNU Guile」がある。Guileはアプリケーションの機能を
>拡張するためのスクリプト言語として開発されたものの、利用しているソフトウェアは少なく、
>現在ではPythonやJavaScriptなどが多く使われる状況だ。しかし、本家/.で「Guileは、
>ユーザーが少ないものの、GNUに最も適した拡張言語である」と主張する記事が話題となっている(本家/.記事)。
末尾再帰の最適化もできないくせによー言うわ
742 :
デフォルトの名無しさん :2011/09/06(火) 06:09:44.59
つかS式と基本5関数さえあれば何でもできるのに何でlispってアホみたいに方言多いの?
>>742 マルチレスするなゴミクズ
しかも嘘を。
>>737 Unicode は別枠でいいかと思ったけど、ポートとか文字列とかのデザインにもかかわってくるな。
関数 (とかマクロ) を増やせばいいだけのものなら SRFI でって言えると思うけど、
実際にはコアの上に積み重ねるような単純な構成は無理だよ。 各機能は相互にかかるんだから。
SRFI読んだことあるの?
日本語訳されたものはそれなりに読んでるね。 leque さんがたくさん訳してるから助かる。
RnRS で決めちゃったことは SRFI で無効にするってわけにもいかんのだから (それともそういうのもアリなの? 拡張するならともかく、置換えちゃうのはマズいでしょう。) 「細かいことは SRFI で議論しろ」って言うなら RnRS ではなるべく未定義な部分を残すしかなくなる。 でも、それじゃ移植性が問題ってことで R5RS の問題が解決されない。 だいたい機能が本質的かどうかなんて相対的なものだろ。 全体が確定してないのに、どれが本質かなんて最初からわかるわけがない。 強いてやるのであれば large language を決めてから本質・非本質の区分けをすべきじゃないか?
言ってることがMSIの黒田さんそっくりなのが面白いな。 Common Lispならまさに相性ばっちりだと思うんだけど。 何でそんなにSchemeにこだわるの?
あと、その本質的な機能を求めて最小を作るのが誕生以来のSchemeの理念なんだから、 それを否定しちゃうとSchemeの存在意義も否定される。
R7RSでさえ人がいなくなったのに、いまさら大きな言語とか
簡単に実装できる Common Lisp のサブセットがあればschemeなみに流行するんでないか
>>748 うーん、minimal+SRFI派の発想はちょっと違うんだな。議論が出て決まらない
ような機能についてはRnRSでは曖昧(どちらもアリ)にしといて、その空間で
色々実験するためにSRFIを出す。重複するSRFIが出たり、互いに矛盾するものが
出るかもしれないけれど、最終的には一番良く実装され使われたものが残るだろう。
そうやって「実績を積んだ」SRFIを徐々にRnRSに取り込んでゆけばいい、って考え。
R6RSで反発があったのは、そうやってたくさんの処理系で何年も、時には10-20年かけて
確かめられてからRnRSに取り込むってフローではなく、R6RSで新規にデザインされた
ものが2-3の参照実装だけで取り込まれたこと。
ここまでexplicit-renamingなし
>>749 愛ゆえに。
>>750 >>753 R6RS が急がれたのってなんで?
要するにもっと時間をかければよかったんだろ。
>>752 ISLISP がそれに近いと思う。
でも、流行しなかっただろ。
結局規格よりも処理系の仕様が優先されるんだから つまりおまえらがもっと処理系を作るべきだと思いましゅ
ISLISP頑張って欲しいけど、四年くらい放置だよねー。 Common Lispもそろそろ改訂して欲しいけど、CLtL3とかフェードアウトしちゃったし。 アクティブに活動してるSchemeには頑張って欲しい。
CLの処理系は割と頑張ってるよ。特に最近SBCLが熱い。 クラウドファンドでお金集めて、スレッドの実装を大幅に改善するために作業中。
頑張って欲しい。頑張ってるよ。じゃねーだよ そーじゃなくて、お前がやるんだよ がんばれ東北、がんばれ日本じゃねーだろ おまえがやるんだよ おまえがやれやあああああああ
市ねよ
放射能で汚したなら 汚した奴が処理するのが当たり前だろ そこは、がんばれ東北じゃねーだろ 東電さっさと掃除しろだろ そもそも土地にがんばれつってどーすんだよ 気が狂ってるとしか言いようがないな
復興も掃除した後だろ 掃除もせずに復興しろとか 無茶を言うなあああああああああああ
結局規格よりも処理系の仕様が優先されるんだよ 処理系の最大公約数が規格になるべきなんだよ CommonLispはそうして出来たんだよ そこを間違えんなよ
汚したら掃除屋さんが掃除するにきまってるだろ お前は駅のトイレでおしっここぼしたら トイレ掃除するのかよ
なんで駅のトイレ?家のトイレでいいだろ お前は駅のトイレで汚したまま立ち去つもりか?
>>764 > お前は駅のトイレでおしっここぼしたら
> トイレ掃除するのかよ
掃除しろよ。次の奴が使えないじゃないか。
いちいち掃除するより 死んで因果関係が認められた奴にだけ賠償したほうが 安上がりだわなw
>>763 てーか、Gray streamsとかMetaobject Protocolとか、
もう機能的には割と一定のコンセンサスの取れてんのがあるんだよ。
スレッドのAPIとかもそうかもな。
で、そういう事実上デファクトになってて良く使われてんのに、
規格が改定されてねー状況があんの。そのせいでAPIがバラけてんだよ。
Lisp quote unquote読んでこい。
あとは*features*の中身とかも全然統一されてなくて戦国時代なんだよ。
こんなん優先されるべき仕様なんてねーから規格でさっさと決めろとか思うだろ。
trivial-featuresとかマジ無駄な労力だろ。
処理系開発側は別に困らないんだがな それを使う奴が考えて必要なら処理系作者様方に お願い申し上げて対応して頂くのが筋だ 押し付けんなカスが
処理系作者様方はな、 有用だと思えば勝手に入れるだけだ キモイ規格なんかはガン無視なだけ
>>770 なんだそのUnCommon Lispは
レアリティ高そうだな
R7RSでも() => #tなの? () => #fにしようって動きはないのか
そんなキモい動作はイヤだな
assqとかの見つからなければ#fを返す系はどうなの? キモイよね
ISLISPはなんだかつまらない。 仕様が。これならCommon Lispでいいかなと。 EuLispの方に頑張って欲しかった。
17年なんてあっという間さ
ISLisp windows版しかないのか EuLispはyacc/lexぽいから簡単そうだな
ウォーキングしながらiphoneでSICP読みたいけど 微妙に画面におさまりきらない あのhtmlが画面に合わせてリサイズされるといいのに
くぱぁすればいいじゃない
>>780 iphoneの対応ファイルって知らないけど、変換すればいいだけの話じゃないの。
gaucheの入力列ポートについての質問です
第14章 入出力 - karetta.jp
http://karetta.jp/book-node/programming-gauche/197706 文字列入力ポートを作成して
(define in (open-input-string "(1 2 3\n\"foo\""))
read手続きを呼び出すと
(read in)
*** READ-ERROR: Read error at "(input string port)":line 2: EOF inside a list (starting from line 1)
Stack Trace:
こう表示されてしまいます
(1 2 3)がかえってくるものだと思うのですが
どこか間違っているのでしょうか
閉じかっこが足りない つーかエラーメッセージくらい読め
つーかS式書くときは補助機能のあるエディタ使えよ EmacsだろうがNotePad++だろうが何でもいいから
sbclって爆速だな。
cmuclって速いのかとずっと思っていたけど、clispよりは速いけど、sbclより10倍以上遅いのね。
>>785 カッコ支援エディタを使うか。
カッコの数を数えやすいように改行することだね。
SBCLはCMUCL派生で、 全てネイティブにコンパイルして実行する流儀を採用。 CMUCLは保守されてるだけで、開発はされてない。 CMUCLの財産でSBCLは成り立ってる。
>>789 > CMUCLは保守されてるだけで、開発はされてない。
> CMUCLの財産でSBCLは成り立ってる。
いや、そうだけど。
8年前ぐらいのブログで数日かかる計算研究ツールに使っているというのがあったから、
x86に関してはそれなりの速度が出ていたのかなと思って。
ただ研究ツールは過去の遺産でそれを使っていたのかな。
>>786 ありがとうございます。その通りでした
すみません
>>787 emacsを使っていたのですが、(define in の部分でエラーが出なかったので、
(返り値がおかしくはなかったので)
見逃していました。
>>792 ブログのネタにしようと思っていたのに。sbclは最新。cmuclも最新だと思う。
(declaim (optimize (debug 0) (speed 3) (space 0) (safety 0) (compilation-speed 0)))
(setf *random-state* (make-random-state t))
(defun make-data (size)
(let ((ary (make-array size)))
(loop for i from 0 below size do
(setf (svref ary i) (random 1.0)))
ary))
(defun bubble-sort (ary)
(loop for i from (length ary) above 1 do
(loop for j from 1 below i do
(if (> (svref ary (- j 1)) (svref ary j))
(let ((temp (svref ary (- j 1))))
(setf (svref ary (- j 1)) (svref ary j))
(setf (svref ary j) temp))))))
(let ((ary (make-data 10000)))
(time (bubble-sort ary)))
>>790 8年前だとSBCLはforkしてまだ間がないから、
Linux x86に注力してたはず。
CMUCLは主戦場がSolaris/SPARCだったから、
その人はSPARC使ってたんじゃないのかね。
あと環境はi815系のCeleron1GHzメモリ384MB OSはLinux
さっき確認したら、 10,000個 sbcl 3.278 seconds of real time cmucl 3.53 seconds of real time clisp Real time: 42.40196 sec. でした。 デマ情報を流した。さーせん。 ネイティブでベンチマークして、sbclだけコンパイルして、ベンチマークして、寝ちまったみたいだな。
sbclはwindowsでまともに動くようになりましたか?
clozure cl の方が好きだなあ sbclすぐにヒープ使い切ったとかいうエラー出るんだもん
自分の環境でも調べてみた。SBCL 1.0.51 on Solaris/x86-64。 > (- sb-vm:dynamic-space-end sb-vm:dynamic-space-start) 8589869056 > (float (/ 8589869056 1024 1024 1024)) 7.999939 この環境でのSBCLのデフォルト値は8GB。
512GBフルに使ってもスラッシング起こさないPCはいつ頃出ますか
>>805 120万くらいなら個人で欲しいけど、そんなもんじゃ済まんのだろうなぁ
関数(function)と手続き(procedure)はどう違うの?
手続きは計算するけど関数は計算しない単なる対応関係
手続きを数学のタームを使って抽象化したのが関数とか関係
個々の実装や仕様において「function」とか「procedure」と呼んでるものは、 そう呼んでる個々のそれぞれのものであって、個々に違う。 (例えば「C言語の関数」とか)
言語仕様内での定義としては確かに別だけど 計算機科学の視点で見れば通常はサブプログラム、サブルーチンといったものでひとくくりにする事は可能だよ
計算機科学の視点で見れば副作用があるものに「関数」とか言語道断……とは流石に言わないか。 数学の視点ならあるかも。
Cは関数を使うから関数型言語
片腹痛い
816 :
デフォルトの名無しさん :2011/09/13(火) 01:56:19.92
拾い食いはやめろといったろ
臍が茶を沸かす
腹膜炎だよ。
Excelは関数ありきなので関数型言語
820 :
誘導 :2011/09/13(火) 07:08:35.11
c++0x はlambdaもあるし関数型言語だ
Schemeは関数もprocedureと呼ぶので手続き型言語
twitterとかfacebookでやって思う存分戦ってくれ
何ネタにマジレスってんの? うまいこと返せよ。
速度を気にしないなら (define-macro delay (lamda (expr) `(lambda () ,exp)))) でいいと思うんだけど 何か不都合起きる可能性あるのだろうか
速さを気にしないならそうだ。 forceで何度でも評価されてしまうが
副作用がある場合はマズいだろ。 規格では一回だけ評価するって明記してあるのでそれを期待したプログラミングをするかもしれない。
一度しか使わないことが分かっているなら代用としてありなんじゃないかな
だせえw
わざわざそうする意味があるかどうかだな
元々副作用を前提にした歪な機能だから消えたんだろ
1変数しか返さない関数に拡張情報も返したい Common Lispでは 値しか返さない関数を 多値を返すように1変更しても 返値を受け取る側が変更されてない(1値しか返ってこない)前提でも問題ない(2番目以降が無視される) Schemeでは多値を返すように変更すると 受け取る側を全部変更しないといけない(少なくともRacketではエラーになる) Common Lispみたいに受け取る側を変更しないで 多値を返すように変更する方法ないでしょうか
>>833 よくよく考えると、common lispの仕様って複雑なことをやっているんだな
そういうものかと流していたけど、実装するとなるとどうやっているのか思いつかない
不思議だ
スタックトップにある多値を、 同じ数の多値を使う文脈なら普通に、 少ない数の多値(単値)を使う文脈なら上の部分だけ使うだけ。 足りなければエラー等だわな。
>>833 そういう仕様は r5rs にも r6rs にもないはず。
call-with-values 的なものを実装することもできない。
手続きの arity を取得する方法が無いから、正しく apply する方法がない。
receive 的なものは一応実装可能。
トップレベル変数に値を保存しておけばいい。
>>833 使い勝手を考えればCommon Lispの仕様の方が便利なのは確かなんだが、
Schemeの多値の論拠ってのは関数呼び出しとリターンの対称性なんで、
返される余分な多値が無視できるなら、関数に余分な引数を渡した時も
無視されるようになってないと整合性がとれない。
整合性ときたか
receive 的なものっていうとこんな感じかな。 余った分は捨てて、足りなければ補う。 (define-syntax receive* (syntax-rules () ((_ (var ...) expression body ...) (call-with-values (lambda() expression) (lambda x (let-optionals* x ((var #f) ... . rest) body ...)))))) let-optionals* は RnRS には無いけど定義は省略。 RnRS の範囲内で実装可能なのでググれ。 ↓こんな感じで使う。 (receive* (x y z) (values 1 2 3 4 5) (list x y z)) => (1 2 3) (receive* (x y z) (values 1 2 ) (list x y z)) => (1 2 #f) 受け側を何も弄らずにというのは無理だけど、このマクロで覆っている箇所でなら受け取る値の数が増減しても吸収できる。 Scheme として可能な対処はこれが限界じゃないかなぁ。
「RnRS の範囲内」を「R5RS や R6RS の範囲内」に訂正。
gaucheはreceiveとか使わないと最初の値だけ返してくれるけど、これ使ったらヤバイの?
>>841 規格では、継続が期待しているのと違う数の値を渡した場合は未定義のはずだよ。
Gauche に限って言えばイマサラ挙動が覆されることは無いと思うけど、
Gauche のドキュメント中でも明記はされてないみたいなんだよな。
ざっと見た感じ、関連する記述は↓くらいだった。
>
http://practical-scheme.net/gauche/man/?l=jp&p=values > 呼び出し側は、組み込み構文の receive (変数束縛参照)か、
> 下に説明するR5RSの手続きcall-with-valuesを使って多値を受け取ることができます。
つまりは多値を receive とか使わずに受けた場合は Gauche でも未定義って解釈になると思う。
(define (add3 a b c) (+ a b c)) という関数を作ったとき、 (add3 1 2) はエラーではなく、 (lambda (c) (+ 1 2 c)) を返すとかって便利だと思う? おれは余計なお世話だと思う。
そんな処理系有るのか?
つまり可変長の多値インターフェースなんか必要ない。 受け側で数が合わなければ未定義ではなく、エラーにすべきだろう。 実装するなら多値の数は固定にすべきだ。 数学的根拠もない、対象性もない、便利でもない、意味がない。
((values 1 2 3) a b c (+ a b c)) => 6 って感じに使えたら素敵じゃね?
+ とかどうすんのさ、と
Haskellの自動カリー化は、純粋関数型言語だからこそ、というところがあると思う。 MLは副作用あるくせに自動カリー化らしいけど、納得いかない。
自動カリー化、とか考えるからおかしくなる 引数をひとつしか取らないだけだ
とゆーかふと思ったが、部分適用のことを「カリー化」って言ってないか?
Lispで部分適用する関数をcurryとか最初に命名しちゃった人は罪深いな。
r6rs や r5rs の Lexical syntax, BNF を読むと、手続き + の文字が字句解析されないように見えるのだが、 どういうこと?
っ<peculiar identifier>
>>855 <peculiar identifier> はケツに付くだけで、<identifier> になるには頭に <initial> が必要。
>>856 <special subsequent>と勘違いしてる?
<peculiar identifier>は単独で<identifier>だよ
>>857 うわー、普通に | をスルーしてた。サンクス
目が曇ってた
可変引数といえば (define (add3 a b . c) (+ a b . c)) という関数がエラーなのはおかしい。 仕様に則れば、 (define (add3 a b . c) (apply + `(,a ,b ,@c))) とでも書き直されるケースだが、そもそも有限の引数を、 わざわざ効率が悪いと判りきっているリストで処理したいなんて 一体誰が思うのだろうか? いまだにこのような思考停止を何の疑問にも思わず、 伝統として受け継いでいる事自体が、 LISP全体の進歩の妨げになっているのではないか。
そもそもapplyは気持ち悪い。 誰もが避けて通りたい機能の筆頭に挙げるはずだ。 リストへの変換を強制され、マクロや構文は受け付けない。 こんな気味の悪い遺物を使い続けるのはまさに愚行に見える。 その上で多値を可変で扱いましょうだなんて戯言にしか聞こえない。
apply消せたら国民栄誉賞あげるよ Bad Apply!!
SICPの表紙にさえ使われてるのに? >> apply
ISLISPでもevalは消えたけどapplyは残ってたっけ?
つかなんで (apply + a b c) と書いちゃいけないのさ
>>847 なるほど。
じゃあ、 Haskell では可変長引数はどう解決すんの?
15年前からかんかんがくがくやってる Haskell printfでぐぐれ
>>865 だから全ての関数は一引数なんだって。
型の付け方を工夫して可変長引数みたいに見せる方法はあるけど、それは Scheme では真似できない。
(+ 0 1 . (2))を扱って欲しい? Common Lispが良いんですね。分かります。
>>864 単に仕様を知らなかったんじゃないかな。(apply + `(,a ,b ,@c))なんて書き方、
無駄にコンシングが入るから、普通しないし。
「Lispを知らない人に限って」理論は今日も絶好調。
ところで、 SICP もそうだけど、手習いとかでもマクロについては取り上げてないよね。 マクロの凝った使い方を学ぶ良いテキストってどんなのがあるかな? 一応日本語限定縛り付きで。 とりあえず R5RS の範囲内だけでもいいけど、 R6RS とか、規格に採用されなかったシステムとかも興味有る。
>>869 伝統的なマクロの話で良いなら、Common Lispの本が参考になるよ。
On LispとかLet Over Lambdaとか。
健全なマクロについての良い本とかは、自分は聞いたことない。
ただ、SRFIのリファレンス実装とか濃いのはたくさんあるから、
そういう意味では教科書には困らないんじゃないかとも思う。
でも英語なんでしょう?
On LispとかLOLとかの話なら邦訳あるよ。 SRFIとかの話なら、手本のコードだけなら腐るほどあるって意味だから、 英語でも日本語でも読み解く難易度に違いはないよ。
s式限定のphaseなら パターンマッチのマクロあれば yacyいらないなあ
>>860 applyはevalの関数適用担当の下請け関数なので。
> リストへの変換を強制され
もともとリストになっている時(関数適用のcdr部)に使うものですし。
875 :
869 :2011/09/26(月) 16:39:25.92
>>870-872 On Lisp を一回は読みました。
マクロシステムを実装したいわけではないので、
各システムのパラダイムを理解する助けになるような小ネタ集みたいなのが読みたかったんです。
各パラダイムの中で限界に挑むようなパズル的な面白さがあるものがいいですね。
手習いのマクロ版みたいなのをイメージしてました。
コードを見れば英語でも日本語でも関係ないという主張は理解できるのですが、
英語だとそもそも見つけるのが難しいので、心当たりがあれば紹介してもらえらば助かります。
>>875 俺が凄いと思ったネタはこれだな。
syntax-rules で anaphoric if
http://d.hatena.ne.jp/leque/20100826/p1 (aif (assoc foo alis) (cdr it) #f)
とした場合に assoc の結果が it に代入されてて欲しいわけだけど、
マクロに it という識別子が入力されてないと it に代入することは出来ない。
いやいや、 it は与えられてるじゃん、
(aif (assoc foo alis) (cdr it ←ここに ) #f)
という目からウロコな話。
言われて見ればそりゃそうだって感じだけど、
syntax-rules に慣れてると逆に思い付かないんだよな。
Lisp勉強したい→とりあえずScheme→入門書読み終えてある程度動かせるようになった →マクロの勉強したい→on Lisp→これCommon Lisp本だウボァー
syntax-caseとかexplicit renamingみたいな低レベルマクロって、 名前の衝突を回避するアプローチがdefine-macroと違うだけで、 本質的には同じものだから(だよね?)、別に無駄にはならんと思うけど。 それに、define-macro自体に対応してる処理系も多いんじゃなかったっけ?
>>882 hygienicマクロで無理矢理変数を捕獲してるのが凄い。
初歩的すぎる質問で恥ずかしいんですが、R5RSやR6RSのSchemeって スコープの外側の変数に対して破壊的操作はできない……ですよね? 処理系依存なのか、規格にあるのか気になって (define x #t) ((lambda () (set! x #f))) => xを操作できない?
できる。というか、できないと割とみんな困ると思う。 逆に、なんでできないと思ったの?
>>885 すみません、できるんですね。
なんか自前の脳がよくわかんなくなっててうまく説明しにくいです
ほかの言語でもスコープの内側からの操作は普通にできるのに、なんで疑問に思ったのか……
内側のスコープで変数が操作できることを確認して、なぜか驚いて
なぜか『別のスコープ操作できちゃだめなんじゃない?』と思い込んでしまって
内側なんだから別のスコープではないですよね
変なこと質問しちゃってすみません
割とそういうのは誰でもあると思うから、気にしないで良いと思う。
上のは別に責めたりしてるわけじゃなくて、どこで勘違いしたのか知りたかっただけ。
その過程で
>>886 みたいに自分で勘違いに気付けることも多いし。
フォローありがとうございます。
お礼書き忘れてましたが、
>>885 の回答も、ありがとうございました。助かりました。
>>889 的外れな批判する前にちゃんと読めよ。
試したらできたけど、勘違いしてたから妥当な動作に思えなくて、
規格で決められた動作なのか質問したんだろ?
ナウシカscheme? って何する奴なの?
様々な出来事を通して人類と自然の関係を知るんじゃないか?
>>890 答をもらったらグダグダの日本語で弁解してないで失せろ
自前の脳に雑音大杉なのは割と誰でもあることだが
そのまま書いちゃう癖は改めた方がいいぞ
>逆に、なんでできないと思ったの?
ってあるから
>>886 はその説明でしょ。
つか、なんで
>>890 に難癖つけてるのか分からん。誰にでも偉そうにしたいお年頃の子?
自前の脳っていうのは流行りなのか
自分がlispで出来てるとかいう人いなかった On Lispの作者だっけ?
>>881 CL と Scheme で単に書き方が違うだけと言えばそうなんだけど、
その書き方の違いが全体の構成の仕方に影響している部分もあると思う。
例えて言うなら、文章の構成の仕方って起承転結が基本だけど、
日本語以外では必ずしもそれが普通ってわけではない。
英語に翻訳するときには単に英語にしたらやっぱり不自然さが残っちゃうよね。
念のため言っておくけど、
これは Scheme 使いに On Lisp が役に立たないと言いたいわけじゃないよ。
本質的でない違いが重要じゃないかというとそんなこともないんじゃないかなぁという感想。
違いを意識してよむと良い知見が得られるんじゃないかと思う。
あと、マクロのシステムごとの能力の差もちょっとはある。
CL風のマクロの限界についての記述は↓が参考になる。
http://blog.practical-scheme.net/shiro/20100425-scheme-macro
>>896 さすがに自分で言ったりはしないだろ……
自己言及のパラドクス
racketのlibraryがいろいろgaucheに移植されてるけど 時々挙動が違うんだよなあ
>>898 その内容だと
>>881 と何も食い違わないんだが、何故俺に言う。
あと、できればもっと具体的に頼む。流石に抽象的過ぎて反応できない。
ちなみに、リンク先のは、名前衝突がCLで完全に回避できないって話だから、
マクロの限界って表現には違和感があるな。Shiroさんも何度か言ってるけど、
CLではclパッケージのシンボルを普通束縛しないし、主要処理系では警告される。
実際には問題にならないことを限界って言うのは違和感があるよ。
>>904 > その内容だと
>>881 と何も食い違わないんだが、何故俺に言う。
私が書いているのは「本質的に同じだから無駄にならない」じゃなくて、「本質的じゃない部分の違いも面白い」って話。
特に反論のつもりではないよ。
>>881 を発展させる形で書いたつもりだからアンカーつけたってだけ。
> 実際には問題にならないことを限界って言うのは違和感があるよ。
「本質的には同じ」ということだったので 「(処理系レベルの裁量ではない) 理屈の上での差はある」 ということを示したんだけど…。
>>905 伝統的なマクロも、衛生的な低レベルマクロも、式をリストとして組み立てて、
という本質的な流れが同じじゃないの、というのが
>>881 の要旨なので、
別に機能的に同等だという主張じゃないよ。曖昧な表現だったなら悪かった。
リスト作ってそれを返すだけのお仕事に、そう違いはあるめえよ、という話。
その上で、そっちの本質的ってのはどういう意味で言ってるのか知りたい。
マクロのレイヤで不自然さとか知見とか言われても、正直ピンと来ない。
単に、SchemeとCLの構成要素からくるスタイルの違いじゃなくて?
その辺が一番面白い所だと思うから、できれば具体的に教えて欲しい。
中村正三郎氏が黒田さんの言をひいてなんやかや言ってるのが3年前くらいにあるけど それのような話か?
黒田さんより小黒さんの方が好きです プレゼンが面白いという意味で
>>902 xmlのフェーズするのとか移植されてるじゃない
deliciousに保存してたlisp関係のブックマークがほとんど読めなくなった 何これ
>>909 ssaxとかsxpathのこと? あれはRacket発祥じゃなくて、もともとSchemeポータブル
な実装があったのを、Racket (PLT)とGaucheがそれぞれ別個に移植したもの。
Gaucheが取り込んだ後で本家がバージョン更新してるんで、違いはそのせいかもね。
ところで 「Scheme」でググってるのに「スキーマ」までヒットするのは 小さな親切大きなお世話だと思うんだ
>>906 > その上で、そっちの本質的ってのはどういう意味で言ってるのか知りたい。
運用や実装を除いた言語仕様として出来ること、くらいの意味かな。
> リスト作ってそれを返すだけのお仕事に、そう違いはあるめえよ、という話。
私もそう思ってる。 そこでは認識の差は無いと思う。
「本質的」というのを上のような解釈で考えていたので、
強いて厳密に言えば差があるというくらいの意味で shiro さんの記事を示した。
> 単に、SchemeとCLの構成要素からくるスタイルの違いじゃなくて?
> その辺が一番面白い所だと思うから、できれば具体的に教えて欲しい。
私は CL はあんまりしらないし、伝統的マクロってのをほとんど使ったこと無いんだわ。
具体的に想定してたものがあるわけじゃない。
でも、なんかさぁ、文化の違いみたいなのはあるでしょ?
むしろ私も知りたいから話を振った感じ。 なんか無い?
>>911 最近のGoogle先生はちょっとお節介すぎる気がするな。
単語の前に+を付けるか、""でくくると同義語検索を抑制できる。
検索結果ページの下にある「ご意見をお寄せください」から
「これとこれを同義語にするのは好ましくない」とか理由つきで書いておくと
しばらくすると改善されることもある。
>>898 話が逸れるけど、syntax-case (と言うか R6RS のマクロ) と CL のマクロは
健全性を別にしたら基本的に出来ることは同じって思っていい?
CL では書けるけど R6RS では書けないとかその逆とかってある?
>>915 細かいこと気にしなきゃほぼ同じ。
>>911 SGMLが操作言語としてSchemeを採用していたから、
その流れでXML系のライブラリはポータブルなのを含めてたくさんあったね。
DSSSL はいったいどこへ行ってしまったのか。
James Clarkが死んだら一緒に墓に埋められるんじゃないか。
>>918-919 一応は JIS 化されたんだから、業界ではそれなりの期待があったんだろうになぁ。
datum->syntax でスコープをいじるのと同じことが CL で出来るかやってみようと思って、
CL は全然知らないけどググって情報を集めながら↓の移植を試みた。
http://d.hatena.ne.jp/SaitoAtsushi/20090812/1250080462 (defmacro let/scope (scope-name &body body &environment env)
`(macrolet ((,scope-name (&body body)
(macroexpand (cons 'progn body) ,env)))
,@body))
Clozure CL で試してるんだけど、期待通りに動作しないし、そもそも env に nil が入ってる。
environment の扱いがオカシイ?
nil じゃなかったとしても外部表現を持たないようなオブジェクトを unquote するのもマズイかな。
CL については初心者以前なのでかなり変なことやってるかもしれない。
どう書くべきなのか CLer に解説して欲しい。
そもそも CLer はこういう実用に無意味なものは書かないのかもしれないけど。
CL のマクロは explicit renaming に似てると言えば似てるかもと思ったけど、
識別子が情報を持ってるんじゃなくて展開器に情報を与えるってところで全然違うね。
質問です。 (string-append 関数)で文字列を結合したいのですが、 関数の戻り値がlist e.g.'("suwa" "kero")なので拒絶されてしまいます。 listを展開させるために,@を使って ‘(string-append ,@(関数)) としましたが、今度はstring-appendが動きません。 都合良く展開させる方法はありませんか?
923 :
922 :2011/10/03(月) 01:53:15.16
自己解決しました。 (eval ‘(string-append ,@(関数))) で無事動作しました。 失礼しました。
(3年後ぐらいにのた打ち回ることになるんだろうなー)
apply
gaucheのmatchマクロをcommon lispでも使いたいのですが 検索しても移植したものがみつかりません on lisp のmatchは何か違うし 探し方がたりないのでしょうか
CPS変換をかけたプログラムが遅くなるのは仕方ないことなのでしょうか deley->lazy みたいな入れ替えで速くする方法ないのでしょうか
CPS変換したものを素直に実行しちゃうと、関数呼び出しのたびにクロージャが作られる から遅くなるでしょう。 CPS変換はコンパイラの中間表現と考えて、最後には不要なクロージャを消去して命令列 として出力するのが良いんじゃないかと。
SchemeでMySQLにアクセスする方法はありませんか?
>>929 つかってるSchemeの実装名とMySQLあたりでググれば?
>>930 ありがとうございました!
"Scheme MySQL"で検索していたので全くヒットせず困っていました。
実装名で検索するのは思い付きませんでした。
必要に応じてリストを照会すればいいだけじゃん
RFCとかPEPとかと同じで番号で管理してるものだからしょうがない。 名前で管理してても「Nokogiri」とか、名前からじゃ何がなんだかわからん名前を付ける 奴がいたり、「cgi」という特等席の名前が基本設計が古すぎるライブラリに占有されたり、 どうかしてると言いたい事態はどっちにしろ起きるもんだ。
>>932 全部覚えてる人はさすがにいないと思うが、ネットワーク関係プログラミング
してる人なら主要なRFCは番号で覚えちゃうくらい何度も参照するでしょ?
それと同じかな。
srfiはさらに、似た機能で別々の規格が出てくる可能性があるから (例えばsrfi-0
とsrfi-7)、安易に名前をつけられないんだよ。
RFCも2616と3987と4287しかとっさに思い出せない
.gauchercみたいなファイルに書いておいて、起動時に毎回読み込みってできなかったっけ。 Gaucheをほとんど使っていないからくわしくないけど。
>>936 2549と4824ぐらいしか覚えてないや
940 :
932 :2011/10/04(火) 14:06:08.00
srfiについて回答していただいたみなさん、ありがとうございます。
srfiってどうやってライブラリーを階層化してるの?(ネットワークライブラリーの中のhttpライブラリーの中のwgetライブラリー、とか)それとも階層なんてないの?
>>921 schemeわかんないし、リンク先の文書もよくわかんないけど、2つ目の引用から
察するにanaphoricなマクロなんでは?
あってるなら、OnLispとLOLに詳しくかいてある
943 :
942 :2011/10/04(火) 20:20:58.40
見当違いなこと↑かいてごめんなさい。 私では力不足なので、他の方のレスを期待してください
>>942 違う。anaphoricなマクロでも、(aif ... (aif ... it)) とネストすると内側の
itは内側のaifが束縛するものになるっしょ。外側のaifが束縛してるitを
内側から参照したかったらどうするの? みたいな話。aifに限った話でなく、
letによる明示的束縛でもいいんだけど。
俺はCLで実現するにはcode walker書いてローカル束縛をリネームするくらいしか思いつかん。
defmacro/macroexpandのenvはローカルなマクロ束縛(macrolet)を考慮するためのもんで、
レキシカルな束縛の情報は入ってないはず。(macroletした名前がさらにlabelsでシャドウされてたら
その情報は除かれるけど)
fluid-let とは違うの?
>>934 なんだよNokogiri って!w って思ったら、実在するのか…('д';)
あれはXMLのタグの開始記号が < なので < < < をノコギリの刃に見立ててnokogiriってつけられたんだよ と妄想
>>944 環境情報は処理系依存だし、リンク先の例だとコンパイラに伝えないと外側の
変数は最適化で消えてもいいだろう…明示的に束縛しない限り。で、どうせ明示するなら
必要なら↓みたいに変数名を明示して macro 内でlet 束縛しなおすなぁ。ポータブルだし。
(let ((x 1))
(let/scope (x) s1
(let ((x 2))
(let/scpde (x) s2
(let ((x 3))
(list (s1 x) (s2 x) x))))))
>>948 それCLで出来る? 参照だけなら簡単だけど、ネタ元のSchemeマクロと同等にするなら
内側で (setq (s1 x) 3) とすると外側のxが変更されないとならないんじゃないかと。
もちろん、let/scopeがその内側にあるletなどを全部調べて重なる変数名を
リネームすればいいわけだが。もっと簡単な方法はあるかな。
950 :
949 :2011/10/05(水) 05:48:32.22
自己レスだが、setqじゃなくsetfにして、let/scopeでs1に対して setfマクロを作っとけばできるような気がしてきた。
>>926 おれも探したけど見つけられず、結局自分で書いた>match
でもバグだらけだw
もともと更新は考えてなかったけど、Schemeと「同等」はムリだと思う。 Schemeは良く知らないが、変数のスコープを曲げてるんだろ? 結局、CLでは変数名はただの「名前」であって、lexical bindingと組み合わせて 変数が参照されるだけ。同名の名前がきたら、外側のはshadowされる。外側の変数をポータブルにズバリを示す方法はないと思う。 別にSchemeより低機能でもいい。俺はシンプルなCLが好み。 必要なら「スコープを曲げる」より外側のスコープの変数へのgetter/setterを定義しとくし。
独自用語で一人納得
推論規則の辺な記号の意味が知りたい どこかにわかりやすい教科書ないの
豆知識: 数理論理学の本は文系の棚においてある
Schemeを学びたいとい思います。R7RSは長持ちしそうでしょうか?
論理記号は知ってるけど 分数みたいな記号あるじゃないですか G |- a ↓b ------------ G|- ¥forall a みたいなの。これの読み方がいまひとつ分からない
俺は G |- a ↓ b から G |- \forall a を導ける と読んでいた。
>>921 こう言う場合はコードウォークするだろうね
macroexpand-allを使って楽するとこんな感じ
#+sbcl
(use-package :sb-cltl2)
(defmacro let/scope (name &body body)
(let (gsym-sym-list)
(declare (special gsym-sym-list))
(let ((form (macroexpand-all
`(macrolet ((,name (sym)
(declare (special gsym-sym-list))
(let ((pair (list (gensym) sym)))
(push pair gsym-sym-list)
(car pair))))
,@body))))
(let ((bindings gsym-sym-list))
`(let ,bindings
#+sbcl
,@(cddr form)
#+ccl
,form
)))))
更新したかったみたいよ。オイラの案も貼っておくか。 (defmacro capture ((&rest vars) env &body body) (let (($bindings (mapcar (lambda (x) (cons x (gensym))) vars)) ($var (gensym))) `(flet ,(mapcar (lambda (x) (list (cdr x) () (car x))) $bindings) (flet ,(mapcar (lambda (x) `((setf ,(cdr x)) (value) (setf ,(car x) value))) $bindings) (macrolet ((,env (var) (let ((binding (assoc var ',$bindings))) (list (cdr binding))))) ,@body))))) (let ((x 1)) (capture (x) s1 (let ((x 3)) (princ (list (s1 x) x)) (setf (s1 x) 10))) x) => (1 3) 10
似せても結局Schemeとは違うんだよね 。マクロ周り違いが大きいよな。
>>955 > 豆知識:
> 数理論理学の本は文系の棚においてある
哲学の論理学じゃなくてちゃんとした数理論理学の教科書ならば
少なくともマトモな大手書店ならば数学書の棚に並んでいる。
>>964 何を持ってして「ちゃんとした数理論理学の教科書」と呼ぶのかはわからんけど
記号論理の基礎が書いてあるような本だったら、言語学関連の棚付近が一番多いよ
そこから一歩進んだ内容だと計算機科学の棚
数学関連の棚に並んでる本はかなり少ない
> 記号論理の基礎が書いてあるような本だったら、言語学関連の棚付近が一番多いよ 嘘だろ
そうか言語学か。 今は数学の棚がひどいことになってるのかな
本屋の店員がまともなら、それらのどの分野でも、まともな本とダメな本はあるていど 分かれている。
書店員の知識や棚にも依存する。 図書館も同様だろうけれど、日本十進分類法などで分類されている分、 図書館の棚のほうが議論しやすいか?
人月の神話が神話・宗教の棚に置いてあるのを見たことがあるから 数学の本が別の所にあっても別に驚かない
俺の母校の図書館では暗号系の本が言語関連に分類されてたわ。 司書を含む専門の図書館職員が何人もいたのに…。
はじめてのC
古典的な暗号学は計量言語学と縁があるけどな
論理学の書籍として言語・哲学のあたりに置かれてるってだけだから、別に分類ミスってわけでもない 数理論理学の基礎を作った人らに関する書籍も、こっち方面に置かれてるわけだし
数学には無知で、ウィトゲンシュタインとかかじってると、 素朴な論理学も言語学の一種でいいと思ってしまうかも。
「素朴な」論理学が言語学じゃなかったらどこに分類してやればいいんだ?
つーかそんな中途半端なことせずにschemeの皮をかぶればいいのに
誰が皮被りだって?
呼んでねえよ
次スレたのむ
乙
>>982 乙です。
埋めつつ。
おれquicklispには非常に期待してるんだ。ネイティブコンパイラのある言語で、
ああいうライブラリ管理がある言語って、実は少ないんじゃないかしら。
SRFIにもquicklispみたいな仕組みあると良いよね。
。