CommonLisp Scheme Part12

このエントリーをはてなブックマークに追加
913デフォルトの名無しさん:2005/04/15(金) 11:34:27
>>912
へぇ〜。つか、そういう面白いことは放送前に教えてくれよ。
914デフォルトの名無しさん:2005/04/15(金) 17:01:01
もまいら
Common Lisp Hyper Specが更新されてましたよ。

http://www.lispworks.com/documentation/HyperSpec/index.html
915デフォルトの名無しさん:2005/04/15(金) 20:02:59
>>912
( ゚д゚)ナニー!?

>>913同様に、そういう事は早く言えよ。
916デフォルトの名無しさん:2005/04/15(金) 23:10:46
しばらく前からwilikiに書いてあったよ
917デフォルトの名無しさん:2005/04/16(土) 00:03:34
ドラマの件はさ〜っぱり忘れてた。誰かビデオでも撮ってないかな。

Common Lisp HyperSpecは変更点がよくわかんないけどダウンロードしとこ。
関係ないけどLispWorks 4.4のPersonal Editionまだ来ないね。
ILC2005行けばEnterprise Editionの評価版貰えるかも知れないけどウェブサイト
見る限りじゃちゃんと準備が進んでいるのかあやしげな悪寒。業務で行くのは無理か。
918デフォルトの名無しさん:2005/04/20(水) 22:01:48
文字コードをeuc-jpからutf-8に変換するライブラリで
lispの方言(librep)でも使えるものってありませんか?
919デフォルトの名無しさん:2005/04/21(木) 02:17:59
そういう事にLISP使うのは間違ってる気がする
本来そういった文字セットとかを超越した所にS式は存在するべきなんだよ
920デフォルトの名無しさん:2005/04/21(木) 02:25:22
>>919
青いな
921デフォルトの名無しさん:2005/04/22(金) 01:28:15
Scheme初心者です。FAQだったらごめんなさい。
syntax-rulesで作成したマクロは通常define-syntaxで
シンボルにバインドしているようですが、なぜdefineでは
いけないのでしょうか?試してないけどそれもアリ?
ひょっとしてマクロとそれ以外のオブジェクトとで
異なるScopeを持たせたいってことでしょうか?
922デフォルトの名無しさん:2005/04/22(金) 01:41:50
921です。
試してみましたが、やはりdefineではエラーになります。
defineを使ってマクロをシンボルにバインドするような実装も
可能だと思うのですが。
そうした場合、どういう不都合がありますか?
923デフォルトの名無しさん:2005/04/22(金) 03:40:28
>>922
define はあくまで変数を定義してそれに値を与える(たまたま値がラムダ式であれば
関数を定義したことになる)だけです。マクロは文法上、変数ではないので define で
定義するのは一貫性を欠くことになります。また define-syntax はトップレベルでしか
使えないなど、制約事項も異なります。
924デフォルトの名無しさん:2005/04/22(金) 04:00:48
>>922
あと、コンパイルと実行が別々になっている場合、マクロはコンパイル時に
展開するのが普通だから、マクロ定義と通常の束縛とが区別できる形に
なってないと困る、ってのもある。
925デフォルトの名無しさん:2005/04/22(金) 21:34:00
お前等逝けよ。 >ALL
逝けってば。
早く逝けっつってんの。
926デフォルトの名無しさん:2005/04/22(金) 21:45:25
最近LISPでない言語でプログラム書いたら、
LISPの偉大さ心に染みた。
927デフォルトの名無しさん:2005/04/22(金) 21:47:22
処理系実装して解るLispの(_|_)さ。
928デフォルトの名無しさん:2005/04/23(土) 05:09:27
どういうところがどうだと言いたいのかさっぱりわからん。
929デフォルトの名無しさん:2005/04/23(土) 06:01:09
>>927
(_|_)
↑この顔文字?の意味がわからん。
930デフォルトの名無しさん:2005/04/23(土) 06:09:10
ウルトラ・・・かな
931デフォルトの名無しさん:2005/04/23(土) 08:55:29
>>923,924
921です。ありがとうございます。
コンパイラの場合、話はわかりやすいですね。
インタプリタの場合はどうでしょうか?
(実装依存、という話ではなく、どのようにあるべきか、です)
たとえば
(define-syntax some-operation (syntax-rules ...) ;;マクロ
(define some-operation (lambda ...) ;;手続き
とした場合、
(some-operation ...)
という呼び出しは、やはりマクロ定義のほうを優先するのが順当なのでしょうか。
ただし、呼び出し時の字面は全く同じだと仮定します。
932デフォルトの名無しさん:2005/04/23(土) 09:22:25
あるべき姿としては、コンパイルしてもインタプリタで実行しても
同じように実行できるのがいちばんいいんじゃないの。もっともこれは
Lispが随分苦労してきた問題で、いまだにすっきりした解決は無いと
思うけど。(comp.lang.schemeあたりで、マクロと分割コンパイルの
話題を探すと色々出てくると思う)

マクロと手続き、両方定義したらどうなるかっていう話は、綺麗な仕様は
無いような気がする。ナイーブに上から実行してくインタプリタなら
後から出てきた方が上書きしちゃうだろうけど、例えば別ファイルで
some-operationにset!されたらどうなるかとか。921は何かアイディアがあるのか?

933デフォルトの名無しさん:2005/04/23(土) 09:59:05
>>932
>921は何かアイディアがあるのか?
何もありません。ただ、R5RSをみても、define-syntaxの説明があまりにも
簡略でdefineとの関係がよくわからなかったのでおたずねしました。
Scheme勉強中なのでできるだけ実装系に依存しない理想的な挙動をイメージ
しておきたかったのですが、
[1]コンパイラなら話は簡単(924のように)
[2]インタプリタでもコンパイラと同じ挙動が期待される(932のように)
[3]ナイーブに上から実行してくインタプリタなら後から出てきた方が上書き(932のように)
ということですね。
931に挙げた例だと[2]と[3]とは矛盾することになりますが、
[2]は人間様にとって実装によらず常に同じ結果を返すようにするように期待したもので、
本来の「自然な」Schemeの振る舞いは[3]のほうである、と理解しました。

しかし、もし[3]の立場をとるとすると、define-syntaxとdefineとは同じscopeを
共有することになり、define-syntaxの存在意義がよくわかりません。
>>923さんは「マクロは文法上、変数ではない」と書かれましたが、
マクロを変数に「バインドする」ことならやってもよいのでは?(初心者です)
define-syntaxでなければできないことって、何かありますか?
具体的な例をいただければ理解できると思います。
934デフォルトの名無しさん:2005/04/23(土) 10:12:27
初心者です・・・

人間様にはR5RS schemeのdefine-syntaxは理解できません・・・

初心者です・・・
935デフォルトの名無しさん:2005/04/23(土) 10:14:28
初心者です・・・

具体的な例をいただけないと理解できんとです・・・

初心者です・・・
936デフォルトの名無しさん:2005/04/23(土) 10:16:56
921です。自省
コンパイラの存在なしで話をしようとしていたのが誤りだったのかも。
結局Schemeといえども単なる言語処理系であって、形而上学的な理想像を
追い求めてはいけない、ということでしょうか。
937デフォルトの名無しさん:2005/04/23(土) 11:23:16
>>936
私も初心者だけど、defineとdefine-syntaxは概念として全然違うものだと思うので、
なんでそんなにしつこく同一視できると思うのかよくわからない。
ただ、うまく説明できるほどには習熟してないのでもどかしい。

あえて説明を試みるならdefineは実行環境が持っている保存領域になんかいれるもので、
define-syntaxはコンパイラ(インタプリタ)に覚えさせる指示ってカンジ?
Cでいうならステートメントや式とコンパイラディレクティブの差みたいなもの。
変なこと言ってたらスマソ。
938デフォルトの名無しさん:2005/04/23(土) 11:36:35
>>933
変数値として「マクロ」を認めてしまうと、当然実行時の動的な値に従うべきということに
なるので、実際問題としてコンパイラを作るのが非常に難しくなってしまうよね。

文法上「マクロ」は通常の Scheme の実行環境の「外側」にあると考えられるわけ。
マクロ展開時の「実行時環境」を考えたくないので、手続き的な方法ではなく宣言的な
方法での定義を強制させているのだろうね。

でも、個人的には危険が危ないがなんでもできる Common Lisp 風のマクロのほうが
好きだったりするのだが。w
939デフォルトの名無しさん:2005/04/23(土) 12:29:09
921です。
>>937
>Cでいうならステートメントや式とコンパイラディレクティブの差みたいなもの。
>>938
>文法上「マクロ」は通常の Scheme の実行環境の「外側」にあると考えられるわけ。
なるほどね。
個人的には、SchemeのマクロはCのプリプロセッサ的なものと理解しました。
かなり納得。
940デフォルトの名無しさん:2005/04/23(土) 12:36:10
921です。939の続き。
となると、やはり933の[3]的な考えは正しくなく、どのような場合でも、
まずマクロ展開が行われてから、通常の評価が行われる、ということになりますね。
ふむふむ、納得。
間違っていたらご指摘ください。
941デフォルトの名無しさん:2005/04/23(土) 12:55:21
>>940
むしろ、仮に [3] のような処理系であっても結果がなるべく同じになるように考えて
define と define-syntax を分離していると考えることもできる(ような気がする)。
942デフォルトの名無しさん:2005/04/23(土) 13:50:55
>>929
未定義
943デフォルトの名無しさん:2005/04/23(土) 22:49:26
jythonのようにjavaソースやclassファイルに落とせるlispの処理系って
何かありますか?
javaでは面倒な処理をLispで書けが生産性があがる気がするのですが。
944デフォルトの名無しさん:2005/04/24(日) 00:07:51
>>943
最近のは試してないけど kawa はいかが?
http://www.gnu.org/software/kawa/
945デフォルトの名無しさん:2005/04/24(日) 00:27:25
単発QAは荒しのサイン
946デフォルトの名無しさん:2005/04/24(日) 00:41:53
>>921
schemeでシンボルといったら'nameで表されるようなオブジェクト、または
それらの型を言う場合が多い。あなたが言っているものは名前とか識別子と
呼ぶのが適当だ。もし混同していたのなら、これを機に復習してくれ。

識別子には種類が二つあって、それは(defineやlambda式で導入される)変数名
と(define-syntaxやlet-syntaxで導入される)構文キーワード名だ。
これらは同じ名前空間で管理される(別の言い方では同じスコープ規則に
従う)が、扱いは別。
(932が言っているのは、ソースファイルとかモジュールというような概念が
定義されてないschemeにおいて、それらをどう扱うかという話。)

>>933
[1], [2], [3]はなんというか視点がずれてる。
コンパイラ、インタープリタ問わず処理系は (some-operation ...) を処理
するときには二つのsome-operationのバインドのうちどちらかしか見えない
ので、その式を処理する方法は常に一つしか存在しない。
つまり、some-operationを変数名だとみなしたら手続き呼び出しだし、
構文キーワード名だとみなしたらマクロ展開だ。

そういった訳で、940でのあなたの理解は大まかには正しいということに
なる。マクロ展開が先に行なわれるというよりは、マクロ呼び出しだったら
展開するしか処理方法がないということね。

ちなみに通常は、トップレベルで二重に定義された名前は後から定義した方
が以前の定義を(概念的に)上書きするので、 (some-operation ...) は
マクロ呼び出しとして処理することになる(この辺はschemeの仕様書で探して
みたが明確な記述はなかった)。
947デフォルトの名無しさん:2005/04/24(日) 00:45:51
いい加減テンプレに入れても良い様な気がするが…

>>943
ttp://home.comcast.net/~bc19191/blog/040627.html
948946:2005/04/24(日) 01:10:26
訂正。
> (some-operation ...) はマクロ呼び出しとして処理することになる
...は手続き呼び出しとして...

読み返してみると日本語ムチャクチャだな...
949デフォルトの名無しさん:2005/04/24(日) 01:18:04
>>947
gj
950デフォルトの名無しさん:2005/04/24(日) 01:41:29
jil.faslが存在しない〜〜〜なんだよ・・・
951デフォルトの名無しさん:2005/04/24(日) 14:06:48
JiL? 6のトライアル版でも使ってんの?
952デフォルトの名無しさん:2005/04/24(日) 18:05:00
>951
faslは見つけたんだが、require出来ん。
Trialでは無理なのかな?
これでjavaコード全部書いてやろうと思ってたんだが。
953デフォルトの名無しさん:2005/04/25(月) 23:29:38
トライアル版持ってないから力になれない。Franz Inc.に直接問い合わせてみれば?
954デフォルトの名無しさん:2005/04/26(火) 00:54:26
921です

>>946
>もし混同していたのなら、これを機に復習してくれ。
なるほど。ご指摘ありがとうございます。

>some-operationを変数名だとみなしたら手続き呼び出しだし、
> 構文キーワード名だとみなしたらマクロ展開だ。
結局、手続きとマクロ展開とはつくられたときから全く別の
ものであり、参照のためにそれぞれ変数名や構文キーワードに
関係づける際に、それぞれdefineとdefine-syntaxを使う、と
理解しました。
ただし、
>「これらは同じ名前空間で管理される(別の言い方では同じ
>スコープ規則に従う)
わけですね。

そうすると、マクロと手続きとは並列的な関係にあるオブジェクトであって、
>>946さんは婉曲に
>そういった訳で、940でのあなたの理解は大まかには正しいということに
>なる。
なんて書いてくださいましたが、私が>>939-940で納得していた
「Cプリプロセッサ的解釈」はちょっと違いますね。

compiler(およびそれと整合的なシステム)は、実行時に
マクロ展開を選択的に優先して実行するようなシステムだと
思えばいい、ということで、今度こそ納得できた気がします。
955デフォルトの名無しさん:2005/04/26(火) 01:03:46
921です。補足
ちなみにcompilerそのものの場合には
コンパイル時にマクロ展開するので、
最後のくだりの中で
>実行時に
が不要であることはわかってます。
956デフォルトの名無しさん:2005/04/26(火) 01:08:10
>>954-955
キミの理解はあってると思うけど、
キミの文章は色々不要な事を言い出しちゃってて、
コミュニケーションに難がある、と思う。

このような文章を書くあなたは学生さんだと思うが。
テストの回答で、余計な事書くと減点されるって知ってるよね?
今の君のコミュニケーションは、正にそれ。くどい。
957デフォルトの名無しさん:2005/04/26(火) 01:10:05
くどい=回りくどい

あるいは、

正解わからずに、解答欄に三つも四つも解を書いて、
数撃ちゃ当たるだろう、という傲慢な態度が見え隠れしている。
958デフォルトの名無しさん:2005/04/26(火) 01:15:54
921です
>>956-957
勉強します。
959946:2005/04/26(火) 11:40:51
>>954
それでOKかと。

923とその背景を説明してる924はよく出来てると思うので、迷ったら読み
返すといいかもしれない。
960デフォルトの名無しさん:2005/04/26(火) 23:12:08
>>959
Vielen Dank!
961デフォルトの名無しさん:2005/04/27(水) 23:44:00
CPSにコンパイルする処理系ないですか
もつろんSchemeでさ
962デフォルトの名無しさん
rhizome/pi "完全なCPSによる実装である"らしい。