【入門】Common Lisp ..
[2ch|▼Menu]
210:デフォルトの名無しさん
08/03/23 10:37:24
と、まるで何かを見てきたふうなことを言ってるけど、別に何も見てきてないんでしょ?w
だから具体的に書けない。

211:デフォルトの名無しさん
08/03/23 14:02:39
>>209
とりあえず、199の時点で皆に膝を叩いて納得して欲しかったんじゃない?

212:デフォルトの名無しさん
08/03/23 14:34:59
だろうね。

>>199
厳密に書かないといけないのは確かだけど、意味がないわけじゃない。

例えば、今時特殊な状況を除けば普通高級言語でプログラム書くけど、これだって
当然曖昧性のないものでなのでアセンブラと同様に厳密に書かないといけない。

だからと言って意味がないわけじゃないだろ?

ループのためだけにラベル名を考えたり、ローカル変数のサイズ計算してスタック
ポインタから引くためのコード書いたりしなくて良くなるだけでも、ずいぶん楽だ
しコードの品質も上がる。

それと同じで、例えば通信やってる人なんかだと仕様書として状態遷移図とか、ス
テータスマトリックスを渡されたり、自分で書いたりする。

今はこれを見て「人手で」コーディングしてるでしょ?

で、仕様変更があったら再度コードを「人手で」修正してるよね。

この部分を自動化するだけでもかなり楽になると思わない?

213:デフォルトの名無しさん
08/03/23 15:36:06
& % #' などの略記一覧はどこかにないでしょうか?
emacsでcommon lisp開発環境作るとしたらslimeだけでいいのでしょうか?

214:デフォルトの名無しさん
08/03/23 18:14:29
>>213
> emacsでcommon lisp開発環境作るとしたらslimeだけでいいのでしょうか?
後はマニュアルを引きやすくしとけばいんでね

215:デフォルトの名無しさん
08/03/23 18:46:24
>>213
「Common Lispリーダーの標準的なマクロ文字が知りたい」の?だとしたら % って何だろ…
とりあえずHyperSpec見れ
URLリンク(www.lisp.org)
URLリンク(www.lisp.org)

216:デフォルトの名無しさん
08/03/23 19:20:00
>>215
ということは変数名の先頭に%がついてたのは特別な意味はないのですね


217:デフォルトの名無しさん
08/03/23 19:30:55
>>216
ないといえばないけど、慣習の一部

URLリンク(www.cliki.net)

218:デフォルトの名無しさん
08/03/23 20:26:08
CLispがGNU Common Lispかと思っていたけど、
GNU Common LispってGCLだったのね。

違いは何だろうと思って探したら
URLリンク(okwave.jp)
がありました。

219:デフォルトの名無しさん
08/03/24 02:30:50
さいきんLispに興味があります
普段何に使ってますか?

1. シェルスクリプト並にナチュラルに普段使いをしている
2. ある程度以上注意深く作るアプリケーションやモジュール作成の時のみに使用
3. 実用性を考えたら負けなものをニヤニヤしながら作ってて楽しい

220:デフォルトの名無しさん
08/03/24 05:58:56
シェルスクリプトとは違う意味でナチュラルに普段使い。
思いついたことをさらっと試すのに使ってる。
Emacs使いでないとわからん感覚かも

221:デフォルトの名無しさん
08/03/24 08:38:11
大体何にでも使うけど、シェルスクリプトなんて普段くまねーからわかりません。

222:デフォルトの名無しさん
08/03/24 10:20:20
lispの入門のホームページはよく見つかるのですが、それ以上の話題はどこを探せばいいのでしょうか?
cffiを使ってc++のプログラムをlispから呼びたいのですがサンプルのコードの意味が今一つわかりません
URLリンク(www.swig.org)
ここあたりがそうみたいなのですが、これが理解できるようになるための
中級向けテキストはどこかにないのでしょうか?

223:デフォルトの名無しさん
08/03/24 10:39:41
>>222
>それ以上の話題
は残念ながら殆ど英語圏にあります。
ffi等は実装依存なので、まず使っている処理系がなにかを書くと適切な返事があるかも。


224:デフォルトの名無しさん
08/03/24 10:42:44
>>222
swigを使うのがわからないのか、ffiの使い方自体がわからないのか、どっちなんだよ?

225:デフォルトの名無しさん
08/03/24 10:59:49
swigは他の言語で使ったことがあるので大体見当がつきますが、
lispのサンプルコードで
cl:letと単純にletと書くのにどう違いがあるのか
などの記法が分からずつまづきます
ffiの使い方がわからないですpython.ctypesと似たようなものなのでしょうか?


226:デフォルトの名無しさん
08/03/24 11:08:01
>cl:letと単純にletと書くのにどう違いがあるのか
>などの記法が分からずつまづきます
これはCLのパッケージについて入門用のサイトで勉強すれば分かると思うので、
一歩戻ってパッケージについて学ぶことをおすすめしたいところ。

227:デフォルトの名無しさん
08/03/24 11:16:55
>>225
ffiは処理系依存だから、まずおまいさんが使ってる処理系のマニュアル嫁。
処理系にできるだけ依存したくないならcffiとかuffi使え。
でもswig使ったことあるならインタフェース書けるだろうし、
理解しなくても使えると思うんだが。

228:デフォルトの名無しさん
08/03/24 13:35:31
>>219
愛があればRubyあたりとそう大差ない普段使いができると思ってもらっておk
PerlはCPANが強力過ぎるしPythonはGUIがあるから常用を比べるのはちょっと酷

ニコニコ動画ダウンローダー(ちょっと色々混じってるが)
URLリンク(read-eval-print.blogspot.com)

ただ、この利用レベルに至るのには時間がかかるのが難点
「別にLispでなくてもいいじゃんね?」という内からの声を無視できる程度には超越しないとイカン

229:デフォルトの名無しさん
08/03/24 13:37:29
maximaを使いたくてpythonからclispに乗り換え挑戦中だ

230:デフォルトの名無しさん
08/03/24 13:48:57
maximaをアプリとして使うだけならCL知らんでも
(自分でCL使って関数書きたいとか言わなきゃ)問題なかろ。

