CommonLisp Scheme Part10at TECH
CommonLisp Scheme Part10 - 暇つぶし2ch89:デフォルトの名無しさん
04/02/07 15:31
「Portしてくれたら金を払ってでも使う」じゃなくて
「WindowsにPortしたいので金を払うからやってくれるLisper募集」
していました。それで、元のライセンス(パブリックドメイン)から変更したくないので、
cygwinは使わない方向で考えていると言っていました。俺の知る限り、1人がやりたいと
名乗りをあげていました。あとSBCLの方へいってみれば、とも言われていました。

90:デフォルトの名無しさん
04/02/07 17:34
>元のライセンス(パブリックドメイン)
これが結構色々な面で障壁になってるよね。


91:デフォルトの名無しさん
04/02/07 17:40
>>90 そうか? パブリックドメインよりも制限のないライセンス形態ってあるの?

92:デフォルトの名無しさん
04/02/07 18:04
>>90 >>91
「元のライセンスを保つためには,伝播性をもつライセンスのものと組み合わせられない」
ということなら,GPLなどの伝播性が問題ということでしょう.

ところで私はGPLの要求は真っ当なものだと思う.
この辺の悩みは健全な開発に必要不可欠なコストでしょう.

93:デフォルトの名無しさん
04/02/07 18:34
制限がないから障壁なんじゃないか。
この意味が分からないとしたら、>>91はオープンソースライセンスをほとんど知らないんだろうね。


94:デフォルトの名無しさん
04/02/07 18:39
GPL キモい。他所でやってくれ。

95:デフォルトの名無しさん
04/02/07 19:01
>>94
煽りは他所でやってくれ

96:デフォルトの名無しさん
04/02/07 20:03
Kahua: 継続ベースのアプリケーションサーバー
URLリンク(www.kahua.org)

97:デフォルトの名無しさん
04/02/08 01:01
>>96
で?低脳な漏れにもわかるように、もちっと紹介してくれょぅ。
ドキュメント読んでも利点がよくわからん。どこがどうすごいの?

98:デフォルトの名無しさん
04/02/08 02:29
>>97 かっこいい

99:デフォルトの名無しさん
04/02/08 03:14
>>97
貴君はまずこの辺から。
URLリンク(www.shiro.dreamhost.com)

100:デフォルトの名無しさん
04/02/08 10:33
>>93
> 制限がないから障壁なんじゃないか。
> この意味が分からないとしたら、>>91はオープンソースライセンスをほとんど知らないんだろうね。
意味が分かりません。障壁とはなんですか? 具体例をあげていただけますか?

101:デフォルトの名無しさん
04/02/08 10:44
win32oleできるScheme処理系ってありますか?
ググったらそれらしいのが出てきたけど、いまいち手がかりが
つかめず…


102:デフォルトの名無しさん
04/02/08 13:03
>>101
COM/ActiveX なら DrScheme (MysterX) がサポートしていますけど。
実際にはどういうことをやりたいのかな? ドキュメントへのオブジェクト埋め込みかな。

103:デフォルトの名無しさん
04/02/08 13:05
>>102 WSH の完全な代替.ナンチャッテ

104:100
04/02/08 13:05
えーと、煽りと間違われると無念なので、少し説明。

俺は、オープンソースライセンスやパブリックドメインについての議論を
多少なりともフォローしてきているつもりです。

今後、cmuclを使用する上で、何かライセンス的にハマるといやなので、
パブリックドメインに置かれているソフトウェアが誰にどういう面で
障壁になっているのか教えてくれませんか?

>>92
> 「元のライセンスを保つためには,伝播性をもつライセンスのものと組み合わせられない」
> ということなら,GPLなどの伝播性が問題ということでしょう.
どのように組み合わせるかによって、GPLが持つ伝播性の影響がでるかどうか変わるでしょう。


105:デフォルトの名無しさん
04/02/08 13:11
>>100
つまりこういうことじゃないかな。
GPL,LGPLみたいなライセンスが使われているライブラリ(など)は、
まったく制限のないパブリックドメインのソフトウェアには使えないと。

例えば、cmuclが(GPLだと反発する香具師が多そうなので)LGPLでリリースされていたとすると、
cmuclの中に取り込めるコードがどのくらいあるか考えてみるといい(何もLispのコードに限ったことじゃないわけだし)。
そして、それらが現状の(パブリックドメインの)cmuclに取り込められるかどうか、をね。

オープンソースの現状は
URLリンク(sourceforge.net)
になっているわけで、GPL/LGPLキモイとか言っても、無視することはできないだろ。

106:デフォルトの名無しさん
04/02/08 13:14
要するにこの場面で極論するとcygwinが使えないのが障壁とw

まあ、パブリックドメインなら派生ソフトウェアは自由にライセンスを選べるわけだし、
気に入らないなら派生作ってGPLにしたっていい(保守する人が少なければ廃れるのがオチだけど)。
だから、そこまで深刻な問題でもないよな。

107:デフォルトの名無しさん
04/02/08 13:20
SFUが.NETみたいに標準搭載になればいいのにねえ。
WinFXでWin32を順次置き換えていくらしいから、
もう既にWin32で囲い込みする必要もないだろうに。
サポートの手間がメンドクサイからまあ、なさそうだけど。

108:デフォルトの名無しさん
04/02/08 13:37
>GPL,LGPLみたいなライセンスが使われているライブラリ(など)は、
>まったく制限のないパブリックドメインのソフトウェアには使えないと。
まず、自分で使用するだけなら法的に問題なく使えるよね。
ソフトウェアを配布する場合でも、パブリックドメインになっている
ソフトウェアをGPL(など制限のきつい方)にライセンスしなおせば、
問題なく使えて配布できるでしょ?

> 例えば、cmuclが(GPLだと反発する香具師が多そうなので)LGPLでリリースされていたとすると、
> cmuclの中に取り込めるコードがどのくらいあるか考えてみるといい(何もLispのコードに限ったことじゃないわけだし)。
パブリックドメインにあるソフトウェアはいつでも、ライセンスを変更する自由があるという点が一つ。
これから、もしGPL, LGPLと互換性がないソフトウェア群が非常に多くなったときにどうするか?
FSFと一蓮托生でいいのか。

そこらへんを考えると、パブリックドメインにあるソフトウェアが障壁になっているという
言い方はあべこべだと思う。

109:デフォルトの名無しさん
04/02/08 13:45
GPL厨的には、プロプラエタリで非オープンなものに転用できてしまう
パプリックドメインなソフトは、GPLの普及にとって障壁になっていると
考えられるんじゃないの?

110:デフォルトの名無しさん
04/02/08 13:48
ああ、そういう視点ですか。

111:デフォルトの名無しさん
04/02/08 15:16
>まず、自分で使用するだけなら法的に問題なく使えるよね。
もちろんそう。
これはデベロッパサイドの問題。すなわち>>89の"cygwinが使えない"とか他にも"readlineが使えない"とかね。

>ソフトウェアを配布する場合でも、パブリックドメインになっている
>ソフトウェアをGPL(など制限のきつい方)にライセンスしなおせば、
>問題なく使えて配布できるでしょ?

GPLでリリースしたらそれはGPLのソフトウェアであってパブリックドメインではないからそもそも前提が違う。
CMUCLプロジェクトがGPL/LGPLを選択するか否かという問題ではcygwinの件で既に蹴っているではないか。

>パブリックドメインにあるソフトウェアはいつでも、ライセンスを変更する自由があるという点が一つ。

これも上に同じ。ライセンスを変更したらそのソフトウェアはパブリックドメインではない。
そのソフトウェアがパブリックドメインを続ける限りはcygwinもreadlineも使えないし、"GPLに変えたら使えるじゃん"というのは"cmuclがパブリックドメインを続けようとしていて、その方針をとることによるcmuclプロジェクトへの制限"という話のすり替え。

>これから、もしGPL, LGPLと互換性がないソフトウェア群が非常に多くなったときにどうするか?
>FSFと一蓮托生でいいのか。
明らかなプロバガンダ。GPLでリリースしたソフトウェアはFSFに支配されるようになるみたいな言い方だな。


112:デフォルトの名無しさん
04/02/08 15:39
>>99
スマソそれは読んだ事あるんだ。で、ついに継続ベース Web アプリケーション鯖デターーー
とおもったんだけどサンプルとかあんま載ってないからさ。こうスゲーとわかるような
サンプルキボンヌ。

113:デフォルトの名無しさん
04/02/08 15:51
>GPLでリリースしたらそれはGPLのソフトウェアであってパブリックドメインではないからそもそも前提が違う。
いいたいことが分かりにくいな。cmuclプロジェクトに加わっていない人が、
cmuclの成果だけ持って来て、ライセンスだけGPLにして定期的にリリースするとか
できるでしょ? つまり、フォークしてもGPL側はいつでもパブリックドメインのコード
を利用できると。

>CMUCLプロジェクトがGPL/LGPLを選択するか否かという問題ではcygwinの件で既に蹴っているではないか。
これも分かりにくいな。CMUCLプロジェクト内での議論でcygwinはライセンスが問題だから
cygwin使うのよそうやという意見の一致はないと思うよ。ただ、cygwin使ったらパブリックドメイン
のままにはできないかもねという認識があるだけ。

> そのソフトウェアがパブリックドメインを続ける限りはcygwinもreadlineも使えないし、
> "GPLに変えたら使えるじゃん"というのは "cmuclがパブリックドメインを続けようとしていて、
> その方針をとることによるcmuclプロジェクトへの制限"という話のすり替え。
なんか陰謀説みたいな話だけど、単純にcygwinかreadline使いたい人は使えばいいし、それを
配布したい人は、GPLかLGPLでcmuclをフォークすればいいだけでしょ? だれもだれかを制限しようと
なんてしていないでしょ?

> >これから、もしGPL, LGPLと互換性がないソフトウェア群が非常に多くなったときにどうするか?
> >FSFと一蓮托生でいいのか。
> 明らかなプロバガンダ。GPLでリリースしたソフトウェアはFSFに支配されるようになるみたいな言い方だな。
じゃあプロパガンダを消した残りの部分はどう?


114:101
04/02/08 16:03
>>102
ありがとうございます!
Excel, Word文書の自動作成をSchemeで書いてみたかったので。

