【入門】Common Lisp ..
[2ch|▼Menu]
175:デフォルトの名無しさん
08/03/12 20:19:19
処理系のCLパッケージのようにc再定義されると困るようなもの
(carやcdrが再定義されるとこまるetc)には掛かっていますが、
普通のものには殆ど掛かっていないと思われます。
また、パッケージのロック機能自体オプションだったと思うので、
処理系依存です。

176:デフォルトの名無しさん
08/03/12 21:52:26
172です.

>>175
> 処理系のCLパッケージのようにc再定義されると困るようなもの
なるほど,そう言うことですか.

toplevelとpackageで混乱してます.
もうちょっと勉強してきます.
ありがとうございました.


177:デフォルトの名無しさん
08/03/21 10:03:34
Common Lispは、Javaで言うBigDecimalのような十進数演算ができる
ライブラリや関数はありますか?

178:デフォルトの名無しさん
08/03/21 10:18:08
BCD より Bignum で小数位置を適当に自分で持ってあげたほうがいいんじゃないかな。

179:177
08/03/21 10:50:37
>>178
どうもありがとうございます。
やはりそうですか。
Googleで調べてみたのですが、見つかりませんでした。

180:デフォルトの名無しさん
08/03/21 11:12:05
表示は変かもだけどratioで計算するのでは不満?


181:177
08/03/21 11:31:12
>>180
お金が絡むようなWebアプリに適用できるのか(簡単に書けるのか)、
調べているのですが、ratioでも適用できると思いますが、
十進数演算を素直に記述できるような標準的な
ライブラリがあるのかなと思いまして。




182:デフォルトの名無しさん
08/03/21 12:06:32
maximaが大きい行列を実質扱うことできないと前に検索したblogに書いてあったのですが本当なのでしょうか?

183:デフォルトの名無しさん
08/03/21 19:03:50
大きいの定義は。

184:デフォルトの名無しさん
08/03/21 20:28:33
うんこ/おしっこ

185:デフォルトの名無しさん
08/03/22 10:55:35
Common Lispの引数の順番は統一性がないのでしょうか?

例えば
(etl オブジェクト インデックス)
(gethash キー オブジェクト)
となっていますが、
他の関数もこのように、てんでんばらばらなのでしょうか?
使っているうちに慣れると思うけど、なんだか美しくないなぁ。

186:185
08/03/22 11:25:52
Practical Common Lispを読み進めていったら

By an accident of history, the order of arguments to gethash
is the opposite of elt--elt takes the collection first and then
the index while gethash takes the key first and then the collection.

と書いてありますね。
他の関数は大丈夫なのかな?

187:デフォルトの名無しさん
08/03/22 11:58:26
みんな一度は考える事だな。でもまぁ、ハッシュと配列アクセスの引数が揃うと何かすごい進歩がある、
というならともかく、気分で非互換にするわけにもいかなかったんだろう。
まぁ次世代のLispの時には揃うかもね。

あるいは↓のように自分でなんとかするとか。コンパイラががんばれば効率はかわらんはず。

