トップページtech
981コメント353KB

【入門】Common Lisp その6【質問よろず】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/02/18(水) 00:22:16
lispを触ってみたい入門者のQ&A
初心者のQ&A
本スレでは恥ずかしくて聞けない人のQ&A
本スレは高度すぎて割り込めない人のQ&A
linuxでなくてwindowsでやりたいんですが・・・Q&A
lispを使用してC#やJAVAの代替にするための方法(おまけ)

ま、ゆっくりたりましょう。

「いいものの本質は、いかなる時代においても変わらない」byパワーズ

(list
(url http://pc8.2ch.net/test/read.cgi/tech/1101386936/l50 :part 1)
(url http://pc11.2ch.net/test/read.so/tech/1140012484/l50 :part 2)
(url http://pc11.2ch.net/test/read.so/tech/1181479267/l50 :part 3)
(url http://pc11.2ch.net/test/read.cgi/tech/1201402366/l50 :part 4)
(url http://pc11.2ch.net/test/read.cgi/tech/1215834213/l50 :part 5))

□テンプレート置き場□
ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)
0175デフォルトの名無しさん2009/05/08(金) 13:07:33
>>174
pdfならapressのページで登録すれば配布されているんだよ。<PCL
もっとも原著だろうが訳書だろうが、本をもってるほうがなにかと
便利なんだが。
0176デフォルトの名無しさん2009/05/08(金) 15:58:21
>>175
本は目にやさしいしね
力尽きたときに寝転がりながらパラパラ読めるのがいい
全体把握もしやすいし、索引がしっかりしていれば検索もしやすい

pdfってうざいなあと思っちゃうんだけど、これは印刷して読んでください用ということなのかな?
emacsでpdfって読めないのかなw
そしたら便利なんだが

slime便利だね
関数補完(一覧)が出るだけでも勉強効率があがって、すごく助かる
0177デフォルトの名無しさん2009/05/08(金) 16:51:39
買えって、てっきり翻訳版のことを言ってるのかと思った
あれよくないの?
0178デフォルトの名無しさん2009/05/08(金) 17:25:50
PDFも上手く作ってあれば画面で読んでも快適だよ。
目次からジャンプしたり好き勝手に検索したりというのは紙じゃ無理だ。
単にスキャンしただけというのは駄目だけど。
形式は別にPDFじゃなくてもいいんだけど、数式や特殊記号や図が多く
なりがちな専門書は他にいい形式がないんだよね。
本を何冊も持ち運ぶのは大変だけど、データなら何冊あっても楽だ。
もう紙の辞書なんか誰も使ってないのはこの便利さがあるからでしょう。

ただ寝転んだままノートパソコンの画面をみるのはつらいので、
日本でもKindleが使えるようになって欲しい。とりあえず日本語出なくても
いいから。洋書の専門書は重いんだよなあ。
0179デフォルトの名無しさん2009/05/08(金) 17:32:29
>目次からジャンプしたり好き勝手に検索したりというのは紙じゃ無理だ。
見覚えのあるテキストをもう一度読みたくてざっとめくるってのができないのが電子書籍の欠点なので僕は紙の媒体を捨てられない
0180デフォルトの名無しさん2009/05/08(金) 19:13:52
>>178
>もう紙の辞書なんか誰も使ってないのはこの便利さがあるからでしょう。
羅和とか大漢和とか古語辞典も全部電子化されればいいのになあ
紙媒体しかない辞書が多過ぐる
0181デフォルトの名無しさん2009/05/08(金) 20:30:36
電子版は定期的にシリアルナンバーを打ち込まないと使えないとか
他に何を仕込まるか分からないとか、そういうのをやめてくれたらなあ
0182デフォルトの名無しさん2009/05/09(土) 12:09:45
数年ぶりに開いた本に陰毛がはさまってることだってあるじゃないか
0183デフォルトの名無しさん2009/05/09(土) 14:23:45
apply ってどういうときに使うんですか?
例えばOn Lisp って本に↓のように書かれてたんですが
(apply #'format *query-io* args)
これって
(format *query-io* args)
ってやるのと変わらないですよね?

シンボルの値に関数が入ってるんだったら apply を使う意味はあると思うんです。
例えば関数を 仮引数 fn で受けてるんだったら
(fn args)
は動作しないから
(apply fn args)
ってやると思うんです。

でも最初の例のように 関数は format って分かってるのに apply を使う意味は何なんでしょうか?
0184デフォルトの名無しさん2009/05/09(土) 14:47:34
formatをlistに置き換えて考えればわかる
(apply #'list 1 2 '(3 4 5)) => (1 2 3 4 5)
(list 1 2 '(3 4 5)) => (1 2 (3 4 5))
01851832009/05/09(土) 14:51:29
今気づいたのですが同じ本に↓のようにありました。
http://user.ecc.u-tokyo.ac.jp/~tt076524/onlispjhtml/functions.html
> 以下の4個の式はみな同じ働きをする:
> (+ 1 2)
> (apply #'+ '(1 2))
> (apply (symbol-function '+) '(1 2))
> (apply #'(lambda (x y) (+ x y)) '(1 2))

これだと関数が分かってるときに
何でわざわざ apply を使うのかますます分からないです。
気にするなって事なんでしょうか。
0186デフォルトの名無しさん2009/05/09(土) 14:58:54
(apply #'+ '(1 2))と(+ 1 2)が同じってことわかってる?
(+ '(1 2))とか(funcall #'+ '(1 2))だとエラーになるよね
01871832009/05/09(土) 15:13:20
>>184
引数をリストで渡せて、その要素が一つ一つ関数への引数として渡せるのが便利だからって事ですよね。
確かにそれだと納得できます。ありがとうございます。

a が (1 2 3) として
(list a) のように関数を先頭にした表記で
実際には (list 1 2 3) と引数を展開して実行できるやり方はないんですか。
0188デフォルトの名無しさん2009/05/09(土) 15:39:44
sbclrcをコンパイルする事はできないでしょうか?
sbclrcでシェバング対策やらasdfのインポートやらをしていたら
sbclを立ち上げてから*のプロンプトが出るまでに5秒ぐらいかかるように
なったのですが、皆さんもこれぐらいなのでしょうか?
よろしくおねがいします。
あと、sbclに履歴機能をつける方法とEmacsキーバインドで
操作できる方法が有ればよろしくおねがいします。
0189デフォルトの名無しさん2009/05/09(土) 15:46:34
>>188
>あと、sbclに履歴機能をつける方法とEmacsキーバインドで
>操作できる方法が有ればよろしくおねがいします。

Slimeでも何でもいいからEmacsの中で使えばいいのでは。
0190デフォルトの名無しさん2009/05/09(土) 15:49:21
>>188
sbclrcの内容を foo.lisp とかに移してからそれをコンパイルして
foo.fasl にし、sbclrc はそれをロードするだけにするとか。
01911592009/05/09(土) 15:50:21
>>188 sb-ext:save-lisp-and-die じゃあかんの?
0192デフォルトの名無しさん2009/05/09(土) 18:59:29
>>190
そうしました、しかしsbclに標準でそういった機能がつくと
うれしいですね。(rc-compile)見たいな...
01931922009/05/09(土) 19:09:09
sbclのtoplevel.lispをざっと読んでみましたが
もしかしたら、sbclrc.faslというファイルが有ればそちらを
優先して読み込むと言う設定に改造してコンパイルすれば
良いかもしれませんね。ついでに(rc-compile)関数を組み込みにして
ファイル名を指定しなくても組み込みのsysinit-pathname
という関数を利用して適切なsbclrcファイルを選択してコンパイル
してくれるという関数が作れそうです。
0194デフォルトの名無しさん2009/05/09(土) 21:58:39
(defun foo (...) ...)
の中身をみたいなのだけど

clispだと

#'foo リターン

だけで関数のソースみれる

sbclだとできない

sbclでfooのソースが帰ってくる関数ないのでしょうか
0195デフォルトの名無しさん2009/05/10(日) 00:15:10
Common LispでOpenGLを使うライブラリみたいなのはありますか?
0196デフォルトの名無しさん2009/05/10(日) 00:25:57
http://www.cliki.net/OpenGL%20Bindings
0197デフォルトの名無しさん2009/05/10(日) 00:50:16
どうもです。ありがとうございます。
0198デフォルトの名無しさん2009/05/10(日) 12:17:48
cmucl の最新スナップショットではutf8が使えるようになったよ。
これで高速なcmuclが日本語でも使える。ただし、32bit x86 のみ
0199デフォルトの名無しさん2009/05/10(日) 14:32:19
>>198
最新じゃ無くてもutf8は使えてたぞ
日本語はダメだったけど

0200デフォルトの名無しさん2009/05/10(日) 14:59:37
metatilitesの中のon lispのコード入ってるんだね
こういう便利なものってみんなどうやってみつけてるの?
0201デフォルトの名無しさん2009/05/10(日) 16:19:01
CLiCCを動かせた人いますでしょうか?
いろいろコードの手直ししないとコンパイル通りませんよね?
最後にlispのコードよむところで
ffiがどうとかいうエラーでてあきらめたのですが
0202デフォルトの名無しさん2009/05/10(日) 21:10:48
imaximaってslimeみたいにソース編集しながら
式の評価をいろいろ試せる環境なわけじゃないんだね
0203デフォルトの名無しさん2009/05/10(日) 23:53:07
素直に、質問しろよ。
0204デフォルトの名無しさん2009/05/11(月) 09:26:05
>>207
inferior-maxima-modeと組み合わせてみればできるんだけど、その方法はあまりかかれてないね。
0205デフォルトの名無しさん2009/05/11(月) 11:20:08
>>207 に期待。
0206デフォルトの名無しさん2009/05/11(月) 21:18:44
>>207 その発想はなかったわ。
0207デフォルトの名無しさん2009/05/11(月) 21:47:36
Maximaとslimeのreplを行き来しつつ、ついでにemacsの中で
皿洗いも済ませてしまいたいのですが、そういうことは可能でしょうか?
アイコンを見ている限りは何とか出来そうな気もするのですが。。。
ご教示いただければ幸いです。
0208デフォルトの名無しさん2009/05/11(月) 22:41:23
>>207
インターネット経由で皿洗い機に接続するモードを用意すれば出来そうです。
http://ascii24.com/news/i/topi/article/2000/01/11/606333-000.html
0209デフォルトの名無しさん2009/05/12(火) 11:24:27
トースターでnetbsdが動くから、トースターで皿洗いができるということか
0210デフォルトの名無しさん2009/05/13(水) 12:31:58
meta-bangの人のコード見てたら

#+test
でテストコード挿入する方法があるんだね

便利そうだけど使い方わかんない
0211デフォルトの名無しさん2009/05/13(水) 13:18:08
>>210
この辺から見てみるといいよ。
http://www.lispworks.com/documentation/HyperSpec/Body/24_ab.htm
0212デフォルトの名無しさん2009/05/13(水) 20:46:53
clozure cl のWindows版のインストールの仕方を教えてください。
ダウンロードして解凍、CCLのフォルダができたのですが、
その後、どうしたらいいのでしょう?
0213デフォルトの名無しさん2009/05/13(水) 23:04:50
>>212
それでインストールできてるんじゃね?
何がわからんのかわからん
0214デフォルトの名無しさん2009/05/14(木) 06:12:02
ClozureCL関連の質問が出たのでついでに質問させてください。
Mac OSX 10.5.7環境なのですが、
ClozureCL1.3が出たのでバージョンアップしようと思い(1.2を使ってました。)
サイトからsvnでダウンロードして./dx8664を起動した所
Error: Reader error: No external symbol named "MAKE-EXTERNAL-FOMAT" in package #<Package "CCL"> .
> While executing: CCL::%PARSE-TOKEN, in process Listener(6).
> Type :GO to continue, :POP to abort, :R for a list of available restarts.
> If continued: Create and use the internal symbol CCL::MAKE-EXTERNAL-FOMAT
> Type :? for other options.
1>
といきなりエラーが出てしまいます。
これはClozureCLのバグだと思うのですが、どうなのでしょうか?
解決法などありましたらご教授ください。
0215デフォルトの名無しさん2009/05/14(木) 18:53:33
split関数がなかったのでネットからダウンロードしたのですが、
こういう関数がパッケージになっているのは何故ですか?
パッケージにせずに単にloadする場合との違いは何でしょうか
0216デフォルトの名無しさん2009/05/14(木) 23:11:26
>>215
http://www.komaba.utmc.or.jp/~flatline/onlispjhtml/packages.html
0217デフォルトの名無しさん2009/05/15(金) 01:09:13
clozure clっての入れてみたんだがSBCLより速いんだな
フィボナッチの計算で比べてみたら3倍ぐらい速かったわ
0218デフォルトの名無しさん2009/05/15(金) 01:12:25
>>217
速い部分もあれば、遅い部分もあるよ。
ベンチマークが公開されてるから、見ると結構面白いと思う。
Allegroとかとの比較もあるよ。
0219デフォルトの名無しさん2009/05/15(金) 01:33:51
>>217
ピープホール持ってない sbcl/cmucl に言ってはならないことを…
0220デフォルトの名無しさん2009/05/15(金) 03:39:02
>>216
ありがとうございます。
名前が重複しないように、ということですね。
0221デフォルトの名無しさん2009/05/15(金) 15:46:48
(setq l (list 0))
(pushnew 0 l) -> l= (0)

(push 0 l) -> l=(0 0)

こんなことおきるんだね
ゼロって怖い
0222デフォルトの名無しさん2009/05/15(金) 16:19:42
>>221
よく考えたらあたりまえだった
02232122009/05/15(金) 21:35:51
wx86clを呼び出すと

> Error: value NIL is not of the expected type (OR STRING PATHNAME STREAM).
> While executing: PATHNAME-DIRECTORY, in process Initial(0).
> Type :GO to continue, :POP to abort, :R for a list of available restarts.
> If continued: Skip (possibly crucial) startup function CCL::INIT-LOGICAL-DIRECTORIES.
> Type :? for other options.
> Error: value NIL is not of the expected type CCL::RECURSIVE-LOCK.
> While executing: CCL::RECURSIVE-LOCK-PTR, in process Initial(0).
> Type :POP to abort, :R for a list of available restarts.
> Error: value NIL is not of the expected type CCL::RECURSIVE-LOCK.
> While executing: CCL::RECURSIVE-LOCK-PTR, in process Initial(0).
> Type :POP to abort, :R for a list of available restarts.
0224デフォルトの名無しさん2009/05/15(金) 23:16:57
Common LispでCや他の言語のようなキャリッジリターンを使用する方法は
どんな方法が有るのでしょうか?
formatについて調べてみたのですがそういう物は無いようですし。
よろしくおねがいします。
0225デフォルトの名無しさん2009/05/15(金) 23:52:16
改行コードのことか?
(format t "hello~%yahoo")
0226デフォルトの名無しさん2009/05/16(土) 00:05:07
>>225
そちらではなくて復帰のほうです。
引き続きよろしくおねがいします。
0227デフォルトの名無しさん2009/05/16(土) 00:28:26
Cでやるようにキャリッジリターンを出力したいって言うんなら
(princ (code-char 13))
じゃないかな。本当にスクリーンコントロールしたいならcl-ncursesとかを使ったほうがいいと思うけど。
0228デフォルトの名無しさん2009/05/16(土) 01:10:25
>>227
ありがとう御座います。
ロード画面のように
棒がのびるエフェクトをつけたかったのでキャリッジリターンを
知りたかったのです。インタプリタだと確認できないので
ファイルに書いて試してみたいと思います。ありがとう御座いました。
0229デフォルトの名無しさん2009/05/16(土) 13:00:24
またmximaスレが落ちた
ある意味matlabより便利なのに,思ったより使ってる人すくないのかなあ
0230デフォルトの名無しさん2009/05/16(土) 13:36:20
Common Lispでリストの要素を文字列化するには
どのようにすれば良いでしょうか?
'(hello world)というリストの
各要素の長さを別のリストに移したいのでmapcarをつかおうと思うのですが、
legthは文字列でないと受け取ってくれないので、どうしようかと
思っています。
よろしくおねがいします。
0231デフォルトの名無しさん2009/05/16(土) 14:09:31
(mapcar 'length (mapcar 'string '(hello world)))
0232デフォルトの名無しさん2009/05/16(土) 14:35:32
ありがとう御座います。
0233デフォルトの名無しさん2009/05/17(日) 10:30:29
clbuildでmcclimをインストールし、デモもちゃんと動いたのですが、
lispファイルからmcclimをrequireしてもmcclimが見つからないようです。

http://mcclim.cliki.net/Getting%20started%20using%20clbuild
ここを参考にしたのですが、他に何かやることがあるのでしょうか?
0234デフォルトの名無しさん2009/05/17(日) 12:09:23
https://www.neuroarena.com/index.html
裏で動いてるのはsbclらしい。
0235デフォルトの名無しさん2009/05/17(日) 22:29:13
Common Lispの仕様書が欲しいのですが、
HyperSpecやらCLtL2やら
ANSI X3.226-1994 Information Technology - Programming Language - Common Lisp
やらが出てきてどれが本物なのかがわかりません。
少し聞いた話がANSIが仕様書でCLtL2はその仕様書の編纂途中の様子とかを記録した物で
HyperSpecは辞書のような物だと聞いた事が有ったような....
できれば書籍で販売されているとうれしいです。
0236デフォルトの名無しさん2009/05/17(日) 23:15:45
ヤンデレが治ったら本気出すスレ
0237デフォルトの名無しさん2009/05/17(日) 23:28:46
そりゃANSIで規格になってるんだから当然書籍で売っている。
ANSI/INCITS 226-1994
http://www.techstreet.com/cgi-bin/detail?product_id=56214
$350.00 USD
0238デフォルトの名無しさん2009/05/18(月) 00:27:09
$350.00 って趣味で出すにはちょっと高いかも
0239デフォルトの名無しさん2009/05/18(月) 00:35:58
趣味ならANSIからPDFを買って自分で印刷すればいい
0240デフォルトの名無しさん2009/05/19(火) 00:14:37
lambdaを打つのがめんどくさかったのでlbdとうって処理できるようにしようと思い
(defmacro lbd (arg body)
`(lambda ,arg ,body))
というのを書いたのですが、replで
(lbd (x) (* x x))と打つと普通にlambdaの文と同じ無名関数として処理されるのですが
((lbd (x) (* x x)) 2)とすると
とたんに
((lbd (x) (* x x)) 2)のcarはlambda式でも関数でもないと帰ってきてしまいます。
これを回避するにはどのようにすれば良いのでしょうか?
よろしくおねがいします。
0241デフォルトの名無しさん2009/05/19(火) 01:12:37
>>240
carにlambda式を置くというバッドノウハウは無視して
常にfuncallを使うようにすれば良いと思います
0242デフォルトの名無しさん2009/05/19(火) 06:03:18
>>240
はまる人の少ないところだからあまり知られてないけれど。
http://www.lispworks.com/documentation/HyperSpec/Body/03_abab.htm
>If the car of the compound form is not a symbol,
>then that car must be a lambda expression,
>in which case the compound form is a lambda form.
ということで car は symbol じゃないなら lambda で始まるリストじゃなきゃ駄目です。
リーダマクロなら評価の前に式の変形を行うからいけるはずだけど。
02432332009/05/19(火) 14:09:39
>>233です。
なんとかmcclimを読み込んでhello worldを表示することができたのですが、
今度は日本語表示を表示しようとmcclim-truetypeをrequireして実行すると、以下のエラーが出ます。

unhandled ZPB-TTF::BAD-MAGIC:
Bad magic value in font header: #x4F54544F (expected #x00010000 or #x74727565)

見ての通りZPB-TTFというライブラリが何かエラーを起こしているようなのですが、対処法はありますでしょうか?
0244デフォルトの名無しさん2009/05/20(水) 15:05:06
OpenTypeFontが扱えないとか。
02452332009/05/23(土) 13:25:12
>>244
返信ありがとうございます。
フォントとなると環境が絡んでくるのですね。

後からになって申し訳ないのですが、MacOSX(leopard)、SBCLを使っていまして、
調べてみたところOSはOpenTypeFontには対応しているようです。

また、代わりにmcclim-freetypeをrequireすると、
unhandled SIMPLE-ERROR: attempt to multiply define ENUM FREETYPE:GLYPH-FORMAT-
というエラーが出て、こちらも駄目でした。

Lispはエラーを検索しても解決策が出てくることが少ないですが、皆さんはどう対処しているのですか?
SBCL含め全て再インストールした方が良いでしょうか・・
0246デフォルトの名無しさん2009/05/24(日) 02:13:30
>>245
こちらではほとんど同じ環境ですが、mcclim-freetypeもmcclim-truetypeも
使えているようです。mcclimはclbuildで入れました。mcclim-truetype.asdでのcl-aaへの
依存を取り除いた以外は特に変更を入れていません。
02472332009/05/26(火) 12:08:56
>>246
返信ありがとうございます。
長々と場所を取ってしまいすみません。

今、部分的に再インストールしてみたりして試行錯誤しているのですが、
clbuildでmcclimを入れ、truetypeを使おうとした時に、「cl-paths-ttfがrequireしているzpb-ttfがありません」というエラーは出ませんでしたか?
下のような感じです。

component "zpb-ttf" not found, required by #<SYSTEM "cl-paths-ttf" {12E438F9}>

zpb-ttfを入れるためにclbuildを使おうとしたところ、サポートされていなかったようなのでasdf経由で入れたのですが、これがマズかったのでしょうか?
その他、clbuildだけではインストールされなかったライブラリ等あれば、お教えいただけると幸いです。
02482462009/05/26(火) 18:05:45
>>247
gitは入れていますか?zpb-ttfをclbuildで入れるときにこれが必要だったような気がします。
(macportsで入れました)
0249デフォルトの名無しさん2009/05/28(木) 12:23:50
Teepeedee2ってほんとに速いの?
02502332009/05/29(金) 05:58:43
>>248
返信ありがとうございます。
どうにもならないようなので、一度すべて再インストールしてみることにしました。

アンインストールしてから、SBCL、darcs、clbuild、Gitを再インストールし、
clbuildを使ってmcclim、cl-vectors、zpb-ttfを入れましたが、
truetypeは>>243のエラー、freetypeは>>245のエラーがやはり出ます。

これ以上場所を取るのも悪いので、以降は自分で何とかしてみることにします。
また新しく何か分かった時は質問させていただくかもしれないので、その際は宜しくお願いします。
02512462009/05/29(金) 06:25:07
>>250
ほかの話題を邪魔してしまってる訳でもないし、スレチでもないので別にいいのでは?
エラーメッセージから推測するに、特定のフォントのフォーマットが合わないのかも
しれませんね。
http://www.xach.com/lisp/zpb-ttf/#sect-limitations
によると、ユニコードマップがないフォントはだめと書いてあるのでもしかしたら
互換性のないフォントのせいでこけているということもあり得ます。
追加で入れたフォントをいったん外してみたらどうでしょう?
02522332009/05/29(金) 13:23:54
>>251
すみません、恐れ入ります。
ターミナルに表示される処理から察するに「ヒラギノ丸ゴ ProN W4」を参照しており、wikiによればこれがJISのようでしたので、
一旦これを取り除いて再度実行すると「ヒラギノ丸ゴ Pro W4」を参照して同様のエラー、ヒラギノ系をすべて取り除くと、以下のエラーが出ました。
因みに、デフォルト以外のフォントは入れていないです。

debugger invoked on a MCCLIM-TRUETYPE::MISSING-FONT:
Cannot access /Library/Fonts/ヒラギノ丸ゴ Pro W4.otf
Your *truetype-font-path* is currently /usr/share/fonts/truetype/ttf-dejavu/
The following files should exist:
/Library/Fonts/Microsoft/MS Mincho.ttf
/Library/Fonts/Microsoft/MS Mincho.ttf
/Library/Fonts/Microsoft/MS Mincho.ttf
/Library/Fonts/Microsoft/MS Mincho.ttf
/Library/Fonts/Microsoft/MS Gothic.ttf
/Library/Fonts/Microsoft/MS Gothic.ttf
/Library/Fonts/Microsoft/MS Gothic.ttf
/Library/Fonts/Microsoft/MS Gothic.ttf
/Library/Fonts/ヒラギノ丸ゴ Pro W4.otf
/Library/Fonts/Microsoft/Meiryo Bold.ttf
/Library/Fonts/Microsoft/Meiryo Italic.ttf
/Library/Fonts/Microsoft/Meiryo Bold Italic.ttf

/usr/share/fonts/というディレクトリは存在しないのですが、一応ちゃんとライブラリフォルダを参照しているようです。
また、上記のマイクロソフト系のフォントファイルは存在しています。

仰る通り、適当なフォントを読み込めば何とかなる気はするのですが、*truetype-font-path*を変更すれば良いのでしょうか?
しかしながら、そもそも*truetype-font-path*には存在しないディレクトリが与えられていて、それでもライブラリフォルダを参照しているので、どう変更したものか、というところです。

もう少し考えてみます。
02532462009/05/31(日) 22:08:45
>>243のエラーは (require :mcclim-truetype) しただけで出ますか?それともほかの
パッケージをロード/実行した際でしょうか?
こちらで少し試してみたところ、ヒラギノはTTFでなくOTF (open type)なのでzpb-ttf
では読み込めないようです。M+フォントやIPAモナーフォントはOKでした。
もし(require :mcclim-truetype) が通るのであれば、そのあとで
mcclim-truetype::*families/faces*パラメタの方を修正してやればとりあえずごまかせる
かもしれません。>>252のフォントのリストはこのパラメタ (assocリスト)の値のリスト
なので、ヒラギノに対応する項目を適当なフォントのパスに付け替えれば動くかもしれません。
また、*truetype-font-path*の方はこれらの値のうち相対パスになっているものにだけ
使われるので、今は気にしなくて良さそうです。
0254デフォルトの名無しさん2009/06/01(月) 19:37:29
on lisp 注文しちまった
0255デフォルトの名無しさん2009/06/02(火) 01:52:27
>>254
なんだか注文した事が後悔されているように読めて悲しい。
技術書の良くできた本って読み物としても良くできてるんだよね。
そしてOn lispは読み物としてもおもしろい本だったよ

他のlisp本だと実践CommonLispが楽しかった。

;;; 小生は活字中毒なのもあるかもしれんが
0256デフォルトの名無しさん2009/06/02(火) 02:12:19
OnLispは文学
0257デフォルトの名無しさん2009/06/02(火) 02:13:22
勃起した
0258デフォルトの名無しさん2009/06/02(火) 02:18:11
技術書でかつ訳書といえば、大抵は意味不明な難読日本語に悩まされるのが常だけど、
On Lispは明瞭かつ流暢な日本語で書かれているので、100点を付けてもいいよ
0259デフォルトの名無しさん2009/06/02(火) 02:42:29
>>258
それで悩んだのはクヌース本の初版だけだったな、ASCII版は普通によめた

でも算符とか鍵盤とかの訳語は好きだぜw
0260デフォルトの名無しさん2009/06/02(火) 16:24:50
算符じゃなくて算譜だね。この訳語が定着しなかったのは残念。

確かに昔の技術書や科学書は硬い言葉使いが多くて読みづらかったけど、
それでも何とかなっちゃう秀才が大学教授になって、やはり硬い文章を
再生産するのかもしれないなあと思ったりして。
0261デフォルトの名無しさん2009/06/02(火) 19:36:51
馬鹿みたいに簡単なランレングス圧縮のプログラム
(defun make-run-length-encode (list)
(reduce #'(lambda (first rest)
(cond ((listp (car rest))
(if (eq first (car (car rest)))
(cons (cons first (1+ (cdr (car rest)))) (cdr rest))
(cons first rest)))
(t (if (eq first (car rest))
(cons (cons first 2) (cdr rest))
(cons first rest)))))
list :from-end t :initial-value nil))

これってもっとかっこよくエレガントに書けませんかね?
パターンマッチとか使えるといいんだがなぁ...
0262デフォルトの名無しさん2009/06/02(火) 21:30:21
何を持ってカッコいいとするかはさておき。
(defun my-rle (list &optional (res nil))
(if (not list) res
(let* ((head (car list))
(cnt (position head list :test-not #'eq)))
(if (not cnt) (setf cnt (length list)))
(my-rle (nthcdr cnt list)
(append res (list (if (= cnt 1) head (cons head cnt))))))))
02632332009/06/04(木) 00:09:40
>>253
返信ありがとうございます。
requireの下に、
(setf (cdr (nth 8 mcclim-truetype::*families/faces*)) #P"/Library/Fonts/Arial Unicode.ttf")
を追加したところ、ようやく日本語が表示されました。

色々説明不足であったにもかかわらず、何日もに渡ってお教えいただき、本当にありがとうございました。
初めの方に返信を下さった方々もありがとうございます。
Lisperの皆さんの優しさにちょっと感動です。
0264デフォルトの名無しさん2009/06/04(木) 05:38:14
今までsbclは末尾再帰を最適化してくれると思っていたのですが、
* (time (fact 45))

Evaluation took:
0.000 seconds of real time
0.000008 seconds of total run time (0.000007 user, 0.000001 system)
100.00% CPU
9,971 processor cycles
0 bytes consed

119622220865480194561963161495657715064383733760000000000
* (time (fact-cps 45))

Evaluation took:
0.000 seconds of real time
0.000010 seconds of total run time (0.000009 user, 0.000001 system)
100.00% CPU
13,546 processor cycles
4,080 bytes consed

119622220865480194561963161495657715064383733760000000000

と末尾再帰がたのfact-cpsの方が若干遅かったのは驚きました。
タイミングの問題ですかね?
0265デフォルトの名無しさん2009/06/04(木) 07:01:08
末尾再帰最適化のメリットは主にスペース面で、スピード面の直接の貢献は少ないんじゃないかな。
むしろ末尾再帰のために引数が増えたりすると、スピード面ではデメリットになっているかもしれない。
0266デフォルトの名無しさん2009/06/04(木) 10:59:58
>>264
コンパイルした?
>>265
なことはない。
0267デフォルトの名無しさん2009/06/04(木) 11:59:07
相互末尾再帰は最適化やってくれるんかな
a->b b->c c->d・・・みたいな
0268デフォルトの名無しさん2009/06/04(木) 12:09:26
末尾再帰も相互末尾再帰も末尾呼び出しの最適化だ
0269デフォルトの名無しさん2009/06/04(木) 12:36:39
>>267
Clinger の "Proper tail recursion and space efficiency" でも読みなされ。
02702642009/06/04(木) 13:07:42
コンパイルした結果がそのようになりました。
(proclaim '(optimize speed))
を忘れていたので帰ったら試して見ます
0271デフォルトの名無しさん2009/06/04(木) 22:00:17
>>266
tail call 用の引数の計算にスタック上のデータが必要だと、
処理が少しだけ面倒くさくならない?
なんかうまいやり方があるのかな。
02722642009/06/05(金) 01:03:18
帰ってきました。(proclaim '(optimize speed))したところ
以下のようにちゃんと末尾再帰版が速くなりました。
* (time (fact 45))

Evaluation took:
0.000 seconds of real time
0.000016 seconds of total run time (0.000009 user, 0.000007 system)
100.00% CPU
9,581 processor cycles
4,096 bytes consed

119622220865480194561963161495657715064383733760000000000
* (time (fact-cps 45))

Evaluation took:
0.000 seconds of real time
0.000008 seconds of total run time (0.000007 user, 0.000001 system)
100.00% CPU
9,412 processor cycles
0 bytes consed

119622220865480194561963161495657715064383733760000000000
0273デフォルトの名無しさん2009/06/05(金) 07:34:02
末尾再帰版が早いときもあれば遅いときもある、ってぐらいじゃないかな。
何回かやってみると必要サイクル数は少し変動してるし(ガベコレのタイミングのせい?)。
うちの環境ではどちらが早いとも言えなかった。
0274デフォルトの名無しさん2009/06/07(日) 11:14:44
今時Common Lispを始めようなんて、
いったいどういう理由なんですか?
■ このスレッドは過去ログ倉庫に格納されています