231:デフォルトの名無しさん
08/03/24 15:00:49
>>228
Lispに愛が芽生えてきますた。
言語への慣れと理解によって大きく違うと思いますが、
Rubyと比べて、生産性は良さはどんなものでしょうか?


232:デフォルトの名無しさん
08/03/24 20:27:54
Lispは神が世界を記述するのに使った言葉。
最初に「光あれ!」とかやってたのは全部Lisp。

一方、Rubyはただのスクリプト言語。

233:デフォルトの名無しさん
08/03/24 20:32:44
URLリンク(www.aoky.net)

234:デフォルトの名無しさん
08/03/25 10:56:09
Lispはconsセルの操作しかできないと思っていた俺は
CLOSを知った今、猛烈に感動している。
凄いなCommon Lisp♥

235:デフォルトの名無しさん
08/03/25 11:01:31
確かめてないが、見えない根っこのほうではconsセルの操作しかしてねーと思うぞ

236:234
08/03/25 11:19:24
CLOSどころか、defstructでも感動してしたYO。

>>235
そうですよね。
でも、なんだかとっても凄いぞCommon Lisp。

237:デフォルトの名無しさん
08/03/25 22:26:50
>>235
まあ、足し算とか引き算なんかもできないとスゲー困るわけで...

238:デフォルトの名無しさん
08/03/25 22:41:42
cons だけで数を表現して足し算と引き算とかは実装できるよ。
ラムダ計算の初歩ですよ。遅いけど。

239:デフォルトの名無しさん
08/03/26 01:44:37
Rと組み合わせられるなんて

240:デフォルトの名無しさん
08/03/26 01:58:43
最近は何見てCLOSを勉強してるんだろ?

241:デフォルトの名無しさん
08/03/26 02:20:26
URLリンク(www.geocities.jp)

242:デフォルトの名無しさん
08/03/26 03:31:13
Rを呼べる
URLリンク(common-lisp.net)


243:デフォルトの名無しさん
08/03/26 15:19:34
accountはcustomer-name slotを持つクラスで、