とりあえず、こんなことができました。
(require (lib "mysterx.ss" "mysterx"))
(require (lib "class.ss"))
(define excel (cci/progid "Excel.Application"))
(com-set-property! excel "Visible" #t)
(com-invoke excel "Quit")


115:デフォルトの名無しさん
04/02/08 16:11
面白そうですね.Dr. Scheme って日本語ダメポって聞くけど,文字列としてなら
Excel とかに渡せるのかな?その辺が可能なら Dr. Scheme インスコしてみようかな.


116:デフォルトの名無しさん
04/02/08 17:21
>>113 そもそも議論の前提がちょっと。GPLの第0項を引用しておく。

0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.

著作権保持者でなければGPLに出来ない。PDSには著作権保持者がいないのでそ
のままGPLではリリースできない。GPLに限らずライセンスは通常、著作権保持
者との契約なので、PDSに無改変のままでライセンスを付けるのは問題がある。

もう一つ考えとく必要があるのは、日本のように著作権を完全には放棄できな
い国があること。アメリカで権利を放棄して著作権表記をしなくても、同じも
のが日本の法律では著作権が自動的に発生して保護の対象になる。

Lisp関係では書き手が研究者のことがままある。研究者にはええかげんな人間
が多い。著作権表記がないものでも、ヒモつき研究活動の成果で実は著作権保
持者は勤務先なんてことがありがち。だから、ホントにPDSかは不安。GPL で
も修正BSDでも何でもいいからライセンス付けてくれれば善意の第三者ぶれる
ので少しは安心。

# あ~、不安になってきた。明日勤務先の規定調べないと。確か委託研究以外
# はコピーライト俺でいいはずなんだけど。


117:デフォルトの名無しさん
04/02/08 17:59
>cmuclの成果だけ持って来て、ライセンスだけGPLにして定期的にリリースするとかできるでしょ?
...
>なんか陰謀説みたいな話だけど、単純にcygwinかreadline使いたい人は使えばいいし、それを
>配布したい人は、GPLかLGPLでcmuclをフォークすればいいだけでしょ? だれもだれかを制限しようと
>なんてしていないでしょ?
それを"出来る"(=GPL/LGPL/BSD...に出来る)というのはお前の云う通り。
しかし、例えば、誰かが"cmuclをcygwinに移植しようかな"と言い出したとき、技術がそこそこあってそれが可能な人達というのは
まさにcmuclプロジェクトの彼らのことだろ(他にもたくさんいるだろうが、まず注目されるの彼ら)。
cmuclが現在パブリックドメインであることはこれ(=cygwinに移植しようかな)を多少なりとも足踏させる結果になっただろ?
可能論じゃなくって実際にそれをやる人が居るかを考えたときに、cmuclがオープンソースであることとcmuclがパブリックドメインであることには意識の違いが出てくると思わないか?

>じゃあプロパガンダを消した残りの部分はどう?
とりあえず
>>FSFと一蓮托生でいいのか。
についてはっきりと釈明しろと。で、これ
>これから、もしGPL, LGPLと互換性がないソフトウェア群が非常に多くなったときにどうするか?
別に何もしないでしょ。何か問題になる?
これまでの資産は
URLリンク(sourceforge.net)
莫大にあるというのに。


118:デフォルトの名無しさん
04/02/08 18:00
ライセンス話ウザイ。

119:117
04/02/08 18:02
>もう一つ考えとく必要があるのは、日本のように著作権を完全には放棄できない国があること。
これは忘れてたな。そういえばsourceforge.jpにはpdsがなかったなあ。

これって、もしかしてcmuclプロジェクトに参加できない...ってことじゃないよな。


120:デフォルトの名無しさん
04/02/08 18:04
ライセンスの話でlispがスレが埋まる現状はちょっと.....

頼むから、お 前 ら C o m m o n L i s p の 話 題 に 戻 ってくれ。
スレが伸びてもライセンスについての議論じゃあ、lispスレとしての価値がない

↓新鮮な話題を希望

121:デフォルトの名無しさん
04/02/08 18:29
>>112
CVSに入ってるnqueenが面白いですよ

122:デフォルトの名無しさん
04/02/08 18:42
S c h e m e の 話 題 に 戻 っ て く れ

>>121
マンセーこいつぁ面白そうだ。最初っからこのくれー宣伝汁 !
でもまだ Anonymous CVS はないのか。今後に期待~

123:デフォルトの名無しさん
04/02/08 18:45
---新鮮な話題---

新しいlispの実装ができましたよ。
(defun lisp ()
(loop
(format t "~%* ")
(prin1 (eval (read)))))


124:デフォルトの名無しさん
04/02/08 18:49
cygwin上のgaucheとWindowsのapacheでWilikiを動かすと
書き込みのときに
unbound variable: alist-delete
って出るんですけど 対処法ありますか?
(リロードすると書き込めてるんですが・・・)

125:デフォルトの名無しさん
04/02/08 18:50
誰か解答求む

126:デフォルトの名無しさん
04/02/08 18:52
あります

127:デフォルトの名無しさん
04/02/08 18:57
教えてください

128:124
04/02/08 19:01
wilikiのdb.scmの
(define-module wiliki.db
(use srfi-13)
の部分に
(define-module wiliki.db
(use srfi-1)
(use srfi-13)
てやったら オケーぽいけど
これでいいのかな?

129:92@Vim%Chalice ◆r6EONKKhcc
04/02/08 20:33
藻前らこっちにきなさい

ライセンスあれこれ
スレリンク(unix板)

たまたま別スレの都合で数日前に書き込んだんですけど.

130:デフォルトの名無しさん
04/02/09 19:09
>>129
誤爆? 宣伝?

131:
04/02/10 19:06
(define make-structure
(lambda (n) (lambda (d) (lambda (m) ((m n) d)))))
(define select
(lambda (c) (c (lambda (a) (lambda (b) a)))))

の意味がいまいちわかりません。
例えば、
(select ((make-structure (+ 7 5)) (- 9 3)))
とした時のラムダ計算の課程を教えてくれませんか。

132:デフォルトの名無しさん
04/02/10 19:17
>>131
n := 7 + 5 => 12
d := 9 - 3 => 6
c := (lambda (m) ((m 12) 6)) => #<closure>
m := (lambda (a) (lambda (b) a)) => #<closure>
a := 12 => 12
b := 6 => 6
=> 12


133: 
04/02/10 19:38
>>131
ありがとうございます、ホントに。助かりました。

134:デフォルトの名無しさん
04/02/11 20:29
.net系でlisp.netみたいなものってないの?
誰か作ってそうなもんだが。

135:デフォルトの名無しさん
04/02/11 20:50
URLリンク(common-lisp.net)

136:デフォルトの名無しさん
04/02/11 21:26
これのことですか.

URLリンク(dotlisp.sourceforge.net)

Activity Percentile (last week): 19.2626%

137:デフォルトの名無しさん
04/02/12 02:48
ecl をインストールしてみた。ドキュメントに書いてあるように hello world の
スタンドアローンプログラムを作ってみたら約 3MB の実行ファイルが出来た @
Mac OS X. こんなもんかな。

ところで、数ある Lisp レベルのスレッドの実装ってマルチプロセッサ下でどの位
スケールする物なのでしょうか? 実装依存 && 環境依存でしょうか。

138:デフォルトの名無しさん
04/02/12 04:00
clisp と ecl をたらいまわし簡易ベンチで比較してみました。ソースはここから。

最速スクリプト言語決定戦!
スレリンク(tech板)

結果)
非コンパイル:
clisp tarai.lsp 101.07s user 0.36s system 96% cpu 1:44.59 total
ロード -> コンパイル -> 実行:
clisp -C tarai.lsp 9.30s user 0.03s system 99% cpu 9.380 total
コンパイル済:
clisp tarai.fasl 9.28s user 0.06s system 99% cpu 9.342 total

ロード -> コンパイル -> 実行:
ecl -load tarai.lsp 67.55s user 19.54s system 93% cpu 1:33.05 total
コンパイル済:
./taraiecl 1.89s user 0.05s system 100% cpu 1.935 total

バージョンとか)
gcc (GCC) 3.3 20030304 (Apple Computer, Inc. build 1495)
GNU CLISP 2.32 (2003-12-29) (built 3285246448)
ECL (Embeddable Common-Lisp) 0.9c

139:デフォルトの名無しさん
04/02/12 07:51
>>137
C で書いたプログラムを動かすには C のランタイムが必要だ。
Java で書いたプログラムを動かすには java のランタイムが必要だ。
Lisp で書いたプログラムを動かすには Lisp のランタイムが必要だ。
で、通常 C のランタイムはシステム標準で付いてくるので意識する人が
少ないだけ。

寡聞にして Lisp レベルのスレッドの実装が複数あるとは知らなかった。
商用 Lisp は大抵 OS のネイティブスレッドだろうしなぁ……。まぁ
Lisp レベルのスレッドだとあんまりマルチプロセッサだから~とか
期待しないほうがいいんじゃないかな。ネイティブスレッドのほうが
どう見ても有利だろう。

140:デフォルトの名無しさん
04/02/12 08:06
>>139
>寡聞にして Lisp レベルのスレッドの実装が複数あるとは知らなかった。
すんません。嘘書きました。CMUCL 以外の処理系がネイティブである
事をあまりにも強調してるので、混乱してました。

>商用 Lisp は大抵 OS のネイティブスレッドだろうしなぁ……。まぁ
>Lisp レベルのスレッドだとあんまりマルチプロセッサだから~とか
>期待しないほうがいいんじゃないかな。ネイティブスレッドのほうが
>どう見ても有利だろう。
御意。

ファイルサイズの件について、ECL はデフォルトで共有ライブラリ化
されるみたいなので Mac 以外でも試してみます。現状でも特に不満は
無いです。

141:デフォルトの名無しさん
04/02/13 14:31
URLリンク(boost.cppll.jp) キモッ

142:デフォルトの名無しさん
04/02/13 15:46
>>141
俺にゃぁこーゆうのは複雑怪奇に見えるが,それでも、lisp よりはマシだとか思う
人も多いのだろうな。


143:デフォルトの名無しさん
04/02/13 16:12
GNUがm4なんて捨ててGuileをGNUツールの中心に据えるなんて話を
大分昔に聞いたんだけど、どうなったんだろう。親分の思惑とは
離れて、LISP嫌いのUNIXユーザが多すぎるんだろうな。arcなんてのも
最近は更新されてないし。

144:デフォルトの名無しさん
04/02/13 16:17
多過ぎるって程でもないんじゃないのかな。elispは結構使われてるし。

145:デフォルトの名無しさん
04/02/13 16:21
>>141
##の使い方見てて切なくなった(w

146:デフォルトの名無しさん
04/02/13 19:34
俺は元大したことないLisper。CLOSなんかでprogramming。
今はC++のtemplateを使ったgeneric programmingに萌え。

147:デフォルトの名無しさん
04/02/13 23:00
漏れは大したことのないC++コード書き。template使ってgeneric&generativeなprogramming。
最近興味本位で触ったLispのマクロにくらくらしてる。

148:デフォルトの名無しさん
04/02/14 08:20
リストが循環構造かどうか、って判定する方法ある?
いちいち全部比較してくよりは、GCのマーク&スイープみたいに
マーク付けながら辿っていった方がいいかな。

149:デフォルトの名無しさん
04/02/14 08:37
>>148
hare and tortoise

150:デフォルトの名無しさん
04/02/14 15:30
"tortoise and hare" algorithm は
guile/libguile/list.c の scm_ilength() を見たらよいよ。

151:デフォルトの名無しさん
04/02/14 23:02
SICPの例題をこなすのにお勧めのSchemeの処理系はありますか?
環境は、Win2000 です。

152:デフォルトの名無しさん
04/02/14 23:52
何でもいいに決まってる。

153:デフォルトの名無しさん
04/02/15 01:43
>>151
DrSceme が簡単でいいんじゃないの?
cygwin + gauche という手もあるけど。

154:デフォルトの名無しさん
04/02/15 02:44
>>153
漏れ、最初DrScheme使ってt-y-schemeやったけど、
売りのトレースとかが、初心者モード(ほとんど何にもできない)でしか使えなくて泣いた。


155:デフォルトの名無しさん
04/02/15 03:02
>>151
SICPのサンプルコードはSCMかMIT-Schemeだった気がするので、
Cygwinで動くようならこれが無難?

win2kならPetite Chez + ChezEditも良いかもしんない。

156:151
04/02/15 11:17
MIT-Schemeってこれ URLリンク(www.gnu.org) ですか?
Windows binary 版をインストールしてみました。
EDwinって言うEmacs見たいなエディタも付属してます。

つか、殆どEmacs。。。
Lisp/Scheme やるには Emacs も覚えなあかんの。 _| ̄|○

Schemeの処理系って小さいイメージがあったけど
MIT-Schemeって一式で35Mbyteもあるのね。

157:デフォルトの名無しさん
04/02/15 11:42
>Emacs も覚えなあかんの。 _| ̄|○
Win環境の人からすると異常だけど、
UNIXのソフトって全体的にemacsのキーバインドに沿ったものが多いからね。


158:デフォルトの名無しさん
04/02/15 14:16
>>156
さあ、*nix文化へいらっしゃい。
今までM$に飼い頃されてたのはなんだったんだ、と開眼するから。

159:デフォルトの名無しさん
04/02/15 15:31
vi>>>>>>>>>>>>>>>>>>emacs

160:デフォルトの名無しさん
04/02/15 15:57
秀丸>>>>>>>vi

161:デフォルトの名無しさん
04/02/15 16:07
Emacs>>>>>秀丸

さてどうしよう。

162:140
04/02/15 18:55
Scheme についても調べてみました。ネイティブコードコンパイル可能な処理系では、chicken と
mzScheme は Lisp レベルでの thread みたいでした。RScheme はサイトが落ちていて不明。

ECL で --enable-threads するとビルド出来ない(最新 CVS 版)のですが、Linux 限定なのかな。

163:デフォルトの名無しさん
04/02/15 20:13
>>157, 158
一応、vi (ex, ed) は使えるんですけどね。漏れって vi 信者。w
などと言いながら emacs のマニュアル本買って来ました。




164:デフォルトの名無しさん
04/02/15 21:15
Kahua セミナー逝った香具師、レポートしてください。
地方在住 lisper は逝きたくても逝けないのです。おながいします。

165:デフォルトの名無しさん
04/02/15 22:31
>>158
ウイソのプログラムでメシを食ってる漏れとしてはそんな事は口が裂けても・・・


166:これってどうよ?
04/02/16 10:40
Pythonによるcommon lispのフロントエンド "lython"
URLリンク(www.caddr.com)

スラドの記事
URLリンク(slashdot.jp)



167:デフォルトの名無しさん
04/02/16 11:30
あくまで、Common Lisp風ね。だからScheme風といってもいいだろうし。
(import os)

(:= out "/tmp/lythontest")
(if (os.path.exists out)
    (os.unlink out)
  (print "target file does not exist"))

(:= f (open "/tmp/lythontest" "w+"))
(f.write "Hello World from Lython!")

168:デフォルトの名無しさん
04/02/17 05:50
pythonのライブラリが使えるlispモドキかな。
ちょっと前に話になったスクリプト云々の話は
これに食われそうだね。
ポータブルな実装としてはベースがpythonなら問題ないだろうし。

169:デフォルトの名無しさん
04/02/17 14:26
前も話題に出たけど、pythonと共存できて何か意味あるのか?

速度: pythonはバイトコード
ライブラリ: pythonよりもC/C++のライブラリの方が膨大


170:デフォルトの名無しさん
04/02/17 14:49
> ライブラリ: pythonよりもC/C++のライブラリの方が膨大

FFI が面倒なので Python のライブラリでウマーって事でしょう.
まぁ,中途半端な Lisp モドキよりは普通に Python 使ったほうが
いいような気がしますがね…

171:デフォルトの名無しさん
04/02/17 16:09
#define BEGIN { と似たような一抹の虚しさがただような。
ライブラリを手軽に使うのだけが目的なら、Common LispかSchemeと言語仕様を同じにしなくちゃね。
ただ、ここから新しい言語として羽ばたかせようというなら話は別だけど。
Arcみたいにね。

まぁ、ただ面白そうだからやってみたんだろうけど。

172:デフォルトの名無しさん
04/02/17 16:32
おまえらこんなとこでケチつけてないで、今 後 に 期 待 し と け

173:デフォルトの名無しさん
04/02/17 16:47
>>172 そんな言い方じゃ、話が面白くならないよ。今後に期待できるようなことは何かあるの?

174:デフォルトの名無しさん
04/02/17 16:57
pythonが超ポピュラーになってライブラリが暴発的に増えるとかいう展望を抱けw

175:デフォルトの名無しさん
04/02/17 17:10
lythonダウンロードしてみました。ウェブサイトやコードを見た限り、まだまだ、
孵化する日は先で、生まれたてのホヤホヤという感じです。

みんなが作るのが好きな俺Lispの1つですね。

しかし、よくSlashdotが取り上げたね。それが悪いというわけじゃないけど。

176:175
04/02/17 17:13
あっ、つけるの忘れてた。最後にwをつけて読んでください。

177:デフォルトの名無しさん
04/02/17 17:37
(´-`).。oO(孵化してないのに産まれたて。。。)

178:デフォルトの名無しさん
04/02/17 17:41
(・A・)lython!!

179:デフォルトの名無しさん
04/02/17 22:46
大蛇は卵生だから、産まれてから孵るまで時間がかかるんじゃないの。

しかし、インデントのかわりにS式使ってる感じだね。

そういえば、Parrot上のSchemeはどうなったんだろ。Parrot自体が資金ショー
トという噂も聞いたこともあるけど。


180:デフォルトの名無しさん
04/02/18 01:45
えーとguileやgaucheは「組み込みLispライブラリ」としての用途も意図されているわけですが,
実際に組み込むためのHOWTO文書とかチュートリアルってあります?
けっこう検索したんだが見付からない.

guileを組み込んだGNUプロジェクトのアプリはいくつかあるけど,大き過ぎて見る気がしない.
なんか「Schemeで拡張できるtail(1)を作ってみました」みたいな文書ないもんですかね.

181:デフォルトの名無しさん
04/02/18 11:00
>>180 guileの現状は知らないんですが、すこし前までは、guile自体の発展速度が
速すぎて、非互換な変更とかがけっこうあって、アプリに組み込んだ人が苦労した
という話がありました。とかいうふうに一度、レッテルを貼られると、それを取り除く
のに苦労しますよね。GNUはマニュアルをちゃんと書く習慣があると思うんだけど、
guileのマニュアルにアプリへの組み込みチュートリアルないのかな?

>>179 つーか、Parrotをやってる人たちって金もらっているのですか?
ParrotがJVMレベルのバーチャルマシンとしてみんなに認められれば、オモロ。

182:デフォルトの名無しさん
04/02/18 17:14
>>181
とりあえず去年の今ごろのParrot/Perl6の紹介には金が足りないというのがあっ
た。URLリンク(www.newsfactor.com)

CVSにはscheme用もあったけど動くのか不明。ぱっと見、まだ途中かなという
感じがした。H"なんで下して試す元気がないから、誰が試してくれるとうれし
い。

;; 遅れぎみ(婉曲的な表現)なんで、逆に誰かがどれでもいいから別のVM上に
;; Perl6を実装しちゃえば英雄になれるかも。


183:180
04/02/19 01:04
>>181
GuileのinfoのPart 3がそれっぽいんですが,どうもイマイチ実感が...
マトモなサンプルになってないんですよ.
ドローソフトの組み込みにするために,いかに「図形」をSchemeオブジェクトとして
Cレベルで定義するかが主眼らしいんだけど.
そんな高尚なことよりとりあえずS式の設定ファイルを読みたいだけなのにな.
ま,がんばったらできそうなので文書にするかも.

184:デフォルトの名無しさん
04/02/19 19:52
>>180
Gaucheはドキュメントはまだ無いみたいだけど、インタプリタであるgoshが
「Gaucheライブラリのサンプルアプリ」という位置付けらしいのでソース見るのが早い。
goshはlibgaucheを初期化してrepl起動してるだけだから本当に小さいし。

185:デフォルトの名無しさん
04/02/20 23:00
Gauche0.7.4.1 で gdbm はどうやって使うのでしょうか。
gdbm.so が ext/Makefile から外されてる
gdbm.c はコンパイルできない。エラー多すぎ
までは調べました


186:デフォルトの名無しさん
04/02/20 23:04
半分解決

ndbm 使うと perl コンパチのファイルができたみたい・・
なので gdbmは不要となりました。


187:デフォルトの名無しさん
04/02/20 23:18
確か、configure時にgdbmの存在をチェックしてると
思うので、それが見つけられていないのでは。
gdbmが/usr/localとかにインストールしてあるなら、
./configure --with-local=/usr/local みたいにするとか。


188:デフォルトの名無しさん
04/02/21 00:11
恐れ入ります。
config.log 見て納得しました。
perl は p5-GDBM 入れないと駄目なんですね。
gdbm はあまり使われてないと。


189:デフォルトの名無しさん
04/02/21 11:11
multiple-value-bind の属性リスト版を書いたんですけど、
どうやったら gensym を使うように改良できますか?

使い方は、(setq alist '((a 2) (b 3))) と代入しておいてから
(alist-bind alist (print (+ a b)) (* a b)) を評価すると、
5 を印字してから 6 を返すような関数です。

現状はこんな感じです。
(defmacro alist-bind (alist &body body)
 (let ((alist-bind-internal-variable (eval alist)))
  `(multiple-value-bind
   ,(values (mapcar #'car alist-bind-internal-variable))
  ,(cons 'values (mapcar #'cadr alist-bind-internal-variable))
   ,@body)))
バッククオートを入れ子にして使うのがどうしてもうまくいかなくて
ほかと重ならない変数名で逃げてます。実用上は問題ないんですが
もっとスマートな解決策はないものでしょうか。

190:デフォルトの名無しさん
04/02/21 11:13
>>189
>5 を印字してから 6 を返すような関数です
マクロの typo です。

191:デフォルトの名無しさん
04/02/21 12:28
>>189
ちょっとあなたのと仕様が違いますが、昔書いたものを。

(defmacro alist-bind ((&rest vars) alist &body body)
(let ((tmp (gensym)))
`(let ((,tmp ,alist))
(let ,(mapcar #'(lambda (var)
`(,var (cdr (assoc ',var ,tmp :test #'eq))))
vars)
,@body))))