;; c.l.l のスレより転載 URLリンク(groups.google.com)
(proclaim '(inline hashget))
(defun hashget (table key &optional default)
(gethash key table default))
(defun (setf hashget) (value table key &optional default)
(setf (gethash key table default) value))

どうしても許せん、ならSchemeとか…

188:デフォルトの名無しさん
08/03/22 12:21:45
Common Lispは惰性と妥協の塊だからしょうがない

189:185
08/03/22 15:49:42
>>187
どうもありがとうございます。
リンク参考になりました。

>>188
やはりそうですか。
JavaやRuby等の、比較的最近の言語から見ると
関数名や引数の順番の一貫性の無さが気になってしまいます。

190:デフォルトの名無しさん
08/03/22 16:20:14
上の例のように関数名や引数の順番の一貫性の無さが気になったら
自分好みに変えられるのがLisp風。
むしろそこを気にかけてほすい。
気になった箇所を徹底的に自分好みに変更するのも勉強になります。

191:デフォルトの名無しさん
08/03/22 16:48:46
一貫性が無い、のは事実だけど、
覚えることがそもそも少いから、あまり気にしたことないなぁ。

192:デフォルトの名無しさん
08/03/22 21:40:12
「lisp」という単語でネットサーフィンしていたら「仕様記述からソース生成」などという言葉が出てきたのですが、ありえないですよね?
ただの電波ですよね?

193:デフォルトの名無しさん
08/03/22 21:52:16
その「仕様記述」とやらによるけど、厳密さが十分にあれば可能ですよ。別にLispに限らないけどね……
S式があるおかげでフォーマットに悩まないとかマクロのおかげでコード生成が身近というあたりが利点かもね。
でも、あいまいな仕様でもLispをつかうだけで魔法のようにまともなソースができあがる、なんて話ならありえない。

194:デフォルトの名無しさん
08/03/22 22:12:38
あいまいでない仕様などそう簡単に書けないし、激しく無理がありそうな気がします。

195:デフォルトの名無しさん
08/03/22 22:16:07
>>192
Leeを思い出したww

196:デフォルトの名無しさん
08/03/22 22:19:50
無理なものは無理だろうね。
元ネタがどこだなのかわからんから推測しか言えないが、厳密にかける世界の話だったんじゃないかな?
ファイルフォーマット解析とか状態遷移とかコンパイラとか、仕様を厳密に記述するほうが自力でゴリゴリコーディング
するより楽、という話ではないかな。

197:デフォルトの名無しさん
08/03/22 22:19:53
て言うか、「仕様記述からソース生成」なんて言うのは、文字列処理や
リスト処理がたくさん出てくるので、Lisp 向き。



と言う時代もあったけど、最近の言語はどれもそれなりに文字列処理や
リスト処理に不自由しなくなってきたので Lisp だからどうと言うこと
は少なくなくって来た。

198:デフォルトの名無しさん
08/03/22 22:30:05
>>197
実行時にevalがあるような言語だけじゃないかな?
lispだとマクロが化け物だから可能な領域ってのもあるからそこを前提にされると太刀打ちできない気がする。



199:デフォルトの名無しさん
08/03/22 22:30:16
>>192
仕様記述からプログラムが書けるとすれば、その仕様記述は(自然言語とかけはなれた)
曖昧性の無いもののハズで、それは完全にプログラムそのものだろ。
可能ちゃ可能だろうけど、それに何の意味があるんだ?
といつも思う。

200:デフォルトの名無しさん
08/03/22 22:40:42
発想が逆なんじゃないかな?
仕様を定義するほうが、プログラム書くより量的に少ない場合とか、
そうでなくても厳密な仕様をミスなく書き下す手間が自動化できてラッキーとか、
モデルチェッカとかでチェックした仕様をソースにできるとか、
図でプログラム読めない人(←でも業務とかその道のプロ)に漏れや抜けがないかを
チェックしてもらって、そっからミスなくソースができてうれしーとか。


201:デフォルトの名無しさん
08/03/22 22:54:24
そもそも実用になっていないって事が良くわかった。

202:デフォルトの名無しさん
08/03/22 22:58:56
いや、部分的であれば仕様記述からのプログラム生成は十分使い物になってるし、
実務でも使ってるよ。単なるちょっとした規模のマクロ、って意味だけど。

203:201
08/03/23 00:25:47
>>202
想像できないけど、実務で使われているなら納得せざるおえないのか。

204:デフォルトの名無しさん
08/03/23 00:57:26
DSL の一種と思えるのかな?

205:デフォルトの名無しさん
08/03/23 05:57:22
CでYaccとか使ってみれば想像できるようになるかも

206:デフォルトの名無しさん
08/03/23 07:01:23
>>205
それで想像できるなら正規表現使えば想像できる筈

207:デフォルトの名無しさん
08/03/23 08:47:24
そーいわれれば lex, yacc はそれに近いなあ

208:デフォルトの名無しさん
08/03/23 09:12:26
>>200,202
それをプログラムではなく仕様と呼ぶのは何故なんだぜ?
売り込みに来たヤツがそういってるから?

209:デフォルトの名無しさん
08/03/23 10:31:37
ずいぶん頭固いね。

仕様書って文章で書いた奴しか見たことないのかな。

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
型推論のどういうメリットを期待してる?


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

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