(defun (setf customer-name) (name account)
(setf (slot-value account 'customer-name) name))

と定義すると、

(setf (customer-name my-account) "hoge")

と書けるのはどうしてですか?

defunを使った関数定義で
(defun (setf 〜) ....)
とdefunの直後に括弧が付く場合、何を意味することになるのでしょうか?

初心者丸出しの頓珍漢な質問だと思いますが、お願いします。

244:デフォルトの名無しさん
08/03/26 16:54:04
何でって言われてもそれがアクセサの定義の仕方だから。

245:デフォルトの名無しさん
08/03/26 17:15:34
もうちょっと具体的に説明すると CLtL2 のインヴァージョンをよく読むとよい。
OnLisp の汎変数の説明のところでもいいけど。

246:デフォルトの名無しさん
08/03/26 18:54:02
cmuclをemacs22+slime2.0で使っています。
キャラクタエンコードをutf-8を通す設定にしてslimeコンソールから日本語(に限らずutfで256以上の値を持つ文字)を食わせると
cmucl側からソケットが切断されてしまうのですがこの辺りを解決する情報をお持ちの方はいますでしょうか?



247:デフォルトの名無しさん
08/03/26 19:41:14
>>246
そもそもcmuclってutf-8通せたっけ?

248:243
08/03/26 20:49:02
>>244,245
Googleで調べていたのですが、このような機能をなんと呼ぶのかも
分からず、困っていました。
CLtL2 inversionで調べたら、出てきました。
助かりました。どうもありがとうございます。

249:デフォルトの名無しさん
08/03/27 00:50:24
>>247
単体で起動すると通りますがslime経由だと通らないのです。

sbclも試したのですが、こちらは主用途のaserveでつかっているhtmlgenの中に日本語テキストがあると出力がそこで打ち切りになってしまいますです。
ex.
aserveへ↓を食わせたときに
(:html (:body "test" :br "test2" :br "多バイトコード" ))
ブラウザでaserveをアクセスしたときに test2<br>までが出力されます(sbclのバグトラックにはレポートあがってました)
この例をcmuclでやるとコンソールから直に打ち込むとOKなのですがslime経由だと"多"が送り込まれた時にsocketがreset by peerになってしまうのです。

lispの学習で自分の手習いを実用コードで行おうというのがおこがましいのかなぁorz


250:デフォルトの名無しさん
08/03/27 07:42:04
>>249
windowとunixで
CLISP+emacs+slimeでutf-8でコードを書いていますが、
CLISPだと駄目ですか?

251:デフォルトの名無しさん
08/03/27 07:59:35
>>250
うちの .emacs にはこんなことが書いてあるが...

(setq slime-lisp-implementations
'((sbcl ("sbcl") :coding-system euc-jp-unix)
(clisp ("clisp" :coding-system euc-jp-unix))))
(setq slime-net-coding-system 'euc-jp-unix)


252:デフォルトの名無しさん
08/03/27 09:30:19
>>246
これ自分も知りたいと思ってた。
自分が確かめた範囲では、下記の通り

*UTF-8で日本語が使えるかどうか*
--そのままでOKなもの
sbcl
clisp
allegro cl
clozure cl

--処理系で日本語は使えるけれど素のSLIMEだと切断されるもの
cmucl
ecl
lispworks
abcl

ちなみに「日本語が使える」ってのは処理系で表示できてる、位の意味で、
厳密には処理系ごとに事情が違ってます。
多分、処理系に応じたswank-〜.lispを修正すれば良いんだと思うけど、
漏れは、挫折して、素でOKなものを使ってます。


253:247
08/03/27 11:07:58
>>249
> この例をcmuclでやるとコンソールから直に打ち込むとOKなのですがslime経由だと"多"が送り込まれた時にsocketがreset by peerになってしまうのです。
utf-8 で接続はできて、日本語を送ろうとしたときに接続が切れるの?

254:デフォルトの名無しさん
08/03/27 11:40:24
3日でclispを実用的に使えるレベルになろうと思って挫折した
憶えないといけないこと多いね
classの考え方が他の言語と違ったりするし

255:デフォルトの名無しさん
08/03/27 11:43:32
>>254
次に3日でマスタしようとして挫折する予定の言語はなんですか?

256:デフォルトの名無しさん
08/03/27 11:45:05
swank以前の問題でコンソールではたまたまアスキー越えた部分が
日本語になって出てきているだけじゃないか?
char-code-limitはいくつ?

257:デフォルトの名無しさん
08/03/27 11:46:18
Brainf*ck

258:デフォルトの名無しさん
08/03/27 12:51:21
>>254
あなたは何をやっても駄目そうですね。

259:デフォルトの名無しさん
08/03/27 14:26:57
>>246

cmucl 19e

- Preliminary support for external formats. Currently only
iso8859-1 and utf-8 are supported. Utf-8 support is limited
since CMUCL only has 8-bit characters.


260:デフォルトの名無しさん
08/03/27 14:32:59
swank の方でも cmucl への接続時は iso-latin-1-unix 以外の coding だと
接続できないように書かれているから、そもそも utf-8 で接続できているのが
おかしいというか勘違いだろう。

261:デフォルトの名無しさん
08/03/28 03:04:37
>>259
ガーン、有難うございました orz

そうか、external-formatだけダメってのもあるのか,Release-noteはちゃんと読まないとだめですねぇ


262:デフォルトの名無しさん
08/03/30 19:57:31
(setq y '(1 2 3 4 5 6 7 8 9 10 11))

(defun visitor (x)
(+ (car x) (visitor (cdr x))))

(visitor y)


スタックオーバーフローで死ぬんですけど・・・。
xyzzyにて。

263:デフォルトの名無しさん
08/03/30 20:03:43
すまん。自己解決した。

(setq y '(1 2 3 4 5 6 7 8 9 10 11))


(defun visitor (x)
(if (equal x nil) 0
(+ (car x) (visitor (cdr x)))))


(visitor y)

264:デフォルトの名無しさん
08/03/30 21:14:41
ねらい通りのものができたので、記念書きこ。

(setq x '(1 2 3 (4 5 6 (7 8 9 ) 10 11 )))


(defun visitor (x)
(if (equal x nil) 0
(if (listp (car x)) (+ (visitor (car x)) (visitor (cdr x)))
(+ (car x) (visitor (cdr x))))))


(visitor x)

265:デフォルトの名無しさん
08/03/30 21:21:22
一つの関数書くのに一時間以上かかってる。
鬱だ。情けない。

266:デフォルトの名無しさん
08/03/30 21:43:40
ま、最初はそんなもんじゃないかな

なんとなく別解を書いてみた

(defun visitor (x) (if (atom x) x (apply #'+ (mapcar #'visitor x))))

267:デフォルトの名無しさん
08/03/30 22:35:30
>>266
まさか同じ処理をするとは思えませんでした。
高階関数を使うとそんなにすっきり書けるんですね。
勉強になりました。ありがとうございました。

268:デフォルトの名無しさん
08/03/31 00:08:43
短く書くだけならこれで十分じゃね?↓

(defun visitor (x) (apply #'+ x))

269:デフォルトの名無しさん
08/03/31 00:10:09
…ってごめんよく読んでなかった、今のなしで orz

270:177
08/03/31 10:19:14
>>266
なるほどな〜。
私もLispを始めたばかりなので、勉強になります。

271:デフォルトの名無しさん
08/03/31 14:37:40
数式処理(maxima)で
[x1,x2,x,3...]という記号(変数?)の列を生成したいのですが
defmacroを使うのが正しいやりかたなのでしょうか?

272:デフォルトの名無しさん
08/04/01 02:24:09
URLリンク(d.hatena.ne.jp)
rcl(Rとのインターフェイス)が動かなかったので補正してみました.
ひょっとしてバグなのでしょうか?

273:デフォルトの名無しさん
08/04/01 16:15:05
swigでc++ をwrapしてclispから呼びたい
swigのcffiオプションはcはできてもc++はできないみたいなので
Allegro Common Lisp用のものを生成して
swig -allegrocl -c++ example.i
ちょっと書き換えればclispやsbclで動くものになるんだろうか


274:デフォルトの名無しさん
08/04/02 00:40:55
ACLの個人向けライセンスの安いのだしてくれんものかのぉ。orz


275:デフォルトの名無しさん
08/04/02 08:17:07
>>274
学生になったらいいんじゃね?

276:デフォルトの名無しさん
08/04/02 08:43:39
こっちはACLのチュートリアルやってみてるところだけど、
ヴァージョンが違うからなのか、そのままのとおりにならないorz
親しんでもらって売ろうという気は無いのかなと思った。


277:デフォルトの名無しさん
08/04/02 20:43:29
どのチュートリアルの話ですか?
ANSI CL 規格の範囲内ならともかく、ACL処理系依存の部分なら
全バージョンで完全な互換性を保つ事を要求するのは酷なのでは…。


278:デフォルトの名無しさん
08/04/03 00:07:32
URLリンク(www.common-lisp.ru)
すごい便利そうなんだけどドキュメントはどこ?

279:デフォルトの名無しさん
08/04/05 09:07:12
GNU clispつかってデータ処理してるんだけど
少ないデータをかませたらきちんと結果が出てくるんだけど
大量のデータをかませたら
APPLY: too many arguments given to +
[Condition of type SYSTEM::SIMPLE-PROGRAM-ERROR]
と出てくる.
スタックサイズか何かだと思うんだけど...どうやったらうまくapplyしてくれるようになりますかね?

280:デフォルトの名無しさん
08/04/05 09:37:40
エラーメッセージに何が問題か書いてあるんだけど、読んでから質問してる?

281:デフォルトの名無しさん
08/04/05 11:02:52
(reduce #'+ args)

282:デフォルトの名無しさん
08/04/05 11:55:26
>>279
Clispは引数の数に制限があるの?

283:デフォルトの名無しさん
08/04/05 20:18:01
>>282
CALL-ARGUMENTS-LIMIT
URLリンク(www.lispworks.com)

284:デフォルトの名無しさん
08/04/05 20:41:10
>>283
282じゃないけど、こんな変数あるんだ、勉強になったよ
ちなみに手元で調べた結果(全部 mac os x 上)
clisp: 4096
acl: 16384
sbcl: 536870911

285:282
08/04/05 21:40:57
>>283
ほー。こんなのがあるのですか。
ありがとうございます。
こういうのはどのように知ったのですか?

286:デフォルトの名無しさん
08/04/05 22:42:57
283じゃないけど、漏れは282同様に派手にAPPLY→エラー→調べる→知る、という流れだったね。
ANSI 規格では最低 50 ときまってるので、50 個の引数までなら CALL-ARGUMENTS-LIMIT を意識せずに安心して使える。


287:デフォルトの名無しさん
08/04/05 23:42:37
283だけど、漏れは282同様に派手にAPPLY→エラー→281のようにreduceで書く→忘却→
ある日PCL読んで制限について書いてるのたまたま発見、という流れだったね。
URLリンク(www.gigamonkeys.com)
ANSI 規格では最低 50 ときまってるけど、 CALL-ARGUMENTS-LIMIT のことは忘れて reduce 使うね。

288:デフォルトの名無しさん
08/04/06 20:13:57
おれ様用メモ。constant variable とその最小値。

multiple-values-limit >20
call-arguments-limit >50
lambda-parameters-limit >50

下は多分誰も気にしない値。
array-dimension-limit >1024
array-rank-limit >8
char-code-limit >96
array-total-size-limit >1024

289:デフォルトの名無しさん
08/04/06 22:05:03
> 下は多分誰も気にしない値。
char-code-limitはUnicodeサポートの目安に使ったりするみたいよURLリンク(lispuser.net)
array-total-size-limitも結構使う。おさまらないやつは分割したりしなきゃいけないから。

290:デフォルトの名無しさん
08/04/06 22:28:38
>>288
細かいことを言うようだが、正確にはすべて等号を含む、かな。

291:デフォルトの名無しさん
08/04/06 22:53:01
>>289
HyperSpecのぶ厚い仕様はダテじゃないのね、、、失礼しました。
>>290
(´・ω・`)

292:デフォルトの名無しさん
08/04/08 10:52:12
CL-USER> (+ 1 2)
3
CL-USER> (+ 2 3)
5
CL-USER> (+ 3 4)
7
CL-USER> (+ * ** ***)
15

こんな事ができるのね。

293:デフォルトの名無しさん
08/04/08 12:26:03
>>292
それ、便利だよね。
slimeとかじゃ使えんが。

294:292
08/04/08 12:47:38
>>293
slime+clispで試しました。


295:デフォルトの名無しさん
08/04/08 18:42:54
>>294
sbcl だとダメだった

296:デフォルトの名無しさん
08/04/08 18:52:51
>>295 うちは大丈夫だが...
; SLIME 2008-03-24
CL-USER> (+ 1 2)
3
CL-USER> (+ 3 4)
7
CL-USER> (+ 5 6)
11
CL-USER> (+ * ** ***)
21
CL-USER> (lisp-implementation-type)
"SBCL"
CL-USER> (lisp-implementation-version)
"1.0.15.41"
CL-USER>


297:デフォルトの名無しさん
08/04/08 19:01:40
つかこれCommon Lisp標準の機能でしょ?

298:デフォルトの名無しさん
08/04/08 22:38:30
この辺ですな。
URLリンク(www.lispworks.com)
"*" 辺りしか使ったことないけど。

299:デフォルトの名無しさん
08/04/08 23:32:33
一番使うのは + 系だけどな


300:デフォルトの名無しさん
08/04/09 00:47:29
*も+もいいよね。CLで好きな機能の一つだ。

301:デフォルトの名無しさん
08/04/10 12:13:27
xyzzyでは使えないの?

302:デフォルトの名無しさん
08/04/10 12:42:04
自分で試せばいいじゃないか。

303:デフォルトの名無しさん
08/04/10 16:14:13
>>301
使えないみたいですね。

304:デフォルトの名無しさん
08/04/10 16:19:08
xyzzyはCommon Lispじゃないからしょうがない

305:デフォルトの名無しさん
08/04/10 23:34:06
>>301 とかは xyzzy に REPL があるという認識なのね。
オレにはその認識はなかったので、かなり新鮮。

欲しければ実装してやればいいんじゃね。

306:デフォルトの名無しさん
08/04/11 00:06:12
REPL よりも lisp-interaction-mode 改造の方が使いやすいかも

307:デフォルトの名無しさん
08/04/11 06:35:02
*scratch*に入力した文字は消え去ることもないし、他に履歴呼び出しもあるしで
別に苦労して* + /を実装する必然性も感じられないんだけどw

308:デフォルトの名無しさん
08/04/11 08:37:14
(let ((* nil) (** nil) (*** nil))
(loop
(setq *** ** ** * * (eval (read)))
(print *)))

*付きREPLってこんな感じ?ほとんど意味無いけどw

309:デフォルトの名無しさん
08/04/11 09:39:28
>>308
実際の実装も割とそんな感じですね。

310:デフォルトの名無しさん
08/04/11 13:26:01
>>307
さほど苦労ではないから多くの処理系で実装されているのでは?w

311:デフォルトの名無しさん
08/04/11 15:53:08
多くの処理系には *scratch* がない

312:デフォルトの名無しさん
08/04/11 16:31:45
会話が成立してないな。ここは人工無脳たちも来てるから仕方ないけど。

313:デフォルトの名無しさん
08/04/12 00:32:41
>>310
いや、規格できまってるからですw

314:デフォルトの名無しさん
08/04/12 10:15:47
(funcall
(car
'(#'test . ("arg1" . "arg2"))))

これが,
FUNCALL: #1=#'TEST is not a function name; try using a symbol instead
としてエラーが出るのですが,おそらくクオーティングされてるんだと思います.
これをfuncallでできるようにやるにはどうしたらよいのでしょう?

315:デフォルトの名無しさん
08/04/12 10:40:55
ドッドペアとはな。コンスセルの節約かい?

A: cons で対応
(funcall (car (cons #'test '("arg1" . "arg2"))))

B: バッククォートで対応
(funcall (car `(,#'test . ("arg1" . "arg2"))))


316:デフォルトの名無しさん
08/04/12 11:50:56
testが決め打ちなら、

(setf (symbol-function 'test) #'car)
(funcall (car '(test . ("arg1" . "arg2")))
'(foo bar))
;-> foo
で良いだろうし

testが動的に変化するなら、
(let ((test #'car))
(funcall (car `(,test . ("arg1" . "arg2")))
'(foo bar)))
-> foo
じゃない?
function(#')付けるとややこしくなると思うよ。

もしくは最初のalistの作り方ががそもそも問題で、
(let ((test #'car)
(alist (cons #'car '("arg1" . "arg2"))))
(funcall (car alist)
'(foo bar)))

とか。
なんにしろ、何が実現したいのかで変ってくる例だと思う。
関係ないけど、SchemeとCommon Lispの名前空間の扱いの違いを理解するには良い例かも。

317:デフォルトの名無しさん
08/04/12 12:08:31
質問者は名前空間というよりクォートについて聞いているのではないか?
(define (test) 100)
((car '(test . 100)))
はSchemeだってエラーでしょう。

元質問は、俺にもかけだしだった頃に似たような経験があるなぁ。
1. #' + シンボルで関数を表現する、という説明を聞く => やってみる '(#'test) うごかNeeeなんで?
2. #'test を「評価」すると関数になるんだよー ' でクォートされたものは評価されない
3. Aha!

318:デフォルトの名無しさん
08/04/12 13:26:35
>質問者は名前空間というよりクォートについて聞いているのではないか?
>>316 >関係ないけど、Sche...
と書いてますし、質問と関係ないことについては、ご指摘の通りですw

quoteを回避するってなら、
(funcall (cadar '(#'car)) '(foo bar baz))
って方法もあるね。
さらに横道に逸れるけどw

319:デフォルトの名無しさん
08/04/12 13:41:41
On Lispで関数内でクオートしたリストを返しては駄目だとあるので、

この関数を定義して、
(defun exclaim (exp)
(append exp (list 'oh 'my)))

CL-USER> (exclaim '(hoge fuga))
(HOGE FUGA OH MY)
CL-USER> (nconc * '(goodness))
(HOGE FUGA OH MY GOODNESS)
CL-USER> (exclaim '(foo bar))
(FOO BAR OH MY GOODNESS) ←どうしてこうなるの???

上記の(list 'oh 'my)は関数が呼ばれるたびに
生成されると思ったのですが、どうして関数内で定義されている
リストが影響されてしまうのでしょうか。

320:デフォルトの名無しさん
08/04/12 14:40:32
漏れの環境では、再現しないんだけど…。
CLISP、SBCL
HyperSpec博士の出番だね。

(defun exclaim (exp)
(let ((lst (copy-list '(oh my))))
(append exp lst)))
でも同じ結果になるのかな?

321:319
08/04/12 15:06:49
>>320
> (defun exclaim (exp)
> (let ((lst (copy-list '(oh my))))
> (append exp lst)))

この関数で試してみたら、うまく動きました。
ありがとうございます。

もう一度、
(defun exclaim (exp)
(append exp (list 'oh 'my)))
を定義して試してみたら、うまく動きました。

CLisp,Slimeで試していたのですが、
上記の関数は別ファイルに書き、
c-c c-l
でloadfileしていたのですが、保存前の
ファイルをloadfileしていたのだと思います。
すみません。

322:デフォルトの名無しさん
08/04/15 13:12:56
common lispについて情報交換 質問などができるMLはどこかにないでしょうか?

323:デフォルトの名無しさん
08/04/15 15:25:05
>>322
MLでは無いですが、mixiにはコミュニティがありました。
この前見たときは8名ほどだったような。

日本語で情報交換できるMLがあったら私も知りたいですが、
このスレが一番活発だったりして。

324:デフォルトの名無しさん
08/04/15 20:58:44
>このスレが一番活発だったりして。
ありうるw

いまどきブログで書く人が多いからMLも活発にならないかもしれない。
そういってもcommon lispのブログもあまり見かけない気はするけどw

325:デフォルトの名無しさん
08/04/15 22:20:11
Common Lisp Night やろうぜ!

326:デフォルトの名無しさん
08/04/15 22:47:26
>>325
一晩かけてみんなでカッコを黒板に清書だな

327:デフォルトの名無しさん
08/04/15 23:21:03
LispDaysの中の人の更新がないしなぁ。

僕はとっても楽しみにしてるんで、日常だけでもいいから日記かいてくれないかなぁ。


328:デフォルトの名無しさん
08/04/16 02:27:49
去年ちょこっとcommon lispのブログが増えたけど、去年中に
大体がcommon lispnについて書くのやめちゃったね。
対してSchemeはあんまりそういう傾向はないみたいなんだけど。
なんでだろ。Schemeは教材が充実してるから学習日記が書きやすいとか、かな?

329:デフォルトの名無しさん
08/04/16 02:31:53
Common Lisperは仕事が忙しいんですよ

330:デフォルトの名無しさん
08/04/16 02:52:53
つまり暇な学生には人気がないってこと?w

331:デフォルトの名無しさん
08/04/16 03:34:41
ハテナ ダイアリィのcomon lisp groupでも作ればいいのかな

332:デフォルトの名無しさん
08/04/16 05:55:21
はてなにLisp系のグループは2つあるみたいだけど、うち一つは休眠中。
もう一つも登録者8人中、アクティヴなのは4人ぐらいしかいないみたい。
この現状でさらにもう一つCLersのグループを作ったとしても…

333:332
08/04/16 06:00:35
ごめん、訂正。他にSICPのグループがあって、こちらはけっこう人数がいるみたいだ。
「はてなにLisp系のグループは2つ」というのは間違いでした。

334:デフォルトの名無しさん
08/04/16 08:26:52
Common Lisp ブログ、何でもいいから沢山あるといいね。
新仕様 Common Lisp The 3rd とかあると盛りあがるんだけど。

335:デフォルトの名無しさん
08/04/16 08:39:09
>>334
> 新仕様 Common Lisp The 3rd とかあると盛りあがるんだけど。
その仕様にフジコちゃんは入ってますか?

336:デフォルトの名無しさん
08/04/16 10:08:27
不覚にもワラタ


337:デフォルトの名無しさん
08/04/16 10:37:37
Common Lisp は大事なものを盗んでいったんですねわかります!

338:デフォルトの名無しさん
08/04/16 10:41:46
>>337
俺様から怠惰を盗みやがったぜ

339:デフォルトの名無しさん
08/04/16 12:40:05
>>332
別に沢山あっても良いと思うけど、纏まってないといけない理由もないだろうし。
CL専門だったら漏れも登録したいと思うよ。
もしくは逆にテーマを限定してCLOS専門とかねw

340:デフォルトの名無しさん
08/04/16 13:50:47
hatena diaryのweb リングのサービス終了ですか
common lispのグループは便利だった

341:デフォルトの名無しさん
08/04/16 22:26:26
>>339 MOP専門ほしい


342:デフォルトの名無しさん
08/04/16 22:33:29
>>339
同意。グーグルが勝手に拾ってくれるから、必要なのは
Webに書くときには単に Lisp ではなく、ちゃんと Common Lisp と綴ることだと思う。
だれか「CLOSプログラマーのためのJava入門」とか書いてくれたら嬉しいんだけど。

343:デフォルトの名無しさん
08/04/16 22:41:03
俺のサイトはグーグル拾ってくれない…
まあ CLOS の事は書いてないけど

344:デフォルトの名無しさん
08/04/16 22:50:36
>>343
宣伝しなきゃですよ。ここへURLを晒すとか。w

345:デフォルトの名無しさん
08/04/16 23:47:30
>>342
CLOSとJavaて水と油ですやん。書く奴がいるとは思えない。
「CLOSプログラマーのためのC++入門」ならまだ分かる。
両方generic function萌えなので。


346:デフォルトの名無しさん
08/04/16 23:57:33
>>345
generic functionという用語だけ同じでも中身別物じゃんかw

347:デフォルトの名無しさん
08/04/17 00:16:24
いや、まず、CLOSプログラマがCLOSについて書くべきだろw

348:デフォルトの名無しさん
08/04/17 01:52:09
まず↓の絶版状態を解消するのが先決だな。
URLリンク(www.amazon.co.jp)

どっかの出版社タノムぜ

349:デフォルトの名無しさん
08/04/17 01:57:19
>>348
URLリンク(www.fukkan.com)


350:デフォルトの名無しさん
08/04/17 07:42:11
CLOSって何で流行らないのかな
マクロとCLOSってめちゃめちゃ強力な気がするんだけど(まだ勉強中)


351:デフォルトの名無しさん
08/04/17 07:47:50
そう思えるのはS式に抵抗がなくなりつつあるからでしょう。
Lispやる前を思い出してみると、マクロと聞くとCの#defineを想像したり、
大量の括弧をみただけでダメ出ししていたりしませんでしたか?

352:デフォルトの名無しさん
08/04/17 08:28:55
>>350
その前にCL自体を流行らせないと。

353:デフォルトの名無しさん
08/04/17 08:32:15
>>346
二大「特殊化」言語だよ。

コンパイル時か、実行時か
before/after daemon

大きく違うのはこのくらい。

>>350
Common Lispが流行ってませんので…

けどC++にかなり大きな影響与えてる。
C++の方は特殊化に関する部分だけでも、
まだいろいろと拡張を続けてる。
Generic programmingやaspect oriented programmingの
源流の一つだね。

354:デフォルトの名無しさん
08/04/17 08:40:09
>>353
> 大きく違うのはこのくらい。

それに起因して違いがありすぎるだろ。別物じゃねーか。

355:デフォルトの名無しさん
08/04/17 08:47:26
>>345
Java:だいたい全てがオブジェクト,Guy Steel Jr が参加
CL:全てがオブジェクト,Guy Steel Jr が参加

同じだ!JavaとCLはほとんど同じだよ!


356:デフォルトの名無しさん
08/04/17 09:26:25
Javaはガチガチのクラス指向だからなあ。

357:デフォルトの名無しさん
08/04/17 09:52:39
jvmの上で動くCommonLispがあればいいんじゃないか?
コンパイルもバイトコードに落ちるようなの。


358:デフォルトの名無しさん
08/04/17 10:34:44
>>357
Armed Bear Common Lisp (ABCL) が既にあるけど何か?

359:デフォルトの名無しさん
08/04/17 10:46:27
>>358
アンテナ壊れてたよ、ありがと.
週末に試してみる。


360:デフォルトの名無しさん
08/04/17 13:47:15
>>341
そうだね、MOP全般ってのも良いかも。
とりあえず、CLOSの情報が増えさえすれば良いんだし。
CL、Gauche、他にどういうのが対象言語かな。

361:デフォルトの名無しさん
08/04/17 14:09:26
サイトの宣伝していいの?
common lisp  packageで検索してくる人が5人/day
ぐらいのサイトだけど

362:デフォルトの名無しさん
08/04/17 14:22:22
日に5人もCLパッケージで迷える子羊がいるんだなw
ANSI Common Lispでもパッケージの解説は親切でないかもね。

363:デフォルトの名無しさん
08/04/17 15:24:33
パッケージはCLtL2(≒ANSI)で大きく仕様が変わったせいで少し混乱してるね。
CLtL2の記述を見ても、GLSは新しい仕様があまり好きではないのではないかと思える。

364:デフォルトの名無しさん
08/04/17 16:10:10
混乱っていえば、ANSI、cltl1、cltl2の関係も混乱するね。
仕様について言うなら、とりあえずANSI(HyperSpec)を規準にすれば
良いんだろうけど…。
HyperSpec翻訳されないかなあ。
やっぱり、みんなHyperSpecを一番読むわけでしょう?

有志で、オンラインで翻訳しまくるというのはどうか。
もちろん許可がとれれば、だけど…。

365:デフォルトの名無しさん
08/04/17 19:21:58
>>364
とりあえずさっと確認したいときはHyperSpecだね。
じっくり調べるときはCLtL2を開いてGLSの名調子に浸る。w

366:デフォルトの名無しさん
08/04/17 23:14:17
おれ常にHyperSpecしか見てなかったよ
>>364
よく知らないけど、HyperSpecってどこかが権利もってんだよね?
何かまるごとダウンロードしようとして躊躇した記憶がある

367:デフォルトの名無しさん
08/04/17 23:19:36
>>366
丸ごとダウンロードは別に問題ないんじゃないの?
圧縮されたファイルで用意されてるし。

むしろ皆でlispworksに押しかける方が無茶な気がするが。

368:デフォルトの名無しさん
08/04/17 23:29:53
>>366
URLリンク(www.lisp.org)

商用利用しないかぎり複製・再配布は自由。ただし改変は認めない。

みたところ翻訳の可否については明記されていないから、これに関しては
問い合わせてみないとわからないね。

369:デフォルトの名無しさん
08/04/18 00:06:31
そうだ JIS Common Lisp を作ればいいんだ

370:デフォルトの名無しさん
08/04/18 00:46:46
JISか…。
ISLISPってのがあるけど、割と日本が果たした役割は大きかったらしいよ…。

371:デフォルトの名無しさん
08/04/18 02:14:33
ほとんど忘れ去られている悲しい規格だな>ISLISP

372:デフォルトの名無しさん
08/04/18 07:17:00
>>367,368
おお、ありがとう。法律用語の読みかたが自信なかったんだよ。
これで遠慮なくHyperSpecを読みこめるよ!

373:デフォルトの名無しさん
08/04/18 11:31:13
>>369
ECMA Script の JIS みたいに「引用」だけで済まされる、というオチが見える

374:デフォルトの名無しさん
08/04/18 12:12:17
少なくともANSI相当のものが日本語になるんじゃね?

375:デフォルトの名無しさん
08/04/18 13:06:54
いや、何故かISLISPが元になってJIS LISPができそうな気がする

376:デフォルトの名無しさん
08/04/18 13:37:38
>>375
つ JIS X3012

377:デフォルトの名無しさん
08/04/18 14:23:27
どうやら、漏れは過去を予言してしまったようだなw

378:デフォルトの名無しさん
08/04/18 15:53:43
JIS Prolog なんてもっとマイナな感じだな

379:デフォルトの名無しさん
08/04/18 21:17:06
JIS規格文書はJISが権利を持ってることになる。
翻訳が現れることは望ましいけれど、JIS化はあんまりよろしくないと思う。

380:デフォルトの名無しさん
08/04/18 21:25:12
後、誤訳してもJIS的にはそっちが正しいことになっちゃうしな。

381:デフォルトの名無しさん
08/04/18 21:25:42
>>379
無料で閲覧できるようになったのは進歩だけど、印刷はもちろん、検索さえできないのがアカンよね。
海外やISOの規格事情も似たようなもんだけどね。

382:デフォルトの名無しさん
08/04/18 21:33:25
印刷は頑張れば出来るw

383:デフォルトの名無しさん
08/04/18 21:41:25
検索も自分用はOCRソフトで・・・w

384:デフォルトの名無しさん
08/04/18 23:08:46
>>381
印刷禁止フラグは簡単に解除できる。
ム板住人ならみんなやってると思ってた。
ただ、ウェブで見られるPDFは文書をビットマップ画像にしたものを貼り付けてあるので、
検索はOCRを使わないと仕方ない。

385:デフォルトの名無しさん
08/04/18 23:19:04
印刷して使うっていう発想がなかった。

386:デフォルトの名無しさん
08/04/18 23:51:26
ちなみに有料(ダウンロード販売)の規格票もビットマップ画像だよ

387:デフォルトの名無しさん
08/04/19 08:27:47
>>386
検索できないんじゃ紙で売った方がいいよねぇ。
電子化の意味が有体物じゃ無いことだけじゃないか。



388:デフォルトの名無しさん
08/04/20 19:51:05
それが日本クオリティ...なのか?
ANSIの電子化ってどうなんだろうね。

389:デフォルトの名無しさん
08/04/20 20:03:29
>>388
金出せばやるだろ。お役所なんてそんなもんだ。

390:デフォルトの名無しさん
08/04/20 20:08:05
D&Eで規格団体のクソっぷりが書かれてたから、アメリカでも事情は同じだと思う。

391:デフォルトの名無しさん
08/04/21 01:28:05
全部RFCになればいいのに。w

392:デフォルトの名無しさん
08/04/21 02:56:23
>>391
4/1版でマジ切れとか鵜呑みとかの間抜けな人がいるから全部はヤダ


393:デフォルトの名無しさん
08/04/21 20:51:58
clispで型推論が無いのはなんで?

394:デフォルトの名無しさん
08/04/21 21:21:10
型推論のどういうメリットを期待してる?

395:デフォルトの名無しさん
08/04/21 22:36:12
>>394
コンパイルしたときのエラーと
高速化かな

396:デフォルトの名無しさん
08/04/21 23:13:15
>>395
それをインタプリタの clisp に期待するのは何故?

397:デフォルトの名無しさん
08/04/22 00:06:49
>>395
せっかくオープンソースなんだから、君が書き加えてあげれば喜ばれるかもよ

398:デフォルトの名無しさん
08/04/22 01:01:34
・オープンソースの法則
何故か誰も修正しない

399:デフォルトの名無しさん
08/04/22 07:36:31
俺は自分で気付いたものは割と修正するけどな。
わずかな努力で割と多くの人の役に立てる(ソフトのユーザ人口によるけど)。

400:デフォルトの名無しさん
08/04/22 10:08:53
elfやcoff操作するライブラリが欲しいんだけど、どこかにないかな?
binutilからBFD抜き出してライブラリにしてラッパ作った方が早いかな?

401:デフォルトの名無しさん
08/04/23 16:54:38
URLリンク(www.lisp.org)
exampleで
with-open-fileと一緒にdoを使ってるけど
xyzzyの人のサイトではほぼ必ずwhile readline

どっちが推奨なの?

402:デフォルトの名無しさん
08/04/23 17:29:27
xyzzy上のLispではwhileという関数がありますが、Common Lispにはありません。

403:デフォルトの名無しさん
08/04/23 18:00:26
closの使い道がいまひとつわからない

最短時間で(汚く)プログラム組むのに

namespace
分かりやすい名前で defun
map

あたりは使う

すでに組んでしまった汚いコードを無理やり他のプログラムとくっつけるのに
マクロは少し使う

はじめから綺麗に書こうと思わないかぎりclosは使わない?


404:デフォルトの名無しさん
08/04/23 20:16:30
>>401
一言で言えば xyzzy は Common Lisp ではない、というだけ

405:デフォルトの名無しさん
08/04/23 22:29:16
>>402
細かいこと言うと、関数じゃなくてマクロね

406:デフォルトの名無しさん
08/04/23 22:54:07
white(笑)
for(笑)

407:デフォルトの名無しさん
08/04/23 22:58:20
white って何よ

408:デフォルトの名無しさん
08/04/23 23:20:48
>>401
whileの方が簡潔にかけるからwhileがいいんじゃない?
CLだとloopとかdoだけど。馴染みのない人にはdoとか嫌われるしね。
whileはemacs経由でxyzzyに導入されたのかしら。

409:デフォルトの名無しさん
08/04/23 23:35:08
>>403
割と後づけだし、資料が少ないんだよね。
Paul GrahamとかPeter Norvigとか有名な本書いてる人達が
CLOSをプッシュしてないこともあって自著でも
CLOSの解説とかあんまりしてないし、CLOSは何だか不運に感じるなー。

それと、汚く書くってことなら、CLOSは相当なものを書けるとおもうけどw

410:デフォルトの名無しさん
08/04/24 00:12:09
>>409
CLtL2でも他の章はGLSの蘊蓄炸裂なのに、CLOSのとこはANSI原案丸写しという感じで
やる気が感じられないよね。

411:デフォルトの名無しさん
08/04/24 07:37:48
おれも素人だけど、
・いろいろ状態を持ってるオブジェクトっぽい何かがある時
・既存のライブラリがclosで出来てる時
・似たようなプログラムが沢山できそうな時
はclos使おうと思うなぁ。

schemeの話だったかもだけど、shiroさんがある規模より大きくなったら
オブジェクト指向を使いたくなる、みたいなこと書いてなかったかな?

412:デフォルトの名無しさん
08/04/24 08:24:44
>>411
> ・既存のライブラリがclosで出来てる時
おれはこの時だけ使いたくなるなぁ。
Allegroみたいな商用だとclos使ったライブラリ揃ってるっぽいけど、
普段あんまり見かけないから相対的に出番が少なくなるよね。

413:デフォルトの名無しさん
08/04/24 09:10:01
clos使わないと混乱するほど巨大な物書いたこと無いから正直使い処がわからんです。


414:デフォルトの名無しさん
08/04/24 10:12:26
うーん、CLはマルチパラダイム言語なわけで、
CLOSはそのうちの一つのパラダイムな訳だから、
規模云々より単に手法の一つだと思うんだけど…。
小さい規模でも綺麗にまとまってるのも沢山あると思うよ。
身近な例で言えばASDFとかどうだろう。

415:デフォルトの名無しさん
08/04/24 14:34:26
CLOSがあまり使われないのは、
基本関数のスタイルとCLOSのスタイルがちょっと違うからかも。
CLOSセントリックに書き直したLisp方言も面白そう。


416:デフォルトの名無しさん
08/04/24 14:42:00
とりあえず defstruct よりは defclass かな、という程度だね。
typecase でディスパッチするよりは defmethod を使うという感じ。
defun をやめて、すべて defmethod を使うというスタイルにはなれないな。

ま、便利なときだけ使えばいいんじゃね?

417:デフォルトの名無しさん
08/04/24 15:58:33
lambda式直使いとmulti dispatchの相性が悪い。

418:デフォルトの名無しさん
08/04/24 19:01:22
そうなの? どういう局面で?
無名総称関数はANSI仕様から消えちゃったけど、それのこと?

419:デフォルトの名無しさん
08/04/28 00:15:31
なんか急に流れが止まったな
>>414
へー、asdfってCLOS使ってるんだね。参考になった。
>>412
おれはこの前AllegroのSAXライブラリ使ったよ。
allegroserve もCLOSの例として面白いかも。

思い付きだけど、
がちがちに仕様が決まっているものを実装するときCLOSを使うといい、
という説はどう?

420:デフォルトの名無しさん
08/04/29 01:23:58
どうだろう…。
個人的にはガチガチに仕様が決まったようなプロジェクトでも
Lispがバンバン採用されるようになることを祈りたいw

421:デフォルトの名無しさん
08/04/30 06:12:32
sbclをアンインストールする方法はないでしょうか?
finkを導入した所リストの中にsbclが有りそちらで一括管理したいので
サイトから直接ダウンロード&インストールしたsbclをアンインストールする方法を
教えていただけないでしょうか?
よろしくお願いします

422:デフォルトの名無しさん
08/04/30 07:36:14
漏れが確認したところでは、特にアンインストールのスクリプトはないみたい。
なので、手動で削除する他ないのかな?
といっても/usr/local/lib/sbclと/usr/local/bin/sbclを削除するだけのような
気もするけど…。
単純にパスの設定を/usr/local/より/sw/の方を前にもってくるとかじゃ駄目なのでしょうか。

423:デフォルトの名無しさん
08/04/30 08:15:10
別にlispに限った話じゃないけど、自分でインストールするなら
インストールのログくらい取っておけよと思う。

424:デフォルトの名無しさん
08/04/30 08:52:30
>>423
まあ、その辺りがUNIX文化とWin/Mac文化の違いというところでは?
アンインストーラを使わずに
適当に実行ファイルを消したらシステムの整合性が崩れて
面倒ことになる、と思ったのかもしれないし。


425:デフォルトの名無しさん
08/04/30 17:16:51
>>422
ありがとうございます。
コマンドラインから検索した所
そのフォルダがヒットしましたので削除したいと思います。

>>423
今後そうしたいと思います。
精進いたします。

>>424
やはりその不安が有ったのです。
今後プログラミングの学習はマスターできるまで
仮想のlinux上でやりたいと思います。

426:421
08/04/30 17:28:37
/usr/local/share/man/man1/sbcl.1
というディレクトリが有るのですがこれの
man1というディレクトリはシステムのフォルダですか?
それともインストール時に自動的に作成されるものですか?
よろしくお願いします


427:デフォルトの名無しさん
08/04/30 17:36:26
finkうんぬんとあったからMac OS Xなの?
UNIXでもその辺は全部一緒じゃないんだよな。

Mac OS Xの場合、Mac OS Xは/usr/localを使わない。
どのパッケージがどのディレクトリを使っているかは、
/Library/Reciepts/*/Archive.bomをlsbomすれば分かる。
ただし、Mac OS Xの場合、サードパーティの配布は、
pkg形式使ってないことが多いから、
ファイルの追跡は諦めるしかないと思う。

SolarisやLinux(rpm, deb)のバイナリーパッケージは、
そういうの追いかけるの得意なんだけど。


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

5391日前に更新/210 KB
担当:undef