(setq data '((a . 1) (b . 2) (c . 3)))

(alist-bind (b c a) data
(list b c a))
=> (2 3 1)

(macroexpand-1 '(alist-bind (b c a) data (list b c a)))
=> (LET ((#:G219 DATA))
(LET ((B (CDR (ASSOC 'B #:G219 :TEST #'EQ)))
(C (CDR (ASSOC 'C #:G219 :TEST #'EQ)))
(A (CDR (ASSOC 'A #:G219 :TEST #'EQ))))
(LIST B C A)))

192:189
04/02/22 22:00
>>191
let の変数定義をマクロ展開の結果に置き換えるマクロを書くわけですね。
勉強になります。alist-bind がレキシカルコンテキストを参照できるので、
こちらの方が優れてますね。その代わり、vars に与える変数一覧を事前に
与えないといけないので、今やりたい用途には使えないですね。

いま欲しいのは、destrucuring-bind の複数版で、1個の値に対して
パターンを複数与えることができるようなマクロです。最初のパターンに
うまくマッチしなければ次のパターンを試し、マッチしたパターンがあれば
そこで変数を束縛して、対応する式を順次評価して最後の式の値を返すと
いうような物です。最後のパターンにもマッチしなかったばあいは nil と
いうことで。
(let ((x 2))
 (dbind* (list (+ 3 4) 5)      ; 最初に評価して(7 5)を得る
  ((a b c) (list a b c))       ; マッチしないので実行されない
  ((a b) (incf x) (list a b x))))   ; (7 5 3) になる
というような dbind* がうまくできなくて困ってます。
まず値を集めて、後から展開するという方針が間違ってるのかもしれません。
どうしても評価のレベルが一致しないんですよね。

193:デフォルトの名無しさん
04/02/22 22:20
先に進んじゃってるとろスマンけど、>>189 ってちゃんと動くのか?
(setq alist '((a 1) (b 2)))
(alist-bind alist (print (+ a b)) (* a b))
とかいたファイルをコンパイルしたら、alist-bind の展開時に
まだ alist がバインドされてないとかでエラーになるような…。

194:デフォルトの名無しさん
04/02/22 23:00
>>192
パターンが単純であればこんな感じかな?
destructuring-bind と同等のことがしたい場合は、
もっと複雑なことをしなければならないが。

(defmacro dbind* (list &body forms)
 (let ((vals (gensym)))
  `(let ((,vals ,list))
    (case (length ,vals)
     ,@(mapcar #'(lambda (form)
            (let ((vars (car form)))
             `(,(length vars)
              (let ,(mapcar #'(lambda (var)
                       `(,var (pop ,vals)))
                     vars)
               ,@(cdr form)))))
          forms)))))

195:189
04/02/22 23:50
>>193 やってみたら、compile-file でエラーが出ました。load したら 3 が印字されて t が
返りましたけど。>>192 がうまく動かないはそのせいなのかもしれません。

196:189
04/02/23 00:21
>>194 すみません、調べてみたら destructuring-bind よりもっと複雑な仕様でした。
例えば (dbind* '(a (2 3 4)) (('a (b 3 c)) (+ b c))) がマッチして、6 が返されます。
シンボル以外のアトムや quote されたシンボルをネストした S 式の中に書くことができ、
パターンの同じ場所に eq になるアトムが存在するときに、マッチするものと見なされます。
上の例の 3 や a がそれです。このとき、a はシンボル a に束縛されます。

197:デフォルトの名無しさん
04/02/23 01:50
>>196
ふむ、若干面倒だね。とりあえず、パターンのシンボルに
リストがマッチするものとして書いてみた。

(defun match (vars vals)
 (do ((vars vars (cdr vars))
    (vals vals (cdr vals)))
   ((or (null vars) (null vals))
    (not (or vars vals)))
  (let ((var (car vars))
     (val (car vals)))
   (unless (cond ((eq var val) t)
          ((symbolp var) t)
          ((atom var) nil)
          ((eq (car var) 'quote)
           (eq (cadr var) val))
          ((atom val) nil)
          (t (match var val)))
    (return)))))

198:197
04/02/23 01:50
続き

(defmacro dbind* (list &body forms)
 (let ((dummy (gensym))
    (vals (gensym)))
  (labels ((bind (vars vals)
        (mapcan #'(lambda (var)
              (cond ((atom var)
                 `((,(if (symbolp var) var dummy)
                   (pop ,vals))))
                 ((eq (car var) 'quote)
                 `((,(if (symbolp (cadr var)) (cadr var) dummy)
                   (pop ,vals))))
                 (t (let ((temp (gensym)))
                   `((,temp (pop ,vals))
                    ,@(bind var temp))))))
            vars)))
   `(let ((,vals ,list))
     (cond ,@(mapcar #'(lambda (form)
               (let ((vars (car form)))
                `((match ',vars ,vals)
                 (let* (,@(bind vars vals))
                  ,@(cdr form)))))
             forms))))))

199:デフォルトの名無しさん
04/02/23 05:51
Gauche0.7.4.1をインストールして
(string-concatenate-reverse '(" must be" "Hello, I") " going.XXXX" 7)
っていう式を評価させたらエラーになったんだけど、
SRFI-13ではそういう実装も許されてるの?
それともインストール失敗しただけ?

200:デフォルトの名無しさん
04/02/23 06:21
>>199 バグじゃん? wilikiにでも報告するよろし。


201:デフォルトの名無しさん
04/02/23 18:37
perlのスクリプトとをgaucheに移植してるんだけど
perlとgaucheの対応表なんてどっかにありませんか。
とりあえず
open(STDERR, ">&STDOUT")
$| = 1
$!
がわからない。


202:デフォルトの名無しさん
04/02/23 22:40
>>199
URLリンク(www.shiro.dreamhost.com)
optionalついてないのがGaucheでの仕様なんじゃないの?

203:デフォルトの名無しさん
04/02/25 19:07
つーかトランスレーター作ろうぜ
perlよくわからない

204:デフォルトの名無しさん
04/02/25 20:51
Perl を勉強して書き直すほうがためになるよ。きっと。

205:デフォルトの名無しさん
04/02/25 21:07
Perlを知らずにトランスレータもないだろうに

206:デフォルトの名無しさん
04/02/26 00:12
>>201
$| = 1 と $! の例を強引に考えてみた(dup は不明)。詳しい人のフォロー希望。

(with-error-handler
(lambda (e) ;; e は例外オブジェクト($! のようなもの)
(format (current-error-port) "ERROR: ~a¥n" (ref e 'message)))
(lambda ()
;;(with-input-from-file *program-name* ;; 正常パターン
(with-input-from-file "nowhere file" ;; エラーパターン
(lambda ()
(set! (port-buffering (current-output-port)) :full) ;; $| = 1 ?
(port-for-each
(lambda (line)
(display line)
(newline))
read-line)))))

C がわかるなら、リファレンスの C と Scheme の対応一覧が役に立つかも。

207:デフォルトの名無しさん
04/02/26 10:34
勘で。

----
$|=1;
open IN, "foo.pl";
print while (<IN>);

-----
(call-with-input-file "foo.scm"
(lambda (in) (copy-port in (current-output-port)))
:buffering :none)


208:こゆことかな...?
04/02/26 11:29

------------------------------
#!/path/to/gosh

(display "Content-type: text/plain\r\n\r\n")
(display "Test.\r\n")

(with-error-handler (lambda (e) (print #`"***ERROR: ,(ref e 'message)") (exit 1))
(lambda () (with-input-from-file "no_such_file" (lambda () (print "File opend.")))
))

------------------------------
#!/path/to/perl

open(STDERR, ">&STDOUT");
$| = 1;

print "Content-type: text/html\n\n";
print "This is a test.<BR>";

open(IN, "no_such_file") || die "***ERROR: ", $!;
close(IN);


209:デフォルトの名無しさん
04/02/26 15:25
恐れ入ります。
簡単に行かないというのがわかりました。
dup と flush は gosh本体に仕込んで起動時オプションで処理する。
$! もグローバル変数に組み込んでしまうのが簡単か


210:デフォルトの名無しさん
04/02/27 00:11
別の言語なんだし全部直訳はできないのは当然じゃん。
いろいろ解説してくれた人がいたんで代わりにまとめ。

open(STDERR, ">& STDOUT") なら
(with-error-to-port (current-output-port) THUNK)

$| = 1 じゃなくて autoflush を使うべきなんで
((setter port-buffering) PORT :none)

$! でメッセージが欲しいのなら with-error-handler
でエラーをキャッチして (slot-ref ERR 'message)。
これは eval で die をキャッチするのをイメージ。


211:189
04/02/27 08:09
>>197-198
ありがとうございました。遅くなりましたが、自分の欲しい内容への改造が
やっとできたのでお伝えします。
比較対象がアトムやquoteされたアトムの場合の動作を改善するため、
トップレベルだけを別扱いにすることにしました。
(defun match0 (vars vals)
(cond ((symbolp vars) t)
((atom vars) (eq vars vals))
((atom vals)
(and (eq (car vars) 'quote) (null (cddr vars)) (eq (cadr vars) vals)))
((eq (car vars) 'quote) nil)
(t (match vars vals))))
という関数を追加し、dbind* の labels で定義している局所関数にも
((bind0 (vars vals)
(cond ((atom vars) (if (symbolp vars) `((,vars ,vals))
`((,dummy ,vals))))
((eq (car vars) 'quote) `((,dummy ,vals)))
(t (bind vars vals))))
という定義を追加します。そして dbind* 末尾から3,4行目の
`((match ',vars ,vals)
(let* (,@(bind vars vals))
をそれぞれmatch0, bind0 の呼び出しに置き換えます。

動作の変わった例としては、以下のようなものがあります。
(dbind* 3 ((4) 5)) ; エラーにならずにnilを返すようになった
(dbind* '(3 7) (any any)) ; (3 7) を返すようになった
(dbind* '(3 7) ('any t) ; 7 を返していたのがnilを返すようになった

212:嵩
04/02/27 16:48
131 : :04/02/10 19:06
(define make-structure
(lambda (n) (lambda (d) (lambda (m) ((m n) d)))))
(define select
(lambda (c) (c (lambda (a) (lambda (b) a)))))

の意味がいまいちわかりません。
例えば、
(select ((make-structure (+ 7 5)) (- 9 3)))
とした時のラムダ計算の課程を教えてくれませんか。

132 :デフォルトの名無しさん :04/02/10 19:17
>>131
n := 7 + 5 => 12
d := 9 - 3 => 6
c := (lambda (m) ((m 12) 6)) => #<closure>
m := (lambda (a) (lambda (b) a)) => #<closure>
a := 12 => 12
b := 6 => 6
=> 12

となっているけど、もう少し詳しく説明できる人いますか?
ラムダ計算が今一よくわからないもんで。

213:デフォルトの名無しさん
04/02/27 16:54
>>212
詳しく説明できるが

聞 き 方 が 気 に 食 わ な い

214:デフォルトの名無しさん
04/02/27 17:09
関数適用で束縛変数を引数で置き換えればいいんだよ。

215:デフォルトの名無しさん
04/02/27 17:18
make-structure = λn.λd.λm.((m n) d)
select = λc.(c λa.λb.a)

(select ((make-structure (+ 7 5)) (- 9 3)))
= (select ((make-structure 12) 6))
= (select ((λn.λd.λm.((m n) d) 12) 6)) ; nを消す
= (select (λd.λm.((m 12) d) 6)) ; dを消す
= (select λm.((m 12) 6))
= (λc.(c λa.λb.a) λm.((m 12) 6)) ; cを消す
= (λm.((m 12) 6) λa.λb.a) ; mを消す
= ((λa.λb.a 12) 6) ; aを消す
= (λb.12 6) ; bを消す
= 12

216:デフォルトの名無しさん
04/02/27 23:36
私はslot-refでCLOS止めました
letで囲めばいいじゃん!

217:デフォルトの名無しさん
04/02/28 02:39
なんか物凄い基本的なことかもしれないですが、
Schemeの末尾再帰の動きが良くわからないのです。
どなたか教えてくださいませんか

(define fact-tail
(lambda(n x)(if( (= n 0) x
(fact-tail(- n 1)(* n x)))))

階乗を求めようとしているのはわかりますが、
これに対して、(fact-tail 5 1)
を与えたら何で120が導けるのかいまいちわからないです。

(fact-tail 3 1) として
どういう風に再帰展開されるのかわかるかた
教えていただけませんでしょうか。

218:デフォルトの名無しさん
04/02/28 02:48
>>217
1ステップずつ考えれば分かるだろ

219:デフォルトの名無しさん
04/02/28 02:50
>>217
(fact-tail 3 1)
(fact-tail (- 3 1) (* 3 1))
(fact-tail 2 3)
(fact-tail (- 2 1) (* 2 3))
(fact-tail 1 6)
(fact-tail (- 1 1) (* 1 6))
(fact-tail 0 6)
(= n 0) が真になるので 6 を返す

末尾再帰は C などの for ループと本質的に同じ
int fact(int n){
    int x=1;
    for(; n--; 0!=n) x*=n;
    return x
}

220:217
04/02/28 03:05
>>219
ありがとうございます。ぼけてました。引用もとの文には
(if (= n 0) x
と書いてあるのに手持ちのメモに
(if (= n 0) 1
と書き写してしまいそっちをみていてはまってしまいました
すっきりしました。おさわがせしてすみません。

221:217
04/02/28 03:11
>>219
引用元はSoftwareDesign の2000年9月号のScheme特集でした。
「末尾再帰を使うとスタックを消費しない」
と書いてあったけどイメージしにくかったんですが
for ループに対応してると考えるとわかりやすいですね。

222:デフォルトの名無しさん
04/02/28 11:34
繰り返しを末尾再帰に直すと、変数代入の様な
明示的副作用を書なくて良いというのがあって、
Schemeではset!をほとんど使わずにコードが書ける。


223:デフォルトの名無しさん
04/02/28 12:18
schemeに限ったことじゃないような。
まあ、"俺Lisp"的な実装はは末尾再帰最適化がなかったりするけど。


224:デフォルトの名無しさん
04/02/28 13:18
>>223
Schemeは言語仕様上いつでも安心して使えるってことだよ。
例えばtail recursionがproperじゃないCommonLispで
「常に末尾再帰を意識しながら書く」って奴がいるとも思えないが。


225:デフォルトの名無しさん
04/02/28 15:41
>>216
言いたい事が良くわかりまらないんだが with-slots あたりで満足ですか?

>>224
大抵のプログラマは意識はしてると思いますが。
末尾再帰の話が出てこない CL の入門書は見たことないですし。
CL だと最適化オプション下げれば末尾再帰の最適化が
OFF になってデバッグしやすくなるし。

226:デフォルトの名無しさん
04/02/28 16:08
Emacs LispやCommon Lispを主に使って、Schemeはあまり使わない俺の場合だと、
再帰呼び出しが末尾にあるかどうかは最初はほとんど気にしません。

読みやすさや見ための綺麗さを優先して最初はコーディングします。

再帰を使う時は、スタックの消費量が問題になるほど、呼び出しが深くなるか
どうかには注意します。そして、CLを使っているときは、もし再帰呼び出しが
末尾位置にあれば、ああ、スタックの消費量を気にしなくてもいいかな、という
考えが頭に浮かびます。

227:225
04/02/28 16:16
> 言いたい事が良くわかりまらないんだが with-slots あたりで満足ですか?
いかん、丁寧に直したら副作用で日本語が壊れている……

>>226
末尾再帰って末尾位置に再帰があれば良いってもんじゃないんだけど。


228:デフォルトの名無しさん
04/02/28 16:22
>>227
>末尾再帰って末尾位置に再帰があれば良いってもんじゃないんだけど。
R5RSに定義されている「末尾位置」のつもりだったんですけど?


229:デフォルトの名無しさん
04/02/28 16:45
>>227
> 言いたい事が良くわかりまらないんだが with-slots あたりで満足ですか?
あんた、いい人だ!
でもgoshに無いのでやっぱりCLOS止め

230:デフォルトの名無しさん
04/02/28 16:54
>>228
スマン。末尾位置ってはじめて聞いたもんで。tail context の事なのか?

>>229
なんだそりゃ! 無いならお前が作れ!

231:デフォルトの名無しさん
04/02/28 17:07
>>230
> tail context の事なのか?
そうです。不正確でしたね失礼しました。今、R5RSで確認したんですけど、
tail contextが正しい用語みたいですね。覚えておこう。ちなみにtail contextの
日本語定訳はあるのかな?

gaucheでゴーシュ。俺はしばらく「ガウチェ」と発音していたよ。

232:デフォルトの名無しさん
04/02/28 17:07
>>225
末尾呼び出しを思いっきり使えるかどうかって、
コーティングスタイルがまるで変わってくると思うんですが、

>URLリンク(www.swiss.ai.mit.edu)
(define (cpstak x y z)
 (define (tak x y z k)
  (if (not (< y x))
    (k z)
    (tak (- x 1)
       y
       z
       (lambda (v1)
        (tak (- y 1)
          z
          x
          (lambda (v2)
           (tak (- z 1)
              x
              y
              (lambda (v3)
               (tak v1 v2 v3 k)))))))))
 (tak x y z (lambda (a) a)))
;;; call: (cpstak 18 12 6)

たとえばこういう内包挟んだ末尾再帰もCommonLispコンパイラが
ちゃんと末尾として認識するのかなと。

233:デフォルトの名無しさん
04/02/28 17:18
>>230
いや、おれは「letで囲めば良い」を布教させる事に全力を傾けたい
だから、もう一度、キョンキョンにこの歌を歌ってもらおう

(キョンキョン)おまえら!一緒に歌ってくださーい

♪defineの次に、letで囲めばぁー
いーじゃん♪ (見逃してくれよー)
いーじゃん♪ (見逃してくれよー)

♪作ったlambdaの引数はいつもこれ→(msg . args)
いーじゃん♪ (メッセージ送れよー)
いーじゃん♪ (メッセージ送れよー)


(キョンキョン)よし、分かったな。じゃあ解散!

234:デフォルトの名無しさん
04/02/28 17:22
↑バカ?

235:デフォルトの名無しさん
04/02/28 17:24
>>232
大抵のコンパイラは普通に認識するよ。

236:デフォルトの名無しさん
04/02/28 17:25
徹夜で気でも狂ったか?

237:デフォルトの名無しさん
04/02/28 17:30
ワロタ

238:デフォルトの名無しさん
04/02/28 17:32
>>232 俺はこういうコーディングは思いつかないと思うけど、schemerの人って
こういうコーディングをよくするの? 見ためは、綺麗だよね。

239:デフォルトの名無しさん
04/02/28 17:37
>>232
そういうコードが安心して使えるかどうかっていうと駄目だろ。
CommonLispはコンパイラの最適化って点でインプリメンタの気まぐれなわけだし。
コーティングスタイルにまでは及ばない。

240:デフォルトの名無しさん
04/02/28 17:39
>>238
CPS(232みたいなk=continuationを渡していくやつ)はよく使うよ。

241:デフォルトの名無しさん
04/02/28 17:40
♪defineの次に、letで囲めばぁー

242:デフォルトの名無しさん
04/02/28 17:41
春はまだ先だぞ

243:デフォルトの名無しさん
04/02/28 17:44
最適化部分は処理系依存なだけで。 C とかだって最適化は規格で決まってなくても
プログラマは処理系のマニュアル見て安心して使うだろう?末尾再帰の最適化が完全
に良い事づくめなら Scheme みたいに規格で決めちゃってもいいかもしれんけど,デ
バッグがやりにくくなるからなぁ……

でも普通は処理系が対応してりゃ安心して使えるだろう。大抵のコンパイラは末尾再
帰の最適化機能を備えているわけだ。以前 c.l.l でも出ていたがやっぱ最適化オプ
ションに「末尾再帰の最適化」を設けるべきだろうなぁ。規格以外は一切使わないと
いうポリシーもありだと思うけどね。

244:sage
04/02/28 17:45
(見逃してやれよー)

245:デフォルトの名無しさん
04/02/28 17:55
>>243
デバッグがやりにくくなる?
どんなデバッグしてるのさ
ログ出すだけじゃないの?

246:デフォルトの名無しさん
04/02/28 18:40
アセンブラ出力しておっかけてるんだろ

247:デフォルトの名無しさん
04/02/28 18:56
xyzzy で tail recursion が遅いのは大変残念な思いがします.

248:デフォルトの名無しさん
04/02/28 18:56
関数トレースしたり、エラーがでたらバックトレースみたり、
スタックフレームのぞくだけだけど…。ひょっとして「ログ出す」
ってのが普通なの?漏れ Lisp の正規の教育受けてないので
常識には自身がないんだよね。

249:デフォルトの名無しさん
04/02/28 18:58
s/自身/自信/
どうやら国語も勉強しなおしたほうがいいようだ。吊ってくるわ。

250:デフォルトの名無しさん
04/02/28 19:06
所詮はエディタだし。

251:デフォルトの名無しさん
04/02/28 19:08
Lispの正規の教育受けてる人なんてほとんどいないだろ。
Java/C/C++でさえ書籍orWebの情報だけでやっていく人がたくさんいるし。

252:デフォルトの名無しさん
04/02/28 20:55
正規の教育ってなんだ?(w

253:デフォルトの名無しさん
04/02/28 21:14
>>245 のデバッグ手法を教えてください。漏れも最適化したらデバッグ用
情報が減るのは当たり前だと思ってたんだけど。Scheme では関数呼び出し
情報とかはあんまりデバッグに使わないんですか?

254:デフォルトの名無しさん
04/02/28 22:17
schemeも、トレース実行すると末尾再帰の呼び出しが
普通の再帰みたくツリー上に出るんじゃない?
デバッグでなんか大きな違いってあるの?

255:デフォルトの名無しさん
04/02/29 01:09
>>253
ログ出しについての説明か?
ループの中で変化する変数を表示するだけですが。


256:デフォルトの名無しさん
04/02/29 13:11
>>254
え、何という処理系ですか?デバッグ周りって処理系依存ですよね。
トレース実行って特定の関数だけとか全体とか指定できるんですか?
>>255
それだけじゃキツイなぁ。再帰がふか~い所でエラーな時とか。
やっぱエラーになってデバッガが立ち上がったところから手繰って
いけたほうが便利だと思いますが。私の使ってる処理系は debug レベル
を 2 以上にすると末尾再帰の最適化が行われなくなるのでエラーに
なった時点からフレームをたどっていけますが…。

257:デフォルトの名無しさん
04/02/29 13:50
traceなら処理系というかマクロでできるよ

258:デフォルトの名無しさん
04/02/29 15:53
デバッグがらみの話題で、処理の流れを目で追うことができるソースレベルデバッガが
売り物の処理系でも付いていないというのは、要望が少ないからなのかな? たしかに
バックトレースの表示などの伝統的なやり方でもデバッグできるけどね。あと、要所
要所に(format t "my-var = ~S~%" my-var)を挿入とか。俺はPerlでもこのやり方で
デバッグするね。Data::Dumperという便利なものもあるし。

俺はEmacs Lispではソースレベルデバッガであるedebugをもっぱら使ってdebugはほとんど
使ったことがない。

259:デフォルトの名無しさん
04/02/29 16:39
stepじゃ駄目なの?

260:デフォルトの名無しさん
04/02/29 16:53
>>259 いや、stepでもたぶん同じことができると思うけど、エディタでコード全体を
見渡しながらデバッグできると気持がいいんだよね。ついでに、監視したい式なんかを
複数登録しておいて常時、その値を表示させておくとか。ブレーク時に画面上で変数の
上にマウスポインタを置くだけで、値が表示されるとか。

つまり、昔かたぎの人からみれば、俺は現在のIDEに毒されているヘタレということか。プ

261:デフォルトの名無しさん
04/02/29 17:53
slimeに期待かな。
現時点でもエラー箇所の表示とか凝ったことできるし。

262:デフォルトの名無しさん
04/02/29 18:10
名前がスライムっぽくて嫌

263:デフォルトの名無しさん
04/02/29 19:34
メタルスライムがあらわれた
メタルスライムAは逃げ出した


264:デフォルトの名無しさん
04/02/29 20:05
バックトレースってデバッグでは便利だと思うんだけど Scheme の人は
要らないのかな?拾ってきたプログラムがエラー吐いてとまったときと
かバックトレースが空だとちょっと悲しいんだけど。

>>257
なんか安心して使える trace の実装とかあります?処理系によっては
付いてるみたいだけど。付いてないのも結構あるので困るんですが。

265:デフォルトの名無しさん
04/02/29 22:05
>>264
そういうのはどう転んでも処理系依存だしなあ。
いつでも外せるassertみたいなの埋め込むぐらいしか。
昔さわったminischemeのトレースはトレース対象を出力用の
フック関数で挟む方式だった。後付けマクロ。
関数突入・脱出でトレース出力するので、
トレース対象関数は自然と末尾再帰が外れて山形の出力になる。
ただし内部関数、名無し関数には使えない。


266:デフォルトの名無しさん
04/03/01 12:48
foo,bar,baz,mumble,glorp
これって何に由来してんだぁ?

267:デフォルトの名無しさん
04/03/01 13:21
>>266
foo と bar は RFC で定義されているよ

268:デフォルトの名無しさん
04/03/01 14:02
RFCは冗談も混ざっているからなぁ。

269:デフォルトの名無しさん
04/03/01 23:33
MLの有名な本より写経
A Lisp hacker says: 'Since the integers are a subset of the
real numbers,the distinction between them is wholly artificial
--foisted on us by hardware designers.ML should simply provide numbers,
as Lisp does, and automaticaly use integers or reals as appropriate.'
Do you agree? What considerations are there?

MLerはいろいろ言うだろうが、Lisperはどう答える?

270:デフォルトの名無しさん
04/03/02 00:00
なにを勿体つけてるんだ? ML for the working programmer の ex2.2
って言えばいいじゃん。翻訳もせずに丸投げなあたり宿題か何か?

まぁ実際 ML にまでそうしろと言う Lisper は少ないと思うよ。
NetNews でも ML の数値周りが気に食わないと噛み付いてた Lisper
は居たけど ML に Lisp 式の数値にしろ!とまで言うやつぁ少ないだろ。
理由はなんで ML がそうしてるかを考えればわかるだろ。

271:デフォルトの名無しさん
04/03/02 00:08
まあ、そう熱くならんでも。
型無しのありがたみって何だろうな、というネタフリなんよ。

272:デフォルトの名無しさん
04/03/02 00:36
本からのコピペ程度でいちいち age るのがウザイんだよ。
ML スレでやれば?型無しのありがたみは無いってことでいいからさ。
デバッグ方法が聞けてウマーと思ってたのに、そんなつまらんネタ振るな。
だいたいここは Lisp 総合スレなんだ、型有りの Lisper 連中からすりゃ
ハァ?って話題だろーが。全部の LISP 型無しという狭い見識をなんとか
してから出直してきてくれ。

273:デフォルトの名無しさん
04/03/02 00:37
dat 落ちした前スレを html 化してもらいました。

LISP Scheme Part9
URLリンク(ruku.qp.tc)

274:デフォルトの名無しさん
04/03/02 12:24
強い型付けのないSchemeのような言語には
良いところもあるよなぁ、ということを言いたかった
だけなんだがなぁ...


275:デフォルトの名無しさん
04/03/02 12:49
まぁ、あんまり気にすんなや。

276:デフォルトの名無しさん
04/03/02 19:09
健全なマクロ VS 不健全なマクロ

1 :デフォルトの名無しさん :04/03/02 19:14
(ちょっと入れ子でスレ立たせてくれや)
健全なマクロって不便だし、不健全なマクロの貸しコートもささくれ立っていてなんかイヤ。
だから、健全なマクロに「不健全」ていうオプション欲しいよな?
お前ら、どう思いますか。



277:デフォルトの名無しさん
04/03/02 19:14
健全なマクロ VS 不健全なマクロ

2 :デフォルトの名無しさん :04/03/02 19:15
2get

278:デフォルトの名無しさん
04/03/02 19:16
「不健全」というと健全なのより悪いイメージがあるからな~。
個人的にはつまらないマクロと楽しいマクロだな。変数キャプチャ
があった方がいろんな意味で楽しい。はまるとデバッグも愉快な事
になるしな。アヒャヒャヒャヒャ。

279:デフォルトの名無しさん
04/03/02 19:20
define-unhygienic-syntax ;-)

280:デフォルトの名無しさん
04/03/02 19:56
defmacro/define-macroの方が簡単だし構造見えるし作りやすい。
gensym命。でもSRFIのhygienicマクロそのまま読めない罠。
まあhygienic作る暇あったら正規表現でも統一しなさいってこった。

281:デフォルトの名無しさん
04/03/02 20:28
>>278
define-boring-macro/define-amusing-macro とか?
まぁ変数キャプチャを防いだところで世間の見る目はかわらんよね。
R... な言語の作者だってマクロはダメポって言ってたけどこれは
変数キャプチャ云々の話じゃないわけだし。

282:デフォルトの名無しさん
04/03/02 22:08
>>281
世間の見る目って?どんな風に見られてるの?
m@zはどうしてマクロはダメポって言ってるの?

283:デフォルトの名無しさん
04/03/02 22:21
>>282
「神聖なる構文を一般利用者が触るなんてとんでもない。そんなの混乱の元だよ!」
ユーザビリティの問題だとかいってたあたりの事だと思われ。確認してないから
不正確かも知れんが探すのマンドクサ(括弧の話だったかも?)

284:デフォルトの名無しさん
04/03/02 22:26
あのひとはユーザビリティって言葉好きだよね

285:デフォルトの名無しさん
04/03/02 22:42
その割にRubyて妙な構文だらけだね
え、LISPには劣るって!?

286:デフォルトの名無しさん
04/03/02 23:02
あぁ!?神聖なる構文?

しゃらくせえ。

おれ様が欲しいのは圧倒的な自由なんだよ!
Schemeは聖域無き言語だぜ!

ユーザビリティーだと?

ヌルイ!ヌルイよそれ!
ちょーヌルイよ!

あーヌルイ。母さーん、火ぃつけてくれ。

ふぅー、ぬるぽ。

287:デフォルトの名無しさん
04/03/02 23:05
C言語みたいな、ちょっと小汚い言語の方が好かれるかもなあ

288:デフォルトの名無しさん
04/03/02 23:58
vimのVIlispってプラグインまともに動かせてる人いる?
設定のコツを教えてくれ。
\esで評価しようとするとvimが固まるんだけど…

289:デフォルトの名無しさん
04/03/03 20:35
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>286



290:デフォルトの名無しさん
04/03/04 14:28
Lispをよく知る前は、Lispは再帰が命と聞いた。

Common Lispを習ったら、再帰はC++と同じくらいしか使わないなと思った。

Schemeを習ったら、「やっぱりLispは再帰が命?」と思った。


291:デフォルトの名無しさん
04/03/04 14:39
CPS (continuation passing style)ってSchemerの人達が発明したコーディングスタイルなのかな?
末尾再帰の最適化が保証されていないと、いやがる人がいそうな書き方だよね。

実際は、メモリを結構積んでいるマシンが増えたから、再帰が多少深くなったって、困る場面ってそうそう
ないような気もするけど。


292:デフォルトの名無しさん
04/03/04 16:36
コンパイラ関連でよく出てくるよ>CPS


293:デフォルトの名無しさん
04/03/04 23:34
>>291
CPS ってもう少し汎用的な概念だと思う。
state パターンも原始的な CPS だと言えなくもない。

末尾再帰を使うのはたまたま scheme が末尾再帰を正当化してくれているから。


294:デフォルトの名無しさん
04/03/05 13:44
URLリンク(www.lispworks.com)
> System Class STANDARD-CLASS
> Class Precedence List: standard-class, class, standard-object, t
(subtypep 'standard-class 'standard-object)
=> NIL T ;; clisp
=> NIL T ;; cmucl
=> T T ;; ecl
=> T T ;; lispworks
なにこの処理系たち…

久しぶりにaclをインストールしたら、
./alisp
dlopen(/tmp/acl62_trial/libacli623t.so, mode) error: /tmp/acl62_trial/libacli623t.so: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference
と言って立ち上がらない…

295:デフォルトの名無しさん
04/03/05 15:28
CVS 鯖のトラブルで遅れれてるけど CMUCL 19a は↓だよ.がんがれ Martin !
(Martin は週末に時間があったらがんがるそうです)

CLOS based on Gerd's PCL 2003/06/18 09:23:09
* (subtypep 'standard-class 'standard-object)
T
T


296:294
04/03/05 15:47
clisp 2.28 (released 2002-03-03)
cmucl CLOS 18e (based on PCL September 16 92 PCL (f))
ecl 0.9c
lispworks Version 4.3.6
でした。

そういえば、cmuclはCLOSをだれか(Martinていう人?)が速くなるように書き直し
ているという話を聞きました。

clispとか報告したほうがいいのかな…。fixも一緒じゃないとなんとなく気が引ける
んだよね。一般的にconformance bugって重箱の隅をつつきだしたら結構あるし。

297:デフォルトの名無しさん
04/03/05 15:54
あれっ、clisp 2.28って古すぎですね。今は2.32か。

298:デフォルトの名無しさん
04/03/05 16:01
GNU CLISP 2.32 (2003-12-29)
[1]> (subtypep 'standard-class 'standard-object)
NIL ;
T


299:デフォルトの名無しさん
04/03/05 16:06
いや今 CMUCL はメインの CVS 鯖がダウンしてて Martin タソが準備してるってだけ。
はやくなおらないなか~。PCL をいじってたのは Gerd Moellmann です。だから Gred's PCL。
19a からこっちになる予定。


300:デフォルトの名無しさん
04/03/05 16:31
今、cl-ppcreをDebianシステムにインストールしたんだけど、
apt-get install cl-ppcre
で、clisp、cmucl、sbcl-mtなどインストールされているコンパイラ用にちゃんと
コンパイルしてインストールくれるんだね。

しばらくDebianにさわってなかったけど、なんだか、とんでもなく便利になってきている気がする。
debパッケージになっているライブラリも多いし。Debian使っているLisperが多いのかな。
たしかcmuclの開発者もdebianの人が多かったよね。

あと、Redhat(Fedora?)だとメモリチェッカか何かの影響でcmuclが動かない(かった)という話も
きいたことがあるね。今でもそうなのかな?

301:デフォルトの名無しさん
04/03/05 17:16
>>299
同意。
早く復活しないとSBCLに(ry

302:デフォルトの名無しさん
04/03/05 17:23
たしかに、現状でSBCLの方が開発に勢いがあると言ってた人がいたな。

303:デフォルトの名無しさん
04/03/05 18:56
CMUCL派生なのに、ベンチマーク結果が大きく違うのは何でだろ。
URLリンク(www.cons.org)


304:デフォルトの名無しさん
04/03/06 13:30
>>303 俺にはだいたい同じような結果に見えます。sbcl vs cmucl

305:デフォルトの名無しさん
04/03/06 19:38
block compile って何ですか?

306:デフォルトの名無しさん
04/03/07 11:53
>>305 どんな文脈で、でてきた言葉ですか?

307:デフォルトの名無しさん
04/03/07 17:59
たぶんcmuclじゃないかな。
fURLリンク(ftp.averillpark.net)
を熟読。


308:デフォルトの名無しさん
04/03/08 20:32
Gaucheはmingw用でいいからWindows向けのmakefile書いて欲しいなあ。
cygwin入れてconfigure環境作るのマンドクサ

309:デフォルトの名無しさん
04/03/08 21:04
>>309
確かに。漏れもGaucheのためにcygwin入れたよ。

310:305
04/03/08 22:55
>>306-307
レス遅くなりまして済みません。SBCL と CMUCL の比較で、SBCL はまだ block compile
が出来ないよみたいな記述があったので、お聞きしました。

>>307
どうもありがとうございます。読ませて頂きます。

311:デフォルトの名無しさん
04/03/08 23:07
block compileには何のメリットが?

312:189
04/03/12 00:29
以前、>>197-198 でコードを提供していただいた者です。
>>211 の後で、ドットリストも扱えるように改造して、欲しい仕様の物ができました。
それを、いま移植作業を進めているプログラムに同梱したいのですが、著作権表記や
ライセンスなどでご要望がありましたらお知らせください。
(元プログラムがBSDライセンスなので、それと同じで配布できるとありがたいのですが)

313:197
04/03/12 01:37
>>312
好きにしていいよ。

314:デフォルトの名無しさん
04/03/12 16:59
このスレ廃れたな....

315:デフォルトの名無しさん
04/03/12 18:59
わざわざ言うほどでもない

316:デフォルトの名無しさん
04/03/12 19:34
いや、初心者スレの登場でレスが分散して、ここ数日何か寂しいなあと感じたので。


317:デフォルトの名無しさん
04/03/12 19:37
淋しがりやさんなのね

318:デフォルトの名無しさん
04/03/12 19:39
新ネタがくれば ワッシワッシ盛り上がるよ

319:デフォルトの名無しさん
04/03/12 19:44
両方見てれば別に寂しくないじゃん。
ところで >>189 は何を移植してるんだろ。
期待して待つぞ~

320:デフォルトの名無しさん
04/03/12 20:56
↓新ネタ登場!


321:189
04/03/12 22:37
>>319
URLリンク(khdd.net) をご覧ください。

322:デフォルトの名無しさん
04/03/13 14:20
>>321 リンク先みても(12.1.4というアンカー名が見つからない)、いまいち分からないのですが、フォント関連のアプリですか?

323:デフォルトの名無しさん
04/03/13 15:30
URLリンク(khdd.net)
と間違えたんだろ

324:デフォルトの名無しさん
04/03/13 16:06
なるほろ

325:デフォルトの名無しさん
04/03/13 17:15
#+cmu
(loop for i from 128 to 255 do (set-syntax-from-char (code-char i) #\a))
みたいに処理系固有の処理は *features* を使うとイイと思われ。

326:デフォルトの名無しさん
04/03/13 21:52
こういうのを高階関数を使って綺麗に書けませんか?
(lambda (a b) (> (car a) (car b)))


327:デフォルトの名無しさん
04/03/13 22:55
>>326
逆に汚いかも
(lambda (a b) (apply > (map car (list a b))))

328:デフォルトの名無しさん
04/03/13 23:29
(> a b :key #'car)

みたいに書きたいということじゃないの。

329:326
04/03/14 00:03
説明不足ですみません。↓こういう用途で使いたいのです。
(sort '((5 a) (3 b) (4 c))
(lambda (a b) (> (car a) (car b))))
map,cut,apply,compose等を使って相当考えたんですが
lambdaを使わないで表現できません・・・
綺麗or簡潔にするのは無理な気がしました。
でも汚い例ですら考えつかなかったので悔しいです。

330: 
04/03/14 01:35
(define (cons x y)
(lambda(m)(m x y)))

(define (car z)
(z (lambda (p q) p)))

としたとき、(car (cons x y)) が x を生じることを
証明せよ、とSICPに言われたんですけど、よくわからんのです。
頭がこんがらがって。
mzscheme というのを使ってるのですが、動きを追うための
機能ってないんでしょうかね。

331:デフォルトの名無しさん
04/03/14 01:49
言語レベルを落とせばトレースできたような気がしなくもないが
普通に式変形してけばOKかと
(car (cons x y))
=> (car (lambda (m) (m x y)))
=> ((lambda (m) (m x y)) (lambda (p q) p)))
=> ((lambda (p q) p) x y)
=> x

332: 
04/03/14 01:59
>>331
あ~、なるほど。ありがとうございます。
すっきりしました。わたしまだ基本ができてないっすね。
精進します。

333:デフォルトの名無しさん
04/03/14 09:22
>>329
(sort '((5 a) (3 b) (4 c)) #'> :key #'car)


334:326
04/03/14 15:16
>>333
おおっ ありがとうございます。
Schemeは無理ですか?

335:デフォルトの名無しさん
04/03/14 15:27
sort関数自体の仕様による。
どうしても必要なら
(sort '((5 a) (3 b) (4 c)) > car)
という引数を受け付ける様にするとか。
car>という関数でも作るとか。

336:デフォルトの名無しさん
04/03/14 15:36
(lambda a (apply > (map car a)))

337:326
04/03/14 16:04
>>336
こんなことができたのですか。これなら満足です。
皆さんどうもありがとうございました。


338: 
04/03/14 23:11
(define (reverse ls)
(if (null? ls)
ls
(append (reverse (cdr ls))(list (car ls)))))

とやると、リストがさかさまになるらしいのですが、動きは
どうなるのでしょう。
最初の引数が(1 2 3)として、
(append (reverse (cdr (1 2 3))(list (car (1 2 3))))
(append (reverse ((2 3))(list (1)))
(append (reverse ( (cdr (2 3)))) (list (car (2 3))))
(append (reverse (3))(list (2)))
となって、あれ?となります。けど実行するとさかさまになっている
なんかわからないです。だれか動き方を教えてください!

339:デフォルトの名無しさん
04/03/14 23:23
>>338
(reverse '(1 2 3))
(append (reverse '(2 3)) '(1))
(append (append (reverse '(3)) '(2)) '(1))
(append (append (append (reverse '()) '(3)) '(2)) '(1))
(append (append (append '() '(3)) '(2)) '(1))
(append (append '(3) '(2)) '(1))
(append '(3 2) '(1))
'(3 2 1)

340: 
04/03/14 23:39
>> 339
あ!
append 自体が入れ子になるわけですね!
やっとわかった!ありがとうございました!

341:デフォルトの名無しさん
04/03/15 15:45
だれか、これ知っていますか? ECLと似たアプローチだと思うけど、評判はあまり聞かないな。
WCL 3.0 - Embeddable Common Lisp for Linux
URLリンク(wcl.kontiki.com)
何でもいいから情報キボンヌ

342:デフォルトの名無しさん
04/03/16 01:13
前スレ 422 からの Y combinator は面白い。
関係ないけど、クロージャをオブジェクトと見立てて self や this 相当の機能を実現しようと
するとマクロを使うか引数で渡してあげるしかないのかな。

343:デフォルトの名無しさん
04/03/16 03:32
>>342
letrec とか使えば、とりあえず自分を参照できるけど。

(let* ((foo (let ((val 1))
(define (self sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self)))
self))
(bar (let ((super foo)
(val 2))
(define (self sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self)
((eq? sym 'super) super)
(t (super sym))))
self)))
(list (bar 'val) ((bar 'self) 'val) ((bar 'super) 'val)))

=> (2 2 1)

とか、こういう話?

344:デフォルトの名無しさん
04/03/16 23:00
>>343
そっか、let で括ってあげれば良いんですね。lambda だけでと考えてました。

345:デフォルトの名無しさん
04/03/17 13:34
頼むから、CMUCLのCVS早く復旧してくれよ。
もう二ヶ月以上も経過してるぞ。

346:デフォルトの名無しさん
04/03/17 13:58
ミラーは全部生きてるわけだし普通のユーザーにはそれほど不都合は
無いでしょ。Martin タンだってボランティアなんだしあまりワガママを
言うもの気の毒じゃん。どうしても文句言いたきゃ cmucl-devel で騒ぐ
ほうか良いと思われ。

347:デフォルトの名無しさん
04/03/17 15:59
>Martin タンだってボランティアなんだしあまりワガママを言うもの気の毒じゃん。
なのに
>どうしても文句言いたきゃ cmucl-devel で騒ぐほうか良いと思われ。
ってのは一番ヤバい選択なような。


348:デフォルトの名無しさん
04/03/17 16:53
自分では何もする気がないのにただ「さっさと復旧汁」とか言いたいだけなら
黙ってたほうが賢明かと。別に配布が完全停止ってわけでもなくデベロッパーは
黙々と作業してるわけで。でも建設的な提案(回線とセットアップ済みハードウェア
を提供とか)があるなら言ってみれば。

349:デフォルトの名無しさん
04/03/17 17:28
>自分では何もする気がないのにただ「さっさと復旧汁」とか言いたいだけなら黙ってたほうが賢明かと。
俺はそうは思わない。以上

>でも建設的な提案(回線とセットアップ済みハードウェアを提供とか)があるなら言ってみれば。
なんで建設的な話?
不毛な雑談を認めないのかよ。
建設的な提案があればこんなところではなくcmucl-develへ投稿するところだが。


350:デフォルトの名無しさん
04/03/17 17:38
Lisperはまじめっこが多いから不毛な雑談はできません

351:デフォルトの名無しさん
04/03/17 17:47
         ナ ゝ   ナ ゝ /    十_"    ー;=‐         |! |!   
          cト    cト /^、_ノ  | 、.__ つ  (.__    ̄ ̄ ̄ ̄   ・ ・   
                                             
            ,. -─- 、._               ,. -─v─- 、._     _
            ,. ‐'´      `‐、        __, ‐'´           ヽ, ‐''´~   `´ ̄`‐、
       /           ヽ、_/)ノ   ≦         ヽ‐'´            `‐、
      /     / ̄~`'''‐- 、.._   ノ   ≦         ≦               ヽ
      i.    /          ̄l 7    1  イ/l/|ヘ ヽヘ ≦   , ,ヘ 、           i
      ,!ヘ. / ‐- 、._   u    |/      l |/ ! ! | ヾ ヾ ヽ_、l イ/l/|/ヽlヘト、      │
.      |〃、!ミ:   -─ゝ、    __ .l         レ二ヽ、 、__∠´_ |/ | ! |  | ヾ ヾヘト、    l
      !_ヒ;    L(.:)_ `ー'"〈:)_,` /       riヽ_(:)_i  '_(:)_/ ! ‐;-、   、__,._-─‐ヽ. ,.-'、
      /`゙i u       ´    ヽ  !        !{   ,!   `   ( } ' (:)〉  ´(.:)`i    |//ニ !
    _/:::::::!             ,,..ゝ!       ゙!   ヽ '      .゙!  7     ̄    | トy'/
_,,. -‐ヘ::::::::::::::ヽ、    r'´~`''‐、  /        !、  ‐=ニ⊃    /!  `ヽ"    u    ;-‐i´
 !    \::::::::::::::ヽ   `ー─ ' /             ヽ  ‐-   / ヽ  ` ̄二)      /ヽト、
 i、     \:::::::::::::::..、  ~" /             ヽ.___,./  //ヽ、 ー        


352:デフォルトの名無しさん
04/03/17 17:53
別に 348 の見解をそんなに気にする事はないだろう。
不毛な雑談でもオモシロければイイ。同じネタのループはイクナイ。
で CVS の復旧マダーな話は「こんなところ」でも既出なわけだが。

353:デフォルトの名無しさん
04/03/17 18:15
じゃあ、次はCVSのクラッキンg(ry

354:デフォルトの名無しさん
04/03/18 08:43
>>344
展開してみた。

((lambda (foo)
((lambda (bar)
(list (bar 'val) ((bar 'self) 'val) ((bar 'super) 'val)))
((lambda (super val)
((lambda (self) (self self))
(lambda (self0) ((lambda (self1) (lambda (sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self1)
((eq? sym 'super) super)
(#t (super sym)))))
(lambda (sym) ((self0 self0) sym))))))
foo 2)))
((lambda (val)
((lambda (self) (self self))
(lambda (self0) ((lambda (self1) (lambda (sym)
(cond ((eq? sym 'val) val)
((eq? sym 'self) self1))))
(lambda (sym) ((self0 self0) sym))))))
1))

=> (2 2 1)

; ところで、 closure を object と見立てるって、こういうので合ってるの?

355:デフォルトの名無しさん
04/03/18 11:13
まぁ正直 let 使ったほうが見やすいわけだが。わざわざ展開してあげるとは
>>354 も人が良いねぇ。let や let* は lambda で書けるだろゴルァ!! で
終わりそうなもんだが。まぁ >>344 よ、基本的に

(let ((x 1) (y 2)) (+ x y))
=>
((lambda (x y) (+ x y)) 1 2)

(let* ((x 1) (y 2)) (+ x y))
=>
((lambda (x) ((lambda (y) (+ x y)) 2)) 1)

でも流石に let 使ったほうがわかりやすいので大抵の Lisp にゃ
let や let* が用意されてるわけだ。

356:デフォルトの名無しさん
04/03/18 12:56
むしろ define(= letrec) を展開してることに意味があったり。

357:デフォルトの名無しさん
04/03/19 14:42
The Seasoned Schemerってどうかな。安いから買おうかな。littleは持ってるんだけど。
URLリンク(www.amazon.co.jp)

と思ったら、The Little Mler などというもっと面白そうな本が...


358:デフォルトの名無しさん
04/03/22 14:37
Lispがそんなにすごいなら ---If Lisp Is So Great---
URLリンク(www.shiro.dreamhost.com)

359:デフォルトの名無しさん
04/03/22 18:54
JavaとかC++とか手続き型で一般的なオブジェクトの
メソッド呼び出し形式が書ける様になれば普及すると思うんだけど、
どうかな。
シングルメソッドディスパッチでいいし。

つまりこういうこと
(object.method param) ;; object->method(param)
(object->method param) ;; object->method(param)
(setf object->prop value) ;; object->prop = value
.と->はどっちでもいいけど。.はdot-pairと被るから->かな。
マクロ文字でなんとかなったりする?

でもメソッド呼び出しをネストさせると
((object->method param1)->method param2) ;; object->method(param1)->method(param2)
変な違和感がある。

そもそも->はsuffix演算子だから、本来ならLISP流に書くと
(-> (-> object method param1) method param2)
こうなる。

でもこれじゃ使う人いないだろう。
まいった。

360:デフォルトの名無しさん
04/03/22 23:11
>>358
>(だが、気をつけ給え。その論理の行き着く先はWindowsだ。)
ワロタ
広まるのが悪いみたいな言い方だな(w

361:デフォルトの名無しさん
04/03/23 00:06
>>359
. や -> は繋ぎの役割しかしてないから、括弧と両方あるのは冗長。省こう。
object と getter や method の順序は、lisp だと procedure が前だから、
(setf (prop obj) value) と ((method obj) param)

あと方のは中の括弧はなくてもいいか。そうすると、(method obj param)。

あれ、両方とも今のままだ。

362:デフォルトの名無しさん
04/03/23 00:18
(だが、気をつけ給え。その論理の行き着く先はloopだ。)

363:デフォルトの名無しさん
04/03/23 09:28
loop keywordをリスト中にいきなり出てくるキーワードではなくて、ローカルマクロ
みたいに見えるように定義したら、loop嫌いな人も減ったかな。
(loop (for item in list) (collect item))

364:デフォルトの名無しさん
04/03/23 10:22
> (* 1.05 12)
12.600000000000001
> (* 1.05 12.0)
12.600000000000001

Gaucheでこの誤差をなくす方法を教えてください。
(プログラム初心者板ものですね。申し訳ないです)

365:デフォルトの名無しさん
04/03/23 11:13
そんなもの
(* 105/100 12)
とすれば、、、
12.600000000000001
あれ???

366:デフォルトの名無しさん
04/03/23 11:22
浮動小数点の仕様。
十進数使え。Gaucheにあるかどうかはしらんが。

367:デフォルトの名無しさん
04/03/23 11:24
gaucheはexact rationalないみたいだからね。
formatで桁指定できれば助かるんだが。


368:デフォルトの名無しさん
04/03/23 11:24
clisp なら (* 105/100 12) => 63/5 でウマー!! というは置いといてだ,
#include <stdio.h>
int main(int argc, char *argv[])
{
double f = 1.05*12;
printf("%f\n", f);
printf("%.14f\n", f);
printf("%.15f\n", f);
printf("%.16f\n", f);
return 0;
}
の結果が
12.600000
12.60000000000000
12.600000000000001
12.6000000000000014
になる事について,どう思う?

369:デフォルトの名無しさん
04/03/23 11:38
What Every Computer Scientist Should Know About Floating-Point Arithmetic
URLリンク(docs.sun.com)
日本語訳は腐っていた記憶あり。

他にも浮動小数点数の入門文書あったら紹介してください。

370:デフォルトの名無しさん
04/03/23 12:08
IEEE double precision floating pointで、
1.05の最良近似は丸めが入って (* #x10cccccccccccd (expt 2 -52))。

仮数部を12倍すると #xc999999999999c。
これは54bitになるから、仮数部53bitに収めるにはまた丸めなくちゃ
ならない。ちょうど中間の値に来るときは仮数部が偶数になるように
丸めるから、演算結果はこうなる。
(* #xc99999999999a0 (expt 2 -52))

一方、12.6, 12.600000000000001の最良近似は、桁を揃えればそれぞれ:
(* #xc9999999999998 (expt t -52))
(* #xc99999999999a0 (expt t -52))

だもんで、正確さを言うなら12.600000000000001の方が正確やね。
見にくいことは否定しないが。


371:デフォルトの名無しさん
04/03/23 22:09
>>364
gosh> (* 1.05 1.2 10)
12.6

372:デフォルトの名無しさん
04/03/24 02:59
>>359
(obj 'msg args) という形で Smalltalk のメッセージ式風に記述するとか。

キーワード引数付きのメッセージ式って Lisp 等の関数呼び出し式と同様に
一貫した記述(条件分岐とか、繰り返しとかもメッセージ式風に記述出来る)
が出来て、尚かつ読み易くて イイ! と思うんだけどどうかな?

373:デフォルトの名無しさん
04/03/24 03:27
>>359,372
そんな簡単なことで普及するなら Dylan はとっくの昔にメジャーになっとるがな。
要するに、マクロで書式を自由にできることがウリの LISP で駄目だってことは、
(なにが駄目だかわらかんが)問題は(あるとすれば)書式にあるんじゃないっ
てことなんだよ。(で、なにが駄目で問題なんだ…?藁)

374:デフォルトの名無しさん
04/03/24 05:55
他の言語で満足してるからじゃないの?

375:デフォルトの名無しさん
04/03/24 07:24
足りないこと
・(すでに)C/C++言語並みに広まっていること
・C/C++のようにどこでも動くこと(最近のPCでも、組み込み機器でも)

376:デフォルトの名無しさん
04/03/24 09:17
それは言語が普及する原因ではなく、結果ですよ

377:デフォルトの名無しさん
04/03/24 09:51
>>373
お前、括弧の使い方が下手だな。
その文章、激しく読みにくいぞ。


378:デフォルトの名無しさん
04/03/24 10:49
>>376
分からないかな。
"普及すれば普及する"というロジックが。
最初の出発点は些細なことでしょ。(Lispは重すぎたとか)

379:デフォルトの名無しさん
04/03/24 11:13
>>378 言いたいことは、分かるよ。原因と結果が循環するということね。
ただそれは、ある言語が普及しだして、一応、人気が軌道にのってからの話しでしょ。

>最初の出発点は些細なことでしょ。
最初の一撃ってけっこう大切なことでしょ。それが些細なことであっても。


380:デフォルトの名無しさん
04/03/24 11:17
しかし、今となってはLispが重いとか言っている年寄りは、そろそろ引退してくれる頃だよね。

381:デフォルトの名無しさん
04/03/24 13:07
(だが、気をつけ給え。その論理の行き着く先はIf Lisp Is So Greatだ。)

382:デフォルトの名無しさん
04/03/24 22:57
>>380
いいから、携帯でLisp動かしてみろ。GBAでもいいよ。
PCとかワークステーション以外は、始める前から年寄り引退確定か

383:デフォルトの名無しさん
04/03/24 23:07
多分動かすだけなら難しくはないな
>382 は自分でLisp処理系を作ったことがないのか?

384:デフォルトの名無しさん
04/03/25 00:42
動かすだけなら難しくないと思う。
>382 はILC2003で絶賛された湯浅センセのXSでも勉強すれ。
hxxp://www.xslisp.com/

385:デフォルトの名無しさん
04/03/25 06:45
・動かすだけなら難しくない
・処理系作れ

馬鹿の一つ覚えですか?
Cだったらすでにコンパイラがあったりするわけですよ。
お前らは、新しい環境が着たらそのたびに、コンパイラ作ってるのかと小一時間・・・
もう、Lisperとやりあうのは疲れた

386:デフォルトの名無しさん
04/03/25 07:43
「新しい環境」が来たらそのたびに、 C だって移植作業してるんじゃないかな。
「新しい環境」を作った人達が一緒に開発するかもしれないけど。

「すでに」あるかどうかは、その環境と言語がどれだけ普及してるかって話でしかないと思う。

387:デフォルトの名無しさん
04/03/25 08:58
>>382
> いいから、携帯でLisp動かしてみろ。GBAでもいいよ。
たしか、LispMeという処理系がPalm PilotというPDAで動いていたな。
携帯とかGBAとかでも、開発環境が入手しやすければ、だれかが動かしても
おかしくないね。LispといってもCommon Lispのようにライブラリ的な機能が
豊富にそろっている言語から、Schemeみたいに山椒は小粒で…みたいなものまで
色々あるんだよ。

>>385
>Cだったらすでにコンパイラがあったりするわけですよ。
たしかに最初から使えれば便利だね。Cでそのままプログラミングするか、
Lispのようなもう少し抽象化が行われた言語を実装してから作業するか、
そのコストの見積りだろうね。

>お前らは、新しい環境が着たらそのたびに、コンパイラ作ってるのかと小一時間・・・
だれかが作業をやってくれていなければ、自分でやるか、人にやってもらうしかないでしょう。
それは、Cでも変わらないよ。ただCとLispの守備範囲はあまり、かぶらないと思うけど。

388:デフォルトの名無しさん
04/03/25 09:17
最近は組み込み用途にも、C++やJavaを使う事があるらしいね。ここらへんならLispとかぶるかね。

389:デフォルトの名無しさん
04/03/25 10:21
>>385
ならバックエンドにはすでにある C コンパイラを利用するような
拡張をするという手もあるよ.C のソースを出力すりゃいいわけで
仲良くやってけるじゃん.なんで勝手に対決姿勢になってんの?

390:デフォルトの名無しさん
04/03/29 11:23
390 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25(木) 23:04
そういやKCLはオブジェクト言語がCだったような。

391:デフォルトの名無しさん
04/03/29 11:25
391 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25(木) 23:54
ターゲット用の専用言語(GC 無しとかね)を作るのも楽だな.S 式ベースで構文考
える手間が少ないし.C のソース出力でもアセンブラ出力でもバイナリ出力でも気合
いと時間に応じて自由に選べるし.

392:デフォルトの名無しさん
04/03/30 23:28
392 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26(木) 23:54
あれ?誰もいない・・・

393:デフォルトの名無しさん
04/03/31 13:39
393 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26(木) 23:59
ジリリリリリリリリーン


394:デフォルトの名無しさん
04/03/31 22:48
結局Schemeに戻ってきてしまった.

395:デフォルトの名無しさん
04/04/01 05:12
slime のマニュアル。既出じゃなかったような気がするので一応。
URLリンク(www.bluetail.com)

396:デフォルトの名無しさん
04/04/01 05:18
slime のマニュアル。既出じゃなかった気がするので一応。
URLリンク(www.bluetail.com)

397:デフォルトの名無しさん
04/04/02 11:25
slime のマニュアル。既出じゃない気がするので一応。
URLリンク(www.bluetail.com)


398:デフォルトの名無しさん
04/04/03 19:22
slime のマニュアル。既出でない気がするので一応。
URLリンク(www.bluetail.com)

399:デフォルトの名無しさん
04/04/03 21:15
(gc)

400:デフォルトの名無しさん
04/04/04 03:16
荒らし?

401:デフォルトの名無しさん
04/04/04 13:04
('A`)

402:デフォルトの名無しさん
04/04/04 22:56
「警察だ。ドンドンドン。開けろ。荒しの容疑で逮捕する。開けなさい。」
「ふぁ~(眠)け、けいさつ~?」
「そうだ。警察だ。早く開けなさい。」
「け、けいさつ~?ここは、けいさつじゃないよ~。」
「ふざけるな。私は警察だぞ。いつまで寝たふりしてるんだ。早く開けろ。」
「ふぁ~(眠)ね、ねた~?ね、ねたなんて、ふってないよ~」
「ネタ振りじゃないよ!寝たふりだよ!このやろう!無駄な抵抗は止めろ!」
「ね、ねたふり~?こ、ここは、ネタスレじゃないよ~。」
「ここはネタスレじゃないよ!ここをネタスレ化している荒らしはお前だろ!いいから開けろ!」
「あらし~?」
「そうだ。容疑を認めるならさっさとここを開けなさい!」
「こ、ここは、ゲームセンターじゃないよ~」
「俺はアラシじゃないよ!!お前が荒らしなんだよ!なんだよっゲームセンターって!!!炎のコマかよ!・・・」
「・・・」
「・・・」

(;´∀`)


403:デフォルトの名無しさん
04/04/04 23:18
(;´∀`)
nil

404:デフォルトの名無しさん
04/04/05 23:01
>>403
うれピー!!!
(;`∀`) 韮韮韮韮韮韮韮韮韮
      韮韮韮韮韮韮韮韮韮
韮韮韮韮韮韮韮韮韮
韮韮韮韮韮韮韮韮韮

405:デフォルトの名無しさん
04/04/05 23:28
春爛漫

406:デフォルトの名無しさん
04/04/06 00:34
>>405
>>春爛漫
1/2 なんちゃって!

407:デフォルトの名無しさん
04/04/06 12:20
Kahua使ってる人いる?
感想聞かせて

408:デフォルトの名無しさん
04/04/06 13:19
cmucl19a期待age

409:デフォルトの名無しさん
04/04/06 13:28
cmuclの新しいCLOSで以下の式を評価すると何が返りますか?
(class-name (class-of (class-of #'make-instance)))

ちなみに、cmucl18eだとstandard-class、clisp 2.33だとbuilt-in-class
ですが、MOP的には、funcallable-standard-classが正しい気がします。

410:デフォルトの名無しさん
04/04/08 23:09
初心やスレからやってきました。
LISP初心者です。

ここのスレの皆様方に教えっていただきたいことがあるのですが、
WINDOWS版のCL-HTTPを落としたいのですが、MITのHPのダウンロード
できそうなリンクがほとんどエラーになるのですが、CL-HTTPを
ダウンロードするにはどうすればいいんでしょうか?
よろしくお願いします。

411:デフォルトの名無しさん
04/04/08 23:41
ハァ

412:デフォルトの名無しさん
04/04/09 18:44
    〃〃∩  _, ,_
     ⊂⌒( `Д´) < WINDOWS版のCL-HTTPを落としたいよ~!
       `ヽ_つ ⊂ノ
              ジタバタ

413:デフォルトの名無しさん
04/04/09 20:23
>>409
[gcl 2.5.3]
Error: The function CLASS-NAME is undefined.

[ecl 0.9c]
STANDARD-CLASS

[sbcl 0.8.6]
SB-PCL:FUNCALLABLE-STANDARD-CLASS



414:デフォルトの名無しさん
04/04/10 08:40
やさしいLisp入門
URLリンク(www.cutt.co.jp)

こんなもん出てるようだけど、どうなん?

415:デフォルトの名無しさん
04/04/10 09:06
4200円! たっか~。
どうみても入門書でたいして面白そうな例題もないこの内容で、この値段。うーむ。



416:デフォルトの名無しさん
04/04/10 09:10
CLOSどころかマクロのマの字もないな。


417:デフォルトの名無しさん
04/04/10 15:34
ネタじゃないんだよね?
他のやさしいシリーズの倍近い値段は置いておくとして
(ページ数も倍の480だし)、
よりによってCommonも何もついてないLISPとは、
いったいどういうことなのか。
読んでみないことには何とも言えないけど、
最終章にコンパイラとローダとリンカがあるということは、
やっぱりCommonLISPなのか。
日本のLISP業界にとって歴史的事件となるのかどうか。


418:デフォルトの名無しさん
04/04/10 17:32
>>409
>(class-name (class-of (class-of #'make-instance)))
LispWorksPersonalEditionで試してみると

FUNCALLABLE-STANDARD-CLASS
だね

419:デフォルトの名無しさん
04/04/10 19:49
The Evolution of Language
URLリンク(homepages.inf.ed.ac.uk)

420:デフォルトの名無しさん
04/04/10 20:37
>>417
> よりによってCommonも何もついてないLISPとは、
> いったいどういうことなのか。

書店で立ち読みしたところ第一章にCommon Lispと明記してあったのだが。
何を見当違いのことで騒いでいるのかね。


421:デフォルトの名無しさん
04/04/10 20:47
>>420
内容はどうだったの?


422:デフォルトの名無しさん
04/04/10 23:52
>>409
手元ではこんなんですが.
CMU Common Lisp pre19a 20040410, running on lavie
With core: /home/lambda/local/lib/cmucl/lib/lisp.core
Dumped on: Sat, 2004-04-10 11:20:09+09:00 on lavie
See <URLリンク(www.cons.org) for support information.
Loaded subsystems:
Python 1.1, target Intel x86
CLOS based on Gerd's PCL 2004/01/09 04:34:17
* (class-name (class-of (class-of #'make-instance)))

PCL:FUNCALLABLE-STANDARD-CLASS
*

423:409
04/04/11 16:59
情報を頂いたみなさん、ありがとうございました。

FUNCALLABLE-STANDARD-CLASSの方が、MOP的に「正しい」とまでは言えないかもしれないけど、
「そのほうが自然」とは言えるかな?

clispの開発者の人が1、2年前にMLで、「FUNCALLABLE-STANDARD-CLASSをサポートしないの?」と
尋ねられて、「自分で書いても同じような事を手軽にできるし、ANSI規格でもないから、今のところ
作業予定はないよ」と言っていました。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch