【入門】Common Lisp その6【質問よろず】at TECH
【入門】Common Lisp その6【質問よろず】 - 暇つぶし2ch2:デフォルトの名無しさん
09/02/18 00:23:10
((お勧めの Common Lisp 処理系)
(SBCL: URLリンク(sbcl.sourceforge.net)
:プラットフォーム UNIX, Linux, Mac, Windows(移植中)
:開発 活発
:日本語 使える(UCS4, UTF8, EUC)
:特徴 一番お勧めのコンパイラ。)

(CLISP: URLリンク(clisp.cons.org)
:プラットフォーム UNIX, Linux, Mac, Windows
:開発 そこそこ活発
:日本語 使える
:特徴 バーチャルマシン。遅いがフットプリントが小さい。)

(CMUCL: URLリンク(www.cons.org)
:プラットフォーム UNIX, Linux, Mac
:開発 そこそこ活発
:日本語 使えない(回避法有り)
:特徴 高速コンパイラ。SBCL の元になった。)

(Clozure CL: URLリンク(openmcl.clozure.com)
:プラットフォーム PPC-Linux, Mac, x86_64-Linux と x86_64-FreeBSD に移植中
:開発 そこそこ活発
:日本語 使えない (pre ver 1.1なら多少扱える。)
:特徴 元々商用のコンパイラ。ネイティブスレッドが使える。))

3:デフォルトの名無しさん
09/02/18 00:23:42
((商用CL) ;;誰か補完よろ
(Allegro: URLリンク(jp.franz.com)
:プラットフォーム Windows ,Mac OS X , Freeを含む各種UNIX
:開発 ほとんど本陣
:日本語 使える(内部UTF16,外部 プラットフォーム毎)
:特徴 お高いがもっとも頼れる。申し込みが必要だがFree Express Editionあり )
(LispWorkss: URLリンク(www.lispworks.com)
:プラットフォーム Windows ,Mac OS X
:開発 半年にいっぺんくらいアップデート
:日本語 使えるみたい(完全に対応しているかはちとわかりかねまする)
:特徴 IDEベースです、フリー版はconsセルの上限が来るとダイアログ
がでてしまいます、SDLとかで遊ぶとすぐに引っかかります ))

((その他)
(ABCL: URLリンク(armedbear-j.sourceforge.net)
:特徴 JavaVM 上で動く。JavaVM のバイトコードを生成。)

(GCL: URLリンク(www.gnu.org)
:特徴 日本発 Kyoto Common Lisp の直系。)

(ECL: URLリンク(ecls.sourceforge.net)
:特徴 Lisp->C コンパイラ。組み込み可能らしい。こちらもKCLの系譜))

4:デフォルトの名無しさん
09/02/18 00:24:37
ANSI Commn Lisp 仕様関係
URLリンク(www.cs.cmu.edu)
URLリンク(lispdoc.com)
URLリンク(clqr.berlios.de)

日本語のチュートリアル
URLリンク(www.fireproject.jp)
URLリンク(www.geocities.jp)
URLリンク(home.soka.ac.jp)
URLリンク(www.haun.org)
URLリンク(wisdom.sakura.ne.jp)


5:デフォルトの名無しさん
09/02/18 00:25:09
進んだ話題が欲しい人に...
(和文)
URLリンク(www.geocities.co.jp)
URLリンク(lispuser.net)<)
URLリンク(www.cl-user.net)<)
URLリンク(planet.lisp.org)
URLリンク(groups.google.co.jp)
URLリンク(www.cliki.net)
URLリンク(cl-cookbook.sourceforge.net)
URLリンク(www.gigamonkeys.com)
( URLリンク(www.apress.com) よりpdf版が入手可能)
URLリンク(www.psg.com)
URLリンク(www.cs.cmu.edu)

その他の情報
URLリンク(ja.wikipedia.org)

6:デフォルトの名無しさん
09/02/18 00:26:09
((おまけの処理系
(POPLOG: URLリンク(www.cs.bham.ac.uk)
Lisp, Prolog, ML のコンパイラ)
(WCL: URLリンク(wcl.kontiki.com)
Shared Library として使える Lisp)
(Movitz: URLリンク(common-lisp.net)
フルスクラッチの Lisp OS)
(CADR LispM: URLリンク(www.heeltoe.com)
MIT で使われていた LispM のソースを公開したもの)))

((その他のリンク
(Common Lisp JP: URLリンク(www.lingr.com)
チャット)
(lush: URLリンク(lush.sourceforge.net)
Lisp Universal Shell)
(実践common lisp: URLリンク(pcl.lispuser.net) 実践common lisp 非公式サポートページ)
(Paul Graham の ANSI Common Lisp:
URLリンク(www.pearsoned.co.jp)
Common Lisp の 参考書を探しているならこれ一択)))

7:デフォルトの名無しさん
09/02/18 01:17:07
>>1
(乙 'make-thread)

8:デフォルトの名無しさん
09/02/18 01:23:03
>1乙

9:デフォルトの名無しさん
09/02/18 02:32:40

         *、 *、      。*゚    *-+。・+。-*。+。*
        / ゚+、 ゚+、   *゚ ・゚    \       。*゚
       ∩    *。  *。    +゚    ∩    *
   (´・ω・`)      +。   +。   ゚*     (´・ω・`)
   と   ノ      *゚  *゚    ・     。ヽ、  つ
    と、ノ     ・゚  ・゚     +゚    *  ヽ、 ⊃
     ~∪    *゚  *゚      *    +゚    ∪~   ☆
          +′ +′      +゚   ゚+。*。・+。-*。+。*゚


10:デフォルトの名無しさん
09/02/18 09:42:40
こんなスレあったんですね!

11:デフォルトの名無しさん
09/02/18 09:51:01
あったんですよ奥さん!

12:デフォルトの名無しさん
09/02/19 01:20:23
そうなんですか?カワサキさん!


13:デフォルトの名無しさん
09/02/19 01:54:05
今なら大安の日セールにつき、宝石盆栽の富貴樹が29800円ぽっきりですよ奥さん

14:デフォルトの名無しさん
09/02/19 02:02:42
そんな感じでAllegroCLを安売りしてくれないかしらw

15:デフォルトの名無しさん
09/02/19 02:59:44
Allegro店売りしてないのが困る


16:デフォルトの名無しさん
09/02/19 03:35:30
Allegro購入して使ってる会社って国内で何社くらいあんのかね。
まじ就職してえわ

17:デフォルトの名無しさん
09/02/19 06:37:27
50万ぐらいだっけ?
matlabと同じぐらいか

18:デフォルトの名無しさん
09/02/19 11:38:44
>>1


19:デフォルトの名無しさん
09/02/19 13:58:25
>>17
へー、俺が想像してたよりも安い

20:デフォルトの名無しさん
09/02/20 11:35:29
URLリンク(ccl.clozure.com)
Clozure CL 1.3 release candidate
* Mac OS X 10.4 and later (PowerPC and x86)
* Linux (PowerPC and x86)
* FreeBSD 6.x and later (x86)
* Solaris (x86)
* MS Windows (x86)

21:デフォルトの名無しさん
09/02/20 12:50:06
>>17
過去本スレで100万とか1000万とかとにかく高そうな話はあったけど
今は案外お手頃になってるのか


22:デフォルトの名無しさん
09/02/21 01:34:19
>>20
グッドニュースさんきゅ。

23:デフォルトの名無しさん
09/02/21 04:51:38
URLリンク(www.franz.com)
$599
なんて書いてあるけど

24:デフォルトの名無しさん
09/02/21 10:54:56
どんどん桁が下がっていくな
もうしばらく待つか

25:デフォルトの名無しさん
09/02/21 12:10:12
確かstudent priceじゃなかったか?<$599

26:デフォルトの名無しさん
09/02/24 12:14:03
cmuclの19f(現在プレバージョン)だが、新しいくsse2の命令を使うようになったんだね。x8664版
はでてないけど、高速化は期待できるのかも。

27:デフォルトの名無しさん
09/02/26 23:25:01
非SchemeなLispではドットリストなformはどう扱われることが多いのでしょうか。

(+ 1 2 . 3) ; <- こういうの

どうもCommonLispでは仕様で決まってなさそうなのですがなにか理由があるのでしょうか。


28:デフォルトの名無しさん
09/02/26 23:37:55
普通にエラーです。

29:27
09/02/27 01:31:16
(+ 1 2 . 3) みたいなのはSBCLではエラーとなりましたが、CLISPとxyzzyでは普通に通りました。どうもドット以下はnilあつかいされているみたいです。
HyperSpecで確認してみましたがSection 3.1.2.1 Form Evaluation のところにはproper-listでなければならないとは書いていないような気がします。
実装依存にせよエラーにせよ、書かない理由もよく分からないので気になります。


30:デフォルトの名無しさん
09/02/27 01:42:45
GCLでは(+ 1 2 . 3)は6になるな

31:デフォルトの名無しさん
09/02/27 09:14:39
Common Lispの仕様は常識で分かるところは書いてない。
だからISO Cと同じくらいのサイズに収まってる。

32:27
09/02/27 20:24:16
たしかにこんなコードを書く人はまずいないからわざわざ標準で定める必要もないといえばないですね。
未定義の処理系依存エラーと把握しました。

今Lisp処理系を作っていてちょっと気になったので聞いてみました。
どうもありがとうございます。


33:デフォルトの名無しさん
09/02/28 15:33:37
pythonのzopeやDjangoに対応するものはlisp
ではどれになるのでしょうか


34:デフォルトの名無しさん
09/02/28 18:30:33
無い
lisperは自分で自分用のフレームワーク作るから

35:デフォルトの名無しさん
09/02/28 22:25:50
>>33
フレームワーク: ないことはないけど、 (2、3あった) そっちはあまり知らない。

36:デフォルトの名無しさん
09/02/28 23:17:23
>>33
weblockとかhunchentootとか?
hunchentootは使ってて楽しいよ


37:デフォルトの名無しさん
09/03/01 09:33:05
↓数箇所の回答が無いが、Lispの練習問題として、暇な時にやってみると面白い。
L-99: Ninety-Nine Lisp Problems
URLリンク(www.ic.unicamp.br)

38:デフォルトの名無しさん
09/03/02 12:11:58
EmacsでのLisp開発環境としてSLIMEを使用しているのですが、
画面を二分して上のS式をC-x C-eで評価したときに
(in-package :hoge)
と言う式を評価したときにslimeのREPLでは
CL-USER>
のままでhogeのパッケージに入ってもらうにはREPLで
(in-package :hoge)
と打たなければなりません。これは設定で解消できるのでしょうか?
それとも仕様でしょうか?よろしくおねがいします。

39:デフォルトの名無しさん
09/03/03 16:05:03
cffiの中級者ぐらいの質問はどこですればいいのでしょうか?

40:デフォルトの名無しさん
09/03/04 21:30:17
comp.lang.lispじゃね

41:デフォルトの名無しさん
09/03/06 23:54:50
URLリンク(prabuinet.blogspot.com)

うぃんどうず用のlispbox 付属のemacsの日本語対応はよくわからん。参考にしてntemacs-ja
やmeadowあたりを入れても良いかもな。
onjoさんも日本人用のものを作ってたと思うけど。

42:デフォルトの名無しさん
09/03/08 09:59:33
URLリンク(www.daansystems.com)

windowsの人ならこれでも良いかもな。windowsでslimeまで使えるようにするのは
敷居が高いしね。

43:デフォルトの名無しさん
09/03/08 19:46:49
eclipse上で使うCUPSとかってあれからどうかわったんだろう?
うちはWindowsXPがx64なのでsbclが動かないから試せないんだ


44:‍
09/03/09 14:30:40
Windowsの
AllegroCommonLispのLispBoxでasdf-installをしようと思ったのですが

CL-USER> (asdf-install:install :fare-match)
Package "ASDF-INSTALL" not found. [file position = 14]
[Condition of type READER-ERROR]
; Evaluation aborted

とエラーが出てうまくいきません
何か特別な操作が必要なのでしょうか

45:‍44
09/03/09 15:21:10
とりあえず(require 'asdf)としてみたのですがNILが返ってきてしまいます

URLリンク(www.cliki.net)
このサイトには
If you have SBCL, OpenMCL, ECL or ACL, it's bundled and you need only (require 'asdf).
こう書いてあるのにどうしてなんでしょうか

46:デフォルトの名無しさん
09/03/09 18:45:40
asdfとasdf-installは(ちょっと)違うよ。
URLリンク(www.cliki.net)


47:44
09/03/14 18:48:08
URLリンク(common-lisp.net)
ここを参考にして

CL-USER> (pushnew "C:/asdf-install/asdf-install/" asdf:*central-registry* :test #'equal)
("C:/asdf-install/asdf-install/" *DEFAULT-PATHNAME-DEFAULTS*)
CL-USER> (asdf:operate 'asdf:compile-op :asdf-install)
; Evaluation aborted

入力してみたんですが

component "asdf-install" not found
[Condition of type MISSING-COMPONENT]

こうなってしましました

48:デフォルトの名無しさん
09/03/14 19:35:30
>>47
asdf-install を*ちゃんと*どっかから持ってきた?


49:44
09/03/14 19:51:43
URLリンク(common-lisp.net)
これをCドライブ直下に解凍し、

URLリンク(cclan.cvs.sourceforge.net)
さらにここからasdf-install.lispをダウンロードしてasdf-install.asdと同じフォルダに入れています

50:デフォルトの名無しさん
09/03/14 21:57:48
おま、俺様インストールじゃなくてREADMEがそこにあるんだから読めよ。

51:i118-19-145-49.s04.a012.ap.plala.or.jp
09/03/15 14:55:51
>>38
> EmacsでのLisp開発環境としてSLIMEを使用しているのですが、
> 画面を二分して上のS式をC-x C-eで評価したときに
> (in-package :hoge)
> と言う式を評価したときにslimeのREPLでは
> CL-USER>
> のままでhogeのパッケージに入ってもらうにはREPLで
> (in-package :hoge)
> と打たなければなりません。これは設定で解消できるのでしょうか?
> それとも仕様でしょうか?よろしくおねがいします。


(defpackage :hoge
(:use :common-lisp)) C-x C-e

(in-package :hoge) C-x C-e

C-x o でREPLにカーソルを持ってきて
,キーを押下
ミニバファでCommand:って出るからchange-packageとして
Package: hoge



52:38
09/03/15 15:37:10
ありがとう御座います。
非常に助かりました。

53:デフォルトの名無しさん
09/03/15 16:30:10
>>51
専ブラアップデイトしろ

54:デフォルトの名無しさん
09/03/18 12:45:21
>>51
C-x oじゃなくてslime selecterにキー割り当てるのはしないの?


55:デフォルトの名無しさん
09/03/18 20:35:22
>>53

やっちまったぜぇ
ありがとう

>>54
> >>51
> C-x oじゃなくてslime selecterにキー割り当てるのはしないの?

slime selecterの説明が必要だろ
この場合は C-x o じゃ駄目か?


56:デフォルトの名無しさん
09/03/18 20:51:19
ここでいいのかな?
最近 slime モードのテキストバッファ(要は lisp ファイルを編集している時)
の、日本語入力が不自由なんだけど、これは *BSD で Wnn7 を使い続けてる
俺ん所だけの現象???


57:デフォルトの名無しさん
09/03/18 21:19:27
不自由とは?何かSLIMEが悪さするのかな。SKK使ってるけど、何も感じないです。

58:デフォルトの名無しさん
09/03/18 21:37:00
>>57
うち固有だとは思うんだが、今年の正月すぎからスペースで変換しなった
repl バッファは変換する。たぶん egg のキーマップ周辺

slime はとりあえず動いてるし、日本語出力する用事もないし、「かな漢」
までめんどうみてる暇もないので放置状態

emacs のバージョン問題もあるかも知れない


59:デフォルトの名無しさん
09/03/18 21:56:24
ほう、いまどきBSDとは。NetかDragonflyか。
お主、ブラックボックスは嫌いなのではないか?
フフフ。丁度良い物がある。

つ SKK

60:デフォルトの名無しさん
09/03/19 01:02:13
SKKは確かにYoi

61:デフォルトの名無しさん
09/03/19 01:11:26
SKKはLisper向けですから。。。

62:デフォルトの名無しさん
09/03/19 10:34:43
ねーよw

63:デフォルトの名無しさん
09/03/19 12:14:24
skkはyatexとkeybind重なるから使ってない

64:デフォルトの名無しさん
09/03/19 16:54:41
(defmacro util-fout (filename &body body)
`(with-open-file (os ,filename :direction :output :if-exists :supersede)
,@body))
として、
(util-fout "filename" (format os "hello world"))
などと使うような util-fout を重宝して使っているのですが、
すぐに分かるとおり、os は外部変数補足をするので困っています。
もっと良い設計はありませんか?
with-open-file をそのまま書けばいい。というのももっともですが、、、


65:デフォルトの名無しさん
09/03/19 22:24:29
>>51
C-c C-z

66:デフォルトの名無しさん
09/03/20 00:16:33
>>64
REPLでぐだぐだコード書く時に同じよーなマクロ使うけど、
困るような所では使わないなあ。
(defmacro >> (fn &body body)
`(let ((*standard-output*
(open ,fn :direction :output :if-exists :append :if-does-not-exist :create)))
(prog1 (progn ,@body)
(close *standard-output*))))
(>> "./hoge.txt" (mapc #'print '(hoge fuga hage)))

普通にプログラムを書く時はwith-open-fileを使った方が
良いと思ってるんだけどどうなんだろ。
慣用句っぽいマクロとかあるのかな。

67:デフォルトの名無しさん
09/03/20 02:11:14
>>64
アナホリックマクロ


68:デフォルトの名無しさん
09/03/20 02:14:19
>>64
URLリンク(www.komaba.utmc.or.jp)


69:デフォルトの名無しさん
09/03/20 17:18:20
>>65
> >>51
> C-c C-z

おぉ,正しくはこれか
ありがとう
でも,つい C-x o を押してしまうよ(笑



70:64
09/03/23 12:18:02
>>66-68 さんくす。
アナフォリックマクロ&自分のコードということで、
"os" の変数名を長くしてパッケージに入れることまではして、
とりあえずそのままにしました。

71:デフォルトの名無しさん
09/03/24 21:50:34
cp mkdirなどのunixのコマンドを
common lispから使う方法はないのでしょうか

簡単に言うとシェルスクリプトをcommon lispで書きたいのです

72:デフォルトの名無しさん
09/03/25 01:29:33
clispで
(ext:run-shell-command "ls")
とか?
sbclの場合sb-ext:run-programだそうな

73:デフォルトの名無しさん
09/03/25 02:22:44
穴掘り熊五郎、と覚えよう

74:デフォルトの名無しさん
09/03/25 02:23:02
(ext:dir)
(ext:cd)

75:デフォルトの名無しさん
09/03/27 16:16:58
パッケージの中のシンボル等をエクスポートする際には
defpackage の中の :export に記述する必要があるはずですが、
クラスをパッケージの中で定義する際に、
クラス名がエクスポートされていればいつでもスロットのアクセス関数等も
エクスポートされているようにするにはどうしたら良いですか?
全てのアクセス関数を :export に書かないといけないとすると不便すぎるのですが。

76:デフォルトの名無しさん
09/03/27 21:27:32
>>75
なんか方法あるのかね
自分が使ってる有名どころのパッケージのソース見てみたけど全部列挙してるね。
まあ、外部とのインターフェースとなる部分だから慎重さが必要な部分だし不便ぐらいでちょうどいいんじゃない
defpackageは便利マクロであってエクスポートの唯一の手段じゃないからCLOSの機能を駆使すればできそうにも思うけど自分には無理だ


77:デフォルトの名無しさん
09/03/27 21:27:44
不便すぎる、というか違いすぎるんだろう。
もれも仕事ではJavaとかなんで>>75の言いたいことはわかる気がするが、
CLOSの場合はアクセス関数といってもクラスに所属するのものではないからなぁ。
CLOS流儀に馴染むというか、考え方をかえてもらうほうが建設的かな。
本当に細粒度にアクセサを公開しないといけないの?もっと美しいインターフェースは設計できない?


78:デフォルトの名無しさん
09/03/27 23:21:48
defexternalmethodとかオレオレdefclassとか作れば書くのは簡単になるかもだけど
読む側からしたら頭の方にexportでまとまってた方が追うのが楽じゃないかなとか思った。

ちょっとずれるけど、これ思いだした。
URLリンク(d.hatena.ne.jp)
>Q2:defclassを書くのって面倒くさい、黒田さんは全部書いていますか?
>A2:emacsの機能で楽してるけど、全部書いている。
>
>Q2:マクロは使わないのですか?
>A2:マクロを入力量を減らすために使うのは勧めない。
>Editorでがんばるべき。マクロは新しい語彙を入れ込むためのもの。
>安易に使うべきでない。自然言語の世界でも自分勝手な言葉を
>話すやつとはつき合いたくない。

79:デフォルトの名無しさん
09/03/27 23:42:10
マクロは最終手段だからね。下手に作ると分かりにくくなるが、
上手に作れば読みやすいソースになる。
オブジェクト指向の人がやたらクラスを作ってスパゲティにするのと似てるかも。
関数を作るにしてもinlineを使えば埋め込むこともできるけど、これは最適化のときの話
だもんな。

80:75
09/03/27 23:49:23
>>76-78 さんきゅです。
なるほど。アクセス関数は総称関数側だったんですね。
defclass で書いてるのでクラス側にあるのかと勘違いしていました。
じつは MOP でなんとかならないかといろいろ勉強してたんですけど、
ギブしました。

defpackage の :export の部分を間違えずに書けるように、
ファイル内のシンボル等の定義を読み、公開用には ":" をつけながら
全て出力するツールを作ってたんですけど、
これをアクセス関数にも適用できるように変更することとしました。
それでとりあえず良しとします。

81:デフォルトの名無しさん
09/03/27 23:58:14
>>80
こういうのは違うかな
URLリンク(common-lisp.net)
試してないけど総称関数を列挙してくれそうな雰囲気。

82:デフォルトの名無しさん
09/03/28 00:23:54
というわけで試してみたよ
> (defclass a () ((a :reader a-of)))
#<STANDARD-CLASS A>
> (moptilities:generic-functions 'a)
(#<STANDARD-GENERIC-FUNCTION A-OF (1)>)
取り出せたけど関数オブジェクトからどうやって元のシンボルに戻せば。。。うう


83:デフォルトの名無しさん
09/03/28 00:36:58
もうちょい試してみたよ
他の関数を使えば望みのことはできそうだ
> (moptilities:slot-names 'a)
(A)
> (moptilities:slot-properties 'a 'a)
(:NAME A :INITARGS NIL :INITFORM NIL :READERS (A-OF) :WRITERS NIL
:DOCUMENTATION NIL)
クラスのスロットの属性にアクセスできりゃもうこっちのもんでしょ
アクセサ関数のシンボルを取り出してexportしてやればいい


84:デフォルトの名無しさん
09/03/28 01:14:01
そういうわけで試した結果これでどう?
指定したクラスのアクセサ関数(リーダ関数だけを見てるのでもうちょっとリファイン必要)を全部exportする。
(defun export-slot-accessors (cls)
 (loop for a in (loop for s in (moptilities:slot-names cls)
    nconc (destructuring-bind (&key readers &allow-other-keys)
        (moptilities:slot-properties 'a s) readers))
  do (export a)))
しかしなあ主にパッケージ使う側の人間から言わしてもらうとあれこれエクスポートするパッケージは使いにくいぞな


85:デフォルトの名無しさん
09/03/28 06:12:53
>>84
そんなのだめだぁ。必要もないものexportしないでくれぇぇぇ。
exportするものは厳選すべき。

86:デフォルトの名無しさん
09/03/28 09:10:07
パッケージの分割の設計を見直したほうがいいんじゃないか?

87:デフォルトの名無しさん
09/03/28 22:55:28
Mac版のLispWorks Personalで遊んでいます。
リスナーやエディタウィンドウで日本語'を入力したいのですが、まともに
入力/表示出来ません。こういうものですか?
Windows版ではどうですか?

88:デフォルトの名無しさん
09/03/28 23:40:53
Win版では日本語の入出力出来るみたいよ

89:87
09/03/29 11:45:50
>>88
情報ありがとうございます。
うーん、Mac版も内部的にはちゃんと処理しているみたいなんですけど。
Slime経由で使えばいいのかな…。




90:デフォルトの名無しさん
09/04/08 09:59:33
gsllとnlisp統合されないかなあ

91:デフォルトの名無しさん
09/04/09 09:49:11
数日前からCommon Lispを勉強し始めました。そこで疑問点が出てきました。

単一ディスパッチの言語だとクラスは名前空間の導入という側面があると
思いますが、多重ディスパッチの言語だとメッセージ送信先がひとつではないため、
一意に定まらないと思います。
よってCLOSのクラスでは名前空間の導入は行えない、これは分かります。

ここからが質問なんですが、CLOSにおいて、総称関数の名前空間の汚染に対しては
どのように対処すればよいのでしょうか?

パッケージシステムが解なのかと思いましたが、そうなると、オブジェクトごとにパッケージを
用意する必要がありますので、とても面倒な気がします……

92:デフォルトの名無しさん
09/04/09 10:13:17
・パッケージシステムには名前空間管理が含まれてる。
・総称関数は名前空間を越えて共通の名前であることが有用性上に重要。
それを名前空間を汚染するという風には考えない。
そのくらい名前は重要。


93:デフォルトの名無しさん
09/04/09 11:23:31
>>92
ありがとうございます。ですが、メッセージ名を気をつけても、現実としてメッセージ名の
衝突は起こると思います。

たとえばC++で申し訳ないんですが、
class Foo
{
virtual void update() = 0;
};

class Bar
{
virtual void update(bool flag) = 0;
};
があるとすると、メッセージ名がupdateと同じでもメッセージのプロトコルが違います。
C++なら単一ディスパッチなので、メッセージ送信先とメッセージ名で呼ぶべきメッセー
ジのプロトコルが定まります。
ですが同じことをCommon Lispでしようとしたら、パッケージにくるんで、呼び出し元で

(foo:update foo-instance)
(bar:update bar-instance t)

とする方法か、もしくは総称関数を

(defgeneric update (o &rest rest))

と定義するくらいしか思いつきません。前者はどうみても冗長ですし、後者はCommon Lisp
の引数チェック機構が死にます。

根本的に勘違いしてる可能性もありますが、うまい方法はないでしょうか。

94:デフォルトの名無しさん
09/04/09 12:38:25
>>93
(defclass foo () ())

(defclass bar () ())

(defgeneric update (obj &rest args))

(defmethod update ((obj foo) &rest args)
(declare (ignore args))
...)

(defmethod update ((obj bar) &rest args)
(destructuring-bind (flag) args
...))

何か問題があるのだろうか?


95:デフォルトの名無しさん
09/04/09 13:33:16
>>94
ありがとうございます。
この場合困るのが、クラスBarを後から追加した場合です。
クラスFooを作ったときに作った総称関数とメソッドの定義を変更しないといけませんが、
これはOpen-Closed-Principleの観点から言ってよい方法であるとはいえません。

これを回避しようとしたらおそらくはパッケージシステムを使うことになるのでしょうが、
(foo:update foo-instance)
(bar:update bar-instance obj)
という冗長な記述になってしまいます。

あるいはパッケージにくるんだ上で、
(defgeneric update (obj &rest args))
という総称関数を作ってdefmethodで分岐するという手もありますが、単一ディスパッチの
言語では必要無かった苦労(パッケージング、defmethodの実装)を強いられる、という点で
腑に落ちません。

もし「総称関数は名前が重要。衝突しないように名前は決めるべき」というのが解ならば、いうのは
簡単です。
ですが、それを真に実現しようと思ったら、作るべきクラスのインターフェイスを書く前からすべて把
握する必要があります。これは非現実的です。

この辺りCLOSではどうやって解決するのがよいのでしょうか?
それともこんなものなのでしょうか。


96:デフォルトの名無しさん
09/04/09 15:03:53
操作内容の意味が変わるんだったら, 名前変えればいいんじゃないの?
つか flag に相当する部分は, 普通, クラスに閉じ込めないか?
通常, リファクタリングの最有力候補だよね >>93 って.

> 言語では必要無かった苦労(パッケージング、defmethodの実装)を強いられる、という点で
> 腑に落ちません。

どっち転がってもメソッドは定義しなきゃいけないわけで,
たいした手間じゃないだろうに…

(defmethod bar ((obj foo))
(if *bebhavior-flag*
...))
(let ((*behavior-flag* t))
(bar (make-instance 'foo)))

的な, 逃げもなくはないが…


97:デフォルトの名無しさん
09/04/09 17:30:52
問題にしてるのは
・メッセージ名が同じ
・プロトコルが異なる
この二つを満たすメッセージを定義する上手い方法が総称関数には無いのではないか、という点です。
単一ディスパッチの言語にはあるにもかかわらず、です。

リファクタリング等の話は前提を覆しています。

>どっち転がってもメソッドは定義しなきゃいけないわけで,
>たいした手間じゃないだろうに…
単一ディスパッチの言語で必要のないこと、という点で大きな手間です。
単一ディスパッチの言語ならばメソッドのパッケージングもクラスによって分岐するメソッドの
定義も不要です。
もし統一的に表すために新たに総称関数を新たに定義した場合、その総称関数をどこに配置
するかという事も新たに考えねばなりませんし、機械でできそうな処理を人間が書く必要が
あるという点でLisp的ではない気がします。

もしこのような場合、Common Lispでは単一ディスパッチ言語が提供していたクラスによる名
前空間の導入を手動で行わなければならない、そういう仕様だ、というのならそういうものな
のかとあきらめます。
ですが、もし上手い方法があるのであれば教えてほしいと思った次第です。


98:デフォルトの名無しさん
09/04/09 18:24:35
>>97
上のほうで誰かが名前重要って書いてるよね
updateって名前がまずだめ。「更新」てどんだけ広い概念を総称させとる
そらぶつかるわ
総称関数はメッセージ名じゃないし
マルチプルディスパッチの言語では簡単なことが単一ディスパッチの言語だとくそ面倒くさくなるよね。そして逆のこともあるよ
既知の概念で理解できないものを否定して安心したがる心理はある程度理解するが、なぜ君の知ってる言語の延長線上にLispがあると思った?別もんだぞ
でもってC++に帰りな。マジオススメ。C++のほうがうまく書けるものをなんでLispでやる



99:デフォルトの名無しさん
09/04/09 19:29:08
>>98
すいません、わからない点があるのですが、

>総称関数はメッセージ名じゃないし
確かに総称関数の名前がメッセージ名では無いとすると、今までの私の指摘は当たらないことになります。
ですがそれならば、総称関数の名前はオブジェクト指向における何を表現しているのでしょうか?そしてどういう
名前が適切なのでしょうか?

updateが出たのでJavaのObserverパターンの実装を例に挙げます。Observableの実装は
どうでもよいとして、JavaのObserverの実装を機械的にCommon Lispに変換しますと

(defgeneric update (o obj arg))

になると思いますが、貴方の話ですとこの総称関数名はまずいということになります。
(クロージャで事足りるでしょうが、ここではそういう話はしてないのに注意してください)
クラス名をプレフィックスやサフィックスにしたり、クラス名のパッケージで包むという方法は考えられますが、
それは単一ディスパッチの言語に比べて冗長であるのは先に書いた通りです。

この場合、どのような名前が適切になりますか?

>既知の概念で理解できないものを否定して安心したがる心理は
多重ディスパッチや総称関数について一度も否定してません。
ただ総称関数だと上手く記述できない場面があるのではないか、という話をしているだけです。
これを否定と捉えて煽るのはちょっとひねくれすぎてるのではないかと。


100:デフォルトの名無しさん
09/04/09 19:41:21
と書いてて思ったのですが
>マルチプルディスパッチの言語では簡単なことが単一ディスパッチの言語だとくそ面倒くさくなるよね。そして逆のこともあるよ
要するに今指摘してる点が多重ディスパッチで困難な点、ということなのでしょうか?

101:デフォルトの名無しさん
09/04/09 20:15:41
もちろん、 Java 風のオブジェクトシステムで上手く記述できないものもあるよね。
Java 風の思想をそのまま持ち込むとうまく当て嵌らないのはアタリマエで、
デザインパターンを持ち出して「これをCLで書くと…」なんて議論はナンセンス。
だいたいオブジェクト指向なんてのも広すぎる概念で、
CLのオブジェクト指向は Java とは違ったオブジェクト指向なんだよ。
Java なんか一旦忘れろよ。

102:デフォルトの名無しさん
09/04/09 22:31:46
>>95 defmacro


103:デフォルトの名無しさん
09/04/09 23:16:29
違う概念に対してupdateという同じ名前を使うというのが破綻している。

概念A に対しては パッケージX:update
概念B に対しては パッケージY:update

という別の名前を使うんだよ。
自分の知らないことを自分の知っている範囲の見方でしか切らないくせに

> これを否定と捉えて煽るのはちょっとひねくれすぎてるのではないかと。

とか笑ってしまうわ。

104:デフォルトの名無しさん
09/04/09 23:25:38
>>95

>問題にしてるのは
>・メッセージ名が同じ
>・プロトコルが異なる
C++のオーバーロードのおかげで「同じメッセージ」のように見えるが、実態としてメッセージとしてもプロトコルとしても同じではないものな希ガス。
というか、あえて言うならメンバ関数名とシグネチャあわせてひとつのメッセージ名でないの?

function update(target, flg) {
  target[arguments.callee.name+'With'+flg.constructor.name].apply(null, arguments);
}
function updateWithBoolean(target, flg) { // update(obj, true)相当
  /* ほげほげ */
}
function updateWithNull(target) { // update(obj)相当
  /* ふがふが */
}

↑こういう付加情報からのメッセージ名推測(?)みたいな動的なことをC++,Java他はコンパイル時に暗黙のうちにやっているというだけでないのかな。
>この二つを満たすメッセージを定義する上手い方法が総称関数には無いのではないか、という点です。
>単一ディスパッチの言語にはあるにもかかわらず、です。
異なるメッセージをプレフィクスに基づいて同じメッセージのように推測するという「特別扱い=オーバーロード」があるかないかというだけで、
単一ディスパッチ/多重ディスパッチの問題じゃないんじゃないかと思うぞ。Objective-Cなんかこういうことしてくれないでしょ。単一ディスパッチ”なのにもかかわらず”。
>もし統一的に表すために新たに総称関数を新たに定義した場合、その総称関数をどこに配置
>するかという事も新たに考えねばなりませんし、機械でできそうな処理を人間が書く必要が
>あるという点でLisp的ではない気がします。
そこでLisp的にはマクロの出番なんでないかな。

※Lisp系のスレでJavascriptで答えてしまってすまないorz


105:デフォルトの名無しさん
09/04/10 00:18:06
>>99 すまん。つい煽りっぽく書いたら煽りレスを呼び寄せてしまった
で、総称関数のラムダリストには決まりがある
それぞれのラムダリストは同じ個数の必須引数を持っていなければならない
それぞれのラムダリストは同じ個数の付加引数を持っていなければならない
その他いくつかの決まり事がある。>>93はこの決まりを守ってない
だからCLOSでは書けない。あきらめがつくならあきらめてくれ
総称関数がクラスの所有物でない時点で、関数名のみで自己説明的であるべきなんだよ
衝突しやすい名前選んどいて衝突したとかいうな
それでも衝突した場合にはどちらをインポートするかどっちもしないのか選べるんだし
どちらもインポートしなければ>>93の場合、あなたがどう見ても冗長と
言ってる方法で明示するしかないし自分にはどう見ても冗長に見えない
必要にして十分なことしか書いてない


106:デフォルトの名無しさん
09/04/10 00:21:17
おいオメー、さっきからうるせえぞ。「メッセージ名」「メッセージ名」ってよぉー
どういうつもりだてめー
そういう言葉は、オレたちの世界にはねーんだぜ……
そんな、弱虫の使う言葉はな……

「メッセージ名」…そんな言葉は使う必要がねーんだ。
なぜなら、オレや、オレたちの仲間は、
CLOSすると、頭の中に思い浮かべた時には!
切り替えが終わっちまってるからだッ!
だから使った事がねぇー

わかるか?俺の言ってる事…え?
「総称関数」なら、使ってもいいッ!

107:デフォルトの名無しさん
09/04/10 01:06:12
プロシュート兄貴乙

108:デフォルトの名無しさん
09/04/10 01:16:05
メッセージ渡しなOOだと「このオブジェクトの仕事は何か」から考えるだろうけど、
総称関数なCLOSだと「この関数の仕事は何か」から考えるから、
両者だと発想の順序が逆っていうか。
総称関数の名前がぶつかったらどうしようって心配は、
ある意味クラス名がぶつかったらどうしようって心配くらいには杞憂なんじゃないかな。

109:デフォルトの名無しさん
09/04/10 01:26:36
>>104
>というか、あえて言うならメンバ関数名とシグネチャあわせてひとつのメッセージ名でないの?
ああ、確かにそう考えると視野が広がります。

多重ディスパッチだと、メッセージ送信先もメッセージ名の一部と考えることができ、
そしてCLだとたまたまオーバーロードの機能が無い=異なるシグネチャから実行すべきメッ
セージの実装を決定する機能が無いと。

>>105
>だからCLOSでは書けない。あきらめがつくならあきらめてくれ
わかりました。

>総称関数がクラスの所有物でない時点で、関数名のみで自己説明的であるべきなんだよ
私は先に上げた場面をCLOSで解決できるのか、そして解決できないのであればその対処法を
欲していたので、この命名指針の提示は非常に助かります。

>どちらもインポートしなければ>>93の場合、あなたがどう見ても冗長と
>言ってる方法で明示するしかないし自分にはどう見ても冗長に見えない
冗長といってるのは、メソッドに対してクラスが名前空間を導入するという単一ディス
パッチの言語に対しての話なので、CLの視点では確かに必要十分ですね。
冗長と感じるか否かはただ単に慣れの問題かもしれません。

>>108
なるほど、わかりました。

私の中では解決することができました。長々とすいません。
ありがとうございました。


110:デフォルトの名無しさん
09/04/10 01:36:33
あくまでもCLOSでは無理ってとこがポイントだよね。
Lispの世界で広く使われている枠組みの上では無理ってだけで、
その気になればいくらでも新しい枠組みを言語レベルで追加できる余地があるってのは大きい。

111:デフォルトの名無しさん
09/04/10 02:00:03
いいか、俺が怒ってんのはな、てめーの心の弱さなんだ!
そりゃいきなりクラスのメソッドって概念がブチ壊されたんだ、衝撃を受けるのは当然だ!
割と適当に作れたアクセサまでインターフェース並に外から丸見えになっちまうんだからな。
オレだってヤバイと思う!

だが!オレたちのチームの他のヤツならッ!
あともうちょっとで喉元に喰いつけるって時に、俺の知ってる~できないんですね終了とか思考停止したりはしねぇ!
たとえ処理系の見た目がショボかろうと、ライブラリが揃ってなかろうともな!
オメーはマンモーニなんだよ!Java基準でビビったんだ!IDE支援に甘ったれて名前の命名を軽視してんだ!
分かるか?え?俺のいってる事。
Java のせいじゃねぇし、CLOSのほうが優れていると主張するわけでもねー。ただ、「違っている」だけだ。
だが、心の奥のところでオメーには他の思考モデルを認めるのにビビリがあるんだよ!
成長しろ >>109! 成長しなきゃオレたちは「栄光」をつかめねぇ。

112:デフォルトの名無しさん
09/04/10 02:15:08
しつこいよ

113:デフォルトの名無しさん
09/04/10 08:29:10
みなさんCLOSが使いやすいですか
もっと普通の表記がいいとおもいませんか

114:デフォルトの名無しさん
09/04/10 08:54:18
>>113
普通って何だよ?
このスレ的には CLOS が普通なんじゃね?
その質問はナンセンス。

115:デフォルトの名無しさん
09/04/10 09:28:18
つか、もし使いにくいならマクロ書きゃいいし…

116:デフォルトの名無しさん
09/04/10 10:28:21
cffiがc++に対応してないのは
closの力不足もあるのかなあ

117:デフォルトの名無しさん
09/04/10 10:39:02
CLOSのオブジェクト指向に戸惑ってるのかな?
java風のが欲ければ自ら作る必要があるね。グレアムおじさんのon lisp
でもオブジェクト指向言語の作りかたはかいてるので参考にすればいい。

CLOSはjava/C++族のものにくらべると繋りがゆるやかだし、
面倒な処理は少いんだが、だからマルチディスパッチでも
とりあえつあつかえる。言葉は同じオブジェクト指向でも、
考えかたは違いが大きいので、同じ目線で考えないことは
理解する上でも大切かな。

むしろ、CにCLOS風のゆるやかなオブジェクト指向を加えてもらったほう
がありがたい。C-LOS言語とでも名付けてね。

118:デフォルトの名無しさん
09/04/10 10:43:33
ちなみに、オブジェクト指向はほとんど使わないよ。使ったところが便利なところ以外はね。
グレアムおじちゃんみたいに忌み嫌うことはないけど、普段から多様すると、
スパゲティメイカーに早変りなので注意が必要かな。

119:デフォルトの名無しさん
09/04/10 17:44:53
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /

120:デフォルトの名無しさん
09/04/10 22:27:25
>>116
単純に dynamic loader がらみの話じゃね?
g++ 一つとってみても abi ころころ変わるから,
他の言語でサポートするとなると結構大変だもん


121:デフォルトの名無しさん
09/04/10 23:29:29
common lisp じゃなくて何だが plt scheme は
標準ライブラリにメッセージ渡し式のOOシステムが入っているので
興味のある人は見てみるといいんじゃないだろうか。

122:デフォルトの名無しさん
09/04/10 23:49:37
PLTを使うとついつい固有機能をつかってしまい、他のSchemeに移る敷居が高くなる両刃の剣

123:デフォルトの名無しさん
09/04/10 23:59:01
Scheme はどれにしたってそんなもの。

124:デフォルトの名無しさん
09/04/11 02:06:37
>>109 のおかげでCLOSの理解が深まった。THX。

125:デフォルトの名無しさん
09/04/11 08:28:14
>>117
こーゆうの?なんていうか、俺には冗長過ぎて無理だった。
URLリンク(www.foldr.org)

126:デフォルトの名無しさん
09/04/11 10:17:49
>>125
冗長だなぁ。。orz

127:デフォルトの名無しさん
09/04/11 12:15:05
>>125
そこの参考文献の
Andreas Paepcke,
"User-Level Language Crafting (Introducing the CLOS Metaobject Protocol)"
面白いよね。タイムリーな話題。
;;; 馬鹿syntax sugar系じゃないよ。

128:デフォルトの名無しさん
09/04/11 12:42:45
Javaならclass.nameって書けるのに(class-name class)では冗長すぎる
という思考だと、読む以前の問題じゃないのかなと思ったり

129:デフォルトの名無しさん
09/04/11 12:52:45
class-name、ださっ!
そんな書き方しねえよ。

130:デフォルトの名無しさん
09/04/11 17:50:31
J('ー`)し ごめんね。おかあさんはじめてLISPの規格にオブジェクトシステム入れたから、ごめんね


131:デフォルトの名無しさん
09/04/12 17:05:35
>>128
(name-of instance)
じゃないの?


132:デフォルトの名無しさん
09/04/12 18:47:16
かあちゃんが謝ってるのはclass-nameが規格で決まってる名前だからだろ…
>>131みたいに、インスタンスのnameプロパティへのアクセサをどう命名するかってユーザーレベルの話とは違くて
クラスの名前を取得する場合の話

133:デフォルトの名無しさん
09/04/13 03:27:49
emacsが名前補完してくれるなら
長い名前でもいいんじゃない
mutiple-value-bind
なんて素でうちこまないし

134:デフォルトの名無しさん
09/04/13 04:25:13
確かに名前補完してもらった方がいいみたいだなw

135:デフォルトの名無しさん
09/04/13 04:58:37
>mutiple-value-bind
なんかイヤな名前だな


136:デフォルトの名無しさん
09/04/14 22:27:49
>mutiple-value-bind
むちぷる ばりゅー ばいんど

むしろ何か惹かれるものがあるが・・・

137:デフォルトの名無しさん
09/04/15 15:18:31
lambdaple-value-bind
なんてありそうでないか

138:デフォルトの名無しさん
09/04/16 08:24:38
むちむち らむだぷるぷる

139:デフォルトの名無しさん
09/04/16 12:18:23
むちぷる-ぼにゅう-ぼいん

140:デフォルトの名無しさん
09/04/16 13:41:18
ひょっとして画像をよみこませる方法って
cl-pngぐらいしかないのでしょうか


141:デフォルトの名無しさん
09/04/19 15:27:49
hunchentootでmultipart-mimeの受け渡しを解説しているサイトとか資料へのポインタを知っていたらご示唆ください


142:デフォルトの名無しさん
09/04/21 18:09:29
おまいら clispでgtk使うのはどうしたらいいですか?


143:デフォルトの名無しさん
09/04/21 22:36:30
clispでgtk使えばいいと思うよ!

144:デフォルトの名無しさん
09/04/23 02:35:30
lispを始めてみようと思い立ったのですが
環境構築の段階でつまづいていますのでご教示下さい。


1) SBCLでwinアプリ作成
 =>最初にDOSプロンプトが立ち上がってしまうのでDOSプロンプトを立ち上げないようにしたい。
 っていうかファイルでかすぎ

2) CLISPでwinアプリ作成
 =>最初にDOSプロンプトが立ち上がってしまうのでDOSプロンプトを立ち上げないようにしたい。

3) ECLでFFIの利用方法が分からない。exeを実行しようとすると以下の様になる。
 errorlog: URLリンク(www.4shared.com)
 SBCL、CLISP、ACLはconflict起こさないし、一般的なライブラリだと思ってるのですが・・・

3-2) ECLでLispbuilderがインストールできない。
 errorlog: URLリンク(www.4shared.com)
 ちなみに"C:/etc/cvs/ecl/site/lispbuilder-sdl/trivial-garbage/trivial-garbage.c"というファイルは存在しないので意味がわかりません。

4) ACL(free)でそもそもexeの作成方法が分からない。


目的はLispでwindowsアプリを作ることです。
とりあえず1~4のどれかひとつでも打開出来れば後はなんとかなると思うんですが・・・
他の方法でも普通のwindowsアプリを作成する方法があればそれでも構いません。
商用ACLを買うというのは無しの方向で
どなたかお力添えをよろしくお願いいたしますm(_ _)m

145:デフォルトの名無しさん
09/04/23 03:51:28
気持ちをくじくようなことをいって悪いけど、Windowsでみためのいいデスクトップ
アプリを作りたいんだったらlisp系言語は向いてないと思うよ。
よいハカーは道具を適材適所で使います。
プログラミングのお勉強がしたいということならまずは*nixのインスコがおすすめ。

146:デフォルトの名無しさん
09/04/23 04:02:22
> (setq * 10)
10
> (* 5 *)
50
> (* 5 *)
250

"*"を変数として通常使用することもないと思いますが、
なぜ最初の"(* 5 *)"の後に"*"が50になるのか解説求む。


147:デフォルトの名無しさん
09/04/23 04:19:20
>>146
URLリンク(www.lispworks.com)

The variables *, **, and *** are maintained by the Lisp read-eval-print loop to save the values of results
that are printed each time through the loop.

148:デフォルトの名無しさん
09/04/23 04:22:26
>>144
> 4) ACL(free)でそもそもexeの作成方法が分からない。

フリーのExpress editionにはその機能はついていません。
スタンドアロン実行ファイルを作成するにはEnterprise editionに付属している
Runtime licenseが必要になります。

> 目的はLispでwindowsアプリを作ることです。

現時点では、フリーの処理系でまともにWinアプリを作成するのは非常に難しいと思います。
私は試したことがないですが、Winアプリの作成をサポートしてるLispWorksやCorman CLを
使うのがいいんじゃないでしょうか。特にCorman CLはWindows専用という珍しい処理系で、
Win32 APIを簡単に扱えることを売りにしているようです。

149:デフォルトの名無しさん
09/04/23 09:01:15
コマンドラインから実行したっていいじゃないか
これだって立派なWinアプリなのに…

150:デフォルトの名無しさん
09/04/23 09:37:07
windowsってフリーのツールをつかってアプリを作るのに一番向いてないOSだと思うよ。
アプリ作りをするんだったらlinixやFreeBSDじゃまいか?


151:デフォルトの名無しさん
09/04/23 10:25:26
OSがある限り、叩けないAPIなどない

152:デフォルトの名無しさん
09/04/23 11:22:43
つ 非公開API


153:デフォルトの名無しさん
09/04/23 13:16:41
ECLでdllってできた?
GUIは別にするって手も

154:デフォルトの名無しさん
09/04/23 13:17:31
GUIのwebアプリならいいのできるのにね

155:デフォルトの名無しさん
09/04/23 14:25:51
もっと目的のOS自体を持ってなくてもアプリケーションが作れる
言語が増えれば良いのに....windowsがないからwindows向けの
アプリケーションが作れないな....Cで書くとコンパイルが必要だし
...

156:デフォルトの名無しさん
09/04/23 19:34:48
ゴ ゴ ゴ ゴ ゴ ゴ ゴ ゴ   
   /\  /| 
  / /| \/ |(\ /)
 / / |  \|( ゚ー゚) <全力でWindowsを捨てOpenBSDに移行せよ
/  / |   __〃`ヽ 〈_  
  / γ´⌒´--ヾvーヽ⌒ヽ 
  //⌒  ィ theo`i´  ); `ヽ
 //    ノ^ 、___¥__人  |
/ !  ,,,ノ爻\_ _人 ノr;^ >  )
/ (   <_ \ヘ、,, __,+、__rノ/  /
  ヽ_  \ )ゝ、__,+、_ア〃 /
    ヽ、___ ヽ.=┬─┬〈  ソ、
      〈J .〉、|   |, |ヽ-´
      /""  | sshd |: |
      レ   :|:   | リ
      /   ノ|__| |
↑    /| ,,  ソ  ヽ  )
 \_/ .,ゝ   )  イ ヽ ノ
     y `レl   〈´  リ
     /   ノ   |   | .
     l  /    l;;  |
     〉 〈      〉  |
    /  ::|    (_ヽ \、
   (。mnノ      `ヽnm

157:デフォルトの名無しさん
09/04/23 19:44:06
Ubuntuでも結局Javaばっかだけどな

158:デフォルトの名無しさん
09/04/23 20:03:52
visualstudioみたいな開発ツールってありますか?

159:デフォルトの名無しさん
09/04/23 22:59:15
>>158
slime backend の swank を eclipse で使えるように
したのだったら有る

# エディタが、アホなんで使う気にならないが…


160:デフォルトの名無しさん
09/04/23 23:52:38
eclipseで調べてたらcuspってのを発見した

161:159
09/04/24 11:53:19
それだ >>160


162:デフォルトの名無しさん
09/04/24 12:47:14
OpenGLのバインドがなぜあんなに充実してるのだろう

163:デフォルトの名無しさん
09/04/28 11:46:49
URLリンク(cyrusharmon.org)
これを動かしたいのだけど
いろんなものに依存しててasdf-installだけじゃ入らない
依存してるものにリンク切れしてるものがあったり

誰かこれを動かせてる人はいませんか

164:デフォルトの名無しさん
09/04/28 19:06:28
cuspは今のeclipseだと動かなくないか?
java製の統合環境もあるよ
ジャバラなんとかって

165:デフォルトの名無しさん
09/04/30 00:05:17
cusp普通に動いてるよ。

Windows上の場合は、lispプロジェクトの
コードをsjisにすると良い感じ。

166:デフォルトの名無しさん
09/04/30 00:08:02
あ、バージョンはeclipseが3.4.2、Cusp が0.9.390

他言語同様、オンマウスでヒントもでるし、
部分評価もやりほうだいなので、Windows操作系
では最高ランクでないかねぇ。

167:デフォルトの名無しさん
09/05/01 01:43:39
>>166
どうもSBCL_HOMEの設定がおかしいんじゃないかと疑ってるんだけど...
環境変数手で入れました?よかったら今の設定教えてもらえないかなあ...
FAQみるとcusp/sbclって書かれてるんだけど、こんなパス存在しないし
お願いします

168:デフォルトの名無しさん
09/05/01 03:59:11
URLリンク(www.ibm.com)

に書いてあるとおりで「概ね」いけたはず。
(全く同じではないと思うが、大枠はこれでOK)

プラグインインストーラは、新型インストーラではなくて旧型を使うことになるはず。


環境変数は手でいれた覚えは無くて自動で設定されたはずだけど一応。
私がeclipseをインストールする際に、C:\usr\eclipseに入れていること前提です。

「ユーザー変数」の
PATH
 C:\usr\eclipse\eclipse\plugins\sbcl_win32_1.0.20\sbcl\

SBCL_HOME
 C:\usr\eclipse\eclipse\plugins\sbcl_win32_1.0.20\sbcl\


これで動いてたけど、自分は後で、sbcl ver 「1.0.22」 に引き上げてる。
(--script オプションが1.0.22から使えるから)


使う際には、プロジェクトにある.aspファイルを(右クリからとか)でロードする必要がありま。
ALT+Rで選択してる部分のS式の評価ができる。


Lisp用の設定内はデフォのまま。
(よって、Implementations の Lisp Executable とかも設定する必要なし)


このくらいかなぁ~

169:デフォルトの名無しさん
09/05/01 07:23:11
eclipsec.exeでログ見てみたらエラー吐いてた・・・
sbcl、swankの起動はうまくいってるみたいなんだけどな
>>> Found default sbcl folder: C:\eclipse\plugins\jasko.tim.lisp_0.9.390\sbcl
>>> Found default sbcl folder: C:\eclipse\plugins\jasko.tim.lisp_0.9.390\sbcl
start
]This is SBCL 1.0.22, an implementation of ANSI Common Lisp.
]


Swank started at port: 4005.

java.lang.IllegalThreadStateException: process has not exited
at java.lang.ProcessImpl.exitValue(Native Method)
at jasko.tim.lisp.swank.SwankInterface.connect(SwankInterface.java:411)

vistaでuac切った環境なんだけど、なんかまずいのかなあ

170:デフォルトの名無しさん
09/05/01 07:33:14
ちなみにバージョンはeclipse、cuspとも>166と同じ
java.version=1.6.0_13

171:デフォルトの名無しさん
09/05/01 14:57:38
>>163
いろいろ試してるうちにサイトが消えた
なんでだ

172:デフォルトの名無しさん
09/05/08 12:17:18
図書館に行ってきたら、目当ての実践common Lispが貸し出し中だった
ネットでみれるからいいんだけどさ

173:デフォルトの名無しさん
09/05/08 12:25:23
買えよ

買われないと絶版になっちゃうだろ

174:デフォルトの名無しさん
09/05/08 12:35:31
>>173
英語読むハメになるから買う気まではないなあ
図書を返すついでに借りようかなと思った程度で
とりあえず、うちの図書館ではLisp本の奪い合いがあるみたいだ
頻繁に貸し出し中になる

lispに還元するなら別のなにかでするよ
還元する力もないが

175:デフォルトの名無しさん
09/05/08 13:07:33
>>174
pdfならapressのページで登録すれば配布されているんだよ。<PCL
もっとも原著だろうが訳書だろうが、本をもってるほうがなにかと
便利なんだが。

176:デフォルトの名無しさん
09/05/08 15:58:21
>>175
本は目にやさしいしね
力尽きたときに寝転がりながらパラパラ読めるのがいい
全体把握もしやすいし、索引がしっかりしていれば検索もしやすい

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

slime便利だね
関数補完(一覧)が出るだけでも勉強効率があがって、すごく助かる

177:デフォルトの名無しさん
09/05/08 16:51:39
買えって、てっきり翻訳版のことを言ってるのかと思った
あれよくないの?

178:デフォルトの名無しさん
09/05/08 17:25:50
PDFも上手く作ってあれば画面で読んでも快適だよ。
目次からジャンプしたり好き勝手に検索したりというのは紙じゃ無理だ。
単にスキャンしただけというのは駄目だけど。
形式は別にPDFじゃなくてもいいんだけど、数式や特殊記号や図が多く
なりがちな専門書は他にいい形式がないんだよね。
本を何冊も持ち運ぶのは大変だけど、データなら何冊あっても楽だ。
もう紙の辞書なんか誰も使ってないのはこの便利さがあるからでしょう。

ただ寝転んだままノートパソコンの画面をみるのはつらいので、
日本でもKindleが使えるようになって欲しい。とりあえず日本語出なくても
いいから。洋書の専門書は重いんだよなあ。

179:デフォルトの名無しさん
09/05/08 17:32:29
>目次からジャンプしたり好き勝手に検索したりというのは紙じゃ無理だ。
見覚えのあるテキストをもう一度読みたくてざっとめくるってのができないのが電子書籍の欠点なので僕は紙の媒体を捨てられない


180:デフォルトの名無しさん
09/05/08 19:13:52
>>178
>もう紙の辞書なんか誰も使ってないのはこの便利さがあるからでしょう。
羅和とか大漢和とか古語辞典も全部電子化されればいいのになあ
紙媒体しかない辞書が多過ぐる

181:デフォルトの名無しさん
09/05/08 20:30:36
電子版は定期的にシリアルナンバーを打ち込まないと使えないとか
他に何を仕込まるか分からないとか、そういうのをやめてくれたらなあ

182:デフォルトの名無しさん
09/05/09 12:09:45
数年ぶりに開いた本に陰毛がはさまってることだってあるじゃないか

183:デフォルトの名無しさん
09/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 を使う意味は何なんでしょうか?

184:デフォルトの名無しさん
09/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))

185:183
09/05/09 14:51:29
今気づいたのですが同じ本に↓のようにありました。
URLリンク(user.ecc.u-tokyo.ac.jp)
> 以下の4個の式はみな同じ働きをする:
> (+ 1 2)
> (apply #'+ '(1 2))
> (apply (symbol-function '+) '(1 2))
> (apply #'(lambda (x y) (+ x y)) '(1 2))

これだと関数が分かってるときに
何でわざわざ apply を使うのかますます分からないです。
気にするなって事なんでしょうか。

186:デフォルトの名無しさん
09/05/09 14:58:54
(apply #'+ '(1 2))と(+ 1 2)が同じってことわかってる?
(+ '(1 2))とか(funcall #'+ '(1 2))だとエラーになるよね

187:183
09/05/09 15:13:20
>>184
引数をリストで渡せて、その要素が一つ一つ関数への引数として渡せるのが便利だからって事ですよね。
確かにそれだと納得できます。ありがとうございます。

a が (1 2 3) として
(list a) のように関数を先頭にした表記で
実際には (list 1 2 3) と引数を展開して実行できるやり方はないんですか。

188:デフォルトの名無しさん
09/05/09 15:39:44
sbclrcをコンパイルする事はできないでしょうか?
sbclrcでシェバング対策やらasdfのインポートやらをしていたら
sbclを立ち上げてから*のプロンプトが出るまでに5秒ぐらいかかるように
なったのですが、皆さんもこれぐらいなのでしょうか?
よろしくおねがいします。
あと、sbclに履歴機能をつける方法とEmacsキーバインドで
操作できる方法が有ればよろしくおねがいします。

189:デフォルトの名無しさん
09/05/09 15:46:34
>>188
>あと、sbclに履歴機能をつける方法とEmacsキーバインドで
>操作できる方法が有ればよろしくおねがいします。

Slimeでも何でもいいからEmacsの中で使えばいいのでは。

190:デフォルトの名無しさん
09/05/09 15:49:21
>>188
sbclrcの内容を foo.lisp とかに移してからそれをコンパイルして
foo.fasl にし、sbclrc はそれをロードするだけにするとか。

191:159
09/05/09 15:50:21
>>188 sb-ext:save-lisp-and-die じゃあかんの?


192:デフォルトの名無しさん
09/05/09 18:59:29
>>190
そうしました、しかしsbclに標準でそういった機能がつくと
うれしいですね。(rc-compile)見たいな...

193:192
09/05/09 19:09:09
sbclのtoplevel.lispをざっと読んでみましたが
もしかしたら、sbclrc.faslというファイルが有ればそちらを
優先して読み込むと言う設定に改造してコンパイルすれば
良いかもしれませんね。ついでに(rc-compile)関数を組み込みにして
ファイル名を指定しなくても組み込みのsysinit-pathname
という関数を利用して適切なsbclrcファイルを選択してコンパイル
してくれるという関数が作れそうです。

194:デフォルトの名無しさん
09/05/09 21:58:39
(defun foo (...) ...)
の中身をみたいなのだけど

clispだと

#'foo リターン

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

sbclだとできない

sbclでfooのソースが帰ってくる関数ないのでしょうか


195:デフォルトの名無しさん
09/05/10 00:15:10
Common LispでOpenGLを使うライブラリみたいなのはありますか?

196:デフォルトの名無しさん
09/05/10 00:25:57
URLリンク(www.cliki.net)

197:デフォルトの名無しさん
09/05/10 00:50:16
どうもです。ありがとうございます。

198:デフォルトの名無しさん
09/05/10 12:17:48
cmucl の最新スナップショットではutf8が使えるようになったよ。
これで高速なcmuclが日本語でも使える。ただし、32bit x86 のみ

199:デフォルトの名無しさん
09/05/10 14:32:19
>>198
最新じゃ無くてもutf8は使えてたぞ
日本語はダメだったけど



200:デフォルトの名無しさん
09/05/10 14:59:37
metatilitesの中のon lispのコード入ってるんだね
こういう便利なものってみんなどうやってみつけてるの?

201:デフォルトの名無しさん
09/05/10 16:19:01
CLiCCを動かせた人いますでしょうか?
いろいろコードの手直ししないとコンパイル通りませんよね?
最後にlispのコードよむところで
ffiがどうとかいうエラーでてあきらめたのですが

202:デフォルトの名無しさん
09/05/10 21:10:48
imaximaってslimeみたいにソース編集しながら
式の評価をいろいろ試せる環境なわけじゃないんだね

203:デフォルトの名無しさん
09/05/10 23:53:07
素直に、質問しろよ。

204:デフォルトの名無しさん
09/05/11 09:26:05
>>207
inferior-maxima-modeと組み合わせてみればできるんだけど、その方法はあまりかかれてないね。

205:デフォルトの名無しさん
09/05/11 11:20:08
>>207 に期待。

206:デフォルトの名無しさん
09/05/11 21:18:44
>>207 その発想はなかったわ。

207:デフォルトの名無しさん
09/05/11 21:47:36
Maximaとslimeのreplを行き来しつつ、ついでにemacsの中で
皿洗いも済ませてしまいたいのですが、そういうことは可能でしょうか?
アイコンを見ている限りは何とか出来そうな気もするのですが。。。
ご教示いただければ幸いです。

208:デフォルトの名無しさん
09/05/11 22:41:23
>>207
インターネット経由で皿洗い機に接続するモードを用意すれば出来そうです。
URLリンク(ascii24.com)

209:デフォルトの名無しさん
09/05/12 11:24:27
トースターでnetbsdが動くから、トースターで皿洗いができるということか

210:デフォルトの名無しさん
09/05/13 12:31:58
meta-bangの人のコード見てたら

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

便利そうだけど使い方わかんない

211:デフォルトの名無しさん
09/05/13 13:18:08
>>210
この辺から見てみるといいよ。
URLリンク(www.lispworks.com)


212:デフォルトの名無しさん
09/05/13 20:46:53
clozure cl のWindows版のインストールの仕方を教えてください。
ダウンロードして解凍、CCLのフォルダができたのですが、
その後、どうしたらいいのでしょう?

213:デフォルトの名無しさん
09/05/13 23:04:50
>>212
それでインストールできてるんじゃね?
何がわからんのかわからん

214:デフォルトの名無しさん
09/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のバグだと思うのですが、どうなのでしょうか?
解決法などありましたらご教授ください。


215:デフォルトの名無しさん
09/05/14 18:53:33
split関数がなかったのでネットからダウンロードしたのですが、
こういう関数がパッケージになっているのは何故ですか?
パッケージにせずに単にloadする場合との違いは何でしょうか

216:デフォルトの名無しさん
09/05/14 23:11:26
>>215
URLリンク(www.komaba.utmc.or.jp)


217:デフォルトの名無しさん
09/05/15 01:09:13
clozure clっての入れてみたんだがSBCLより速いんだな
フィボナッチの計算で比べてみたら3倍ぐらい速かったわ

218:デフォルトの名無しさん
09/05/15 01:12:25
>>217
速い部分もあれば、遅い部分もあるよ。
ベンチマークが公開されてるから、見ると結構面白いと思う。
Allegroとかとの比較もあるよ。

219:デフォルトの名無しさん
09/05/15 01:33:51
>>217
ピープホール持ってない sbcl/cmucl に言ってはならないことを…


220:デフォルトの名無しさん
09/05/15 03:39:02
>>216
ありがとうございます。
名前が重複しないように、ということですね。

221:デフォルトの名無しさん
09/05/15 15:46:48
(setq l (list 0))
(pushnew 0 l) -> l= (0)

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

こんなことおきるんだね
ゼロって怖い

222:デフォルトの名無しさん
09/05/15 16:19:42
>>221
よく考えたらあたりまえだった

223:212
09/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.


224:デフォルトの名無しさん
09/05/15 23:16:57
Common LispでCや他の言語のようなキャリッジリターンを使用する方法は
どんな方法が有るのでしょうか?
formatについて調べてみたのですがそういう物は無いようですし。
よろしくおねがいします。

225:デフォルトの名無しさん
09/05/15 23:52:16
改行コードのことか?
(format t "hello~%yahoo")

226:デフォルトの名無しさん
09/05/16 00:05:07
>>225
そちらではなくて復帰のほうです。
引き続きよろしくおねがいします。

227:デフォルトの名無しさん
09/05/16 00:28:26
Cでやるようにキャリッジリターンを出力したいって言うんなら
(princ (code-char 13))
じゃないかな。本当にスクリーンコントロールしたいならcl-ncursesとかを使ったほうがいいと思うけど。

228:デフォルトの名無しさん
09/05/16 01:10:25
>>227
ありがとう御座います。
ロード画面のように
棒がのびるエフェクトをつけたかったのでキャリッジリターンを
知りたかったのです。インタプリタだと確認できないので
ファイルに書いて試してみたいと思います。ありがとう御座いました。

229:デフォルトの名無しさん
09/05/16 13:00:24
またmximaスレが落ちた
ある意味matlabより便利なのに,思ったより使ってる人すくないのかなあ

230:デフォルトの名無しさん
09/05/16 13:36:20
Common Lispでリストの要素を文字列化するには
どのようにすれば良いでしょうか?
'(hello world)というリストの
各要素の長さを別のリストに移したいのでmapcarをつかおうと思うのですが、
legthは文字列でないと受け取ってくれないので、どうしようかと
思っています。
よろしくおねがいします。


231:デフォルトの名無しさん
09/05/16 14:09:31
(mapcar 'length (mapcar 'string '(hello world)))

232:デフォルトの名無しさん
09/05/16 14:35:32
ありがとう御座います。

233:デフォルトの名無しさん
09/05/17 10:30:29
clbuildでmcclimをインストールし、デモもちゃんと動いたのですが、
lispファイルからmcclimをrequireしてもmcclimが見つからないようです。

URLリンク(mcclim.cliki.net)
ここを参考にしたのですが、他に何かやることがあるのでしょうか?

234:デフォルトの名無しさん
09/05/17 12:09:23
URLリンク(www.neuroarena.com)
裏で動いてるのはsbclらしい。

235:デフォルトの名無しさん
09/05/17 22:29:13
Common Lispの仕様書が欲しいのですが、
HyperSpecやらCLtL2やら
ANSI X3.226-1994 Information Technology - Programming Language - Common Lisp
やらが出てきてどれが本物なのかがわかりません。
少し聞いた話がANSIが仕様書でCLtL2はその仕様書の編纂途中の様子とかを記録した物で
HyperSpecは辞書のような物だと聞いた事が有ったような....
できれば書籍で販売されているとうれしいです。


236:デフォルトの名無しさん
09/05/17 23:15:45
ヤンデレが治ったら本気出すスレ

237:デフォルトの名無しさん
09/05/17 23:28:46
そりゃANSIで規格になってるんだから当然書籍で売っている。
ANSI/INCITS 226-1994
URLリンク(www.techstreet.com)
$350.00 USD

238:デフォルトの名無しさん
09/05/18 00:27:09
$350.00 って趣味で出すにはちょっと高いかも

239:デフォルトの名無しさん
09/05/18 00:35:58
趣味ならANSIからPDFを買って自分で印刷すればいい

240:デフォルトの名無しさん
09/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式でも関数でもないと帰ってきてしまいます。
これを回避するにはどのようにすれば良いのでしょうか?
よろしくおねがいします。


241:デフォルトの名無しさん
09/05/19 01:12:37
>>240
carにlambda式を置くというバッドノウハウは無視して
常にfuncallを使うようにすれば良いと思います

242:デフォルトの名無しさん
09/05/19 06:03:18
>>240
はまる人の少ないところだからあまり知られてないけれど。
URLリンク(www.lispworks.com)
>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 で始まるリストじゃなきゃ駄目です。
リーダマクロなら評価の前に式の変形を行うからいけるはずだけど。

243:233
09/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というライブラリが何かエラーを起こしているようなのですが、対処法はありますでしょうか?

244:デフォルトの名無しさん
09/05/20 15:05:06
OpenTypeFontが扱えないとか。

245:233
09/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含め全て再インストールした方が良いでしょうか・・

246:デフォルトの名無しさん
09/05/24 02:13:30
>>245
こちらではほとんど同じ環境ですが、mcclim-freetypeもmcclim-truetypeも
使えているようです。mcclimはclbuildで入れました。mcclim-truetype.asdでのcl-aaへの
依存を取り除いた以外は特に変更を入れていません。


247:233
09/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だけではインストールされなかったライブラリ等あれば、お教えいただけると幸いです。

248:246
09/05/26 18:05:45
>>247
gitは入れていますか?zpb-ttfをclbuildで入れるときにこれが必要だったような気がします。
(macportsで入れました)

249:デフォルトの名無しさん
09/05/28 12:23:50
Teepeedee2ってほんとに速いの?

250:233
09/05/29 05:58:43
>>248
返信ありがとうございます。
どうにもならないようなので、一度すべて再インストールしてみることにしました。

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

これ以上場所を取るのも悪いので、以降は自分で何とかしてみることにします。
また新しく何か分かった時は質問させていただくかもしれないので、その際は宜しくお願いします。

251:246
09/05/29 06:25:07
>>250
ほかの話題を邪魔してしまってる訳でもないし、スレチでもないので別にいいのでは?
エラーメッセージから推測するに、特定のフォントのフォーマットが合わないのかも
しれませんね。
URLリンク(www.xach.com)
によると、ユニコードマップがないフォントはだめと書いてあるのでもしかしたら
互換性のないフォントのせいでこけているということもあり得ます。
追加で入れたフォントをいったん外してみたらどうでしょう?

252:233
09/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*には存在しないディレクトリが与えられていて、それでもライブラリフォルダを参照しているので、どう変更したものか、というところです。

もう少し考えてみます。

253:246
09/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*の方はこれらの値のうち相対パスになっているものにだけ
使われるので、今は気にしなくて良さそうです。

254:デフォルトの名無しさん
09/06/01 19:37:29
on lisp 注文しちまった

255:デフォルトの名無しさん
09/06/02 01:52:27
>>254
なんだか注文した事が後悔されているように読めて悲しい。
技術書の良くできた本って読み物としても良くできてるんだよね。
そしてOn lispは読み物としてもおもしろい本だったよ

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

;;; 小生は活字中毒なのもあるかもしれんが


256:デフォルトの名無しさん
09/06/02 02:12:19
OnLispは文学

257:デフォルトの名無しさん
09/06/02 02:13:22
勃起した

258:デフォルトの名無しさん
09/06/02 02:18:11
技術書でかつ訳書といえば、大抵は意味不明な難読日本語に悩まされるのが常だけど、
On Lispは明瞭かつ流暢な日本語で書かれているので、100点を付けてもいいよ

259:デフォルトの名無しさん
09/06/02 02:42:29
>>258
それで悩んだのはクヌース本の初版だけだったな、ASCII版は普通によめた

でも算符とか鍵盤とかの訳語は好きだぜw


260:デフォルトの名無しさん
09/06/02 16:24:50
算符じゃなくて算譜だね。この訳語が定着しなかったのは残念。

確かに昔の技術書や科学書は硬い言葉使いが多くて読みづらかったけど、
それでも何とかなっちゃう秀才が大学教授になって、やはり硬い文章を
再生産するのかもしれないなあと思ったりして。

261:デフォルトの名無しさん
09/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))

これってもっとかっこよくエレガントに書けませんかね?
パターンマッチとか使えるといいんだがなぁ...

262:デフォルトの名無しさん
09/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))))))))

263:233
09/06/04 00:09:40
>>253
返信ありがとうございます。
requireの下に、
(setf (cdr (nth 8 mcclim-truetype::*families/faces*)) #P"/Library/Fonts/Arial Unicode.ttf")
を追加したところ、ようやく日本語が表示されました。

色々説明不足であったにもかかわらず、何日もに渡ってお教えいただき、本当にありがとうございました。
初めの方に返信を下さった方々もありがとうございます。
Lisperの皆さんの優しさにちょっと感動です。

264:デフォルトの名無しさん
09/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の方が若干遅かったのは驚きました。
タイミングの問題ですかね?

265:デフォルトの名無しさん
09/06/04 07:01:08
末尾再帰最適化のメリットは主にスペース面で、スピード面の直接の貢献は少ないんじゃないかな。
むしろ末尾再帰のために引数が増えたりすると、スピード面ではデメリットになっているかもしれない。

266:デフォルトの名無しさん
09/06/04 10:59:58
>>264
コンパイルした?
>>265
なことはない。

267:デフォルトの名無しさん
09/06/04 11:59:07
相互末尾再帰は最適化やってくれるんかな
a->b b->c c->d・・・みたいな

268:デフォルトの名無しさん
09/06/04 12:09:26
末尾再帰も相互末尾再帰も末尾呼び出しの最適化だ


269:デフォルトの名無しさん
09/06/04 12:36:39
>>267
Clinger の "Proper tail recursion and space efficiency" でも読みなされ。

270:264
09/06/04 13:07:42
コンパイルした結果がそのようになりました。
(proclaim '(optimize speed))
を忘れていたので帰ったら試して見ます

271:デフォルトの名無しさん
09/06/04 22:00:17
>>266
tail call 用の引数の計算にスタック上のデータが必要だと、
処理が少しだけ面倒くさくならない?
なんかうまいやり方があるのかな。

272:264
09/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


273:デフォルトの名無しさん
09/06/05 07:34:02
末尾再帰版が早いときもあれば遅いときもある、ってぐらいじゃないかな。
何回かやってみると必要サイクル数は少し変動してるし(ガベコレのタイミングのせい?)。
うちの環境ではどちらが早いとも言えなかった。

274:デフォルトの名無しさん
09/06/07 11:14:44
今時Common Lispを始めようなんて、
いったいどういう理由なんですか?

275:デフォルトの名無しさん
09/06/07 11:28:03
>>274
どういう理由と文脈で「今時」とか嫌味つけてそういうことを聞くの?
人それぞれだと思うよ。

276:デフォルトの名無しさん
09/06/07 11:31:25
sbclをアップデートしたのでasdfを再コンパイルするようにshell scriptを書いて
実行したのですが、
; loading system definition from
; /Users/hoge/.sbcl/systems/cl-containers-documentation.asd into
; #<PACKAGE "ASDF0">
; registering #<SYSTEM CL-CONTAINERS-DOCUMENTATION {127632F9}> as
; CL-CONTAINERS-DOCUMENTATION

debugger invoked on a ASDF::FORMATTED-SYSTEM-DEFINITION-ERROR:
don't recognize component type DOCUDOWN-SOURCE

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.

(ASDF::SYSDEF-ERROR "~@<don't recognize component type ~A~@:>")[:EXTERNAL]
とでて一度引っかかります。
cl-containers-documentation.asdのバグなのでしょうか?
よろしくおねがいします。

277:デフォルトの名無しさん
09/06/07 16:26:46
安物ルータのhtml形式で書かれた通信ログを定期的に保存したいんですが、どのようにしたらいいんでしょうか?
できれば、タグを取り除いたplain text形式で保存したい。

ヒントでいいので、教えていただきたい。

278:デフォルトの名無しさん
09/06/07 17:19:10
つcron, perl

279:デフォルトの名無しさん
09/06/07 17:32:26
>>278
cronは、使うと思うんだけど。スクリプトはclで書いてみたいんですが。
とりあえず、簡易版でいいので実装できれば、いいかなと思っています。

280:デフォルトの名無しさん
09/06/07 20:11:53
read-line-intoをSBCLで使えるようにできるライブラリはありますか?

281:デフォルトの名無しさん
09/06/07 20:31:22
>>280
(setq var (read-line ...))
じゃ, あかんの?


282:デフォルトの名無しさん
09/06/07 20:36:15
>>281
データが大量なのでバッファを使った読み込みが好ましいんですが、
read-sequenceでは使い勝手が悪いので・・。

283:デフォルトの名無しさん
09/06/07 20:39:46
固定長の、ですね。訂正します

284:デフォルトの名無しさん
09/06/07 20:41:21
>>282
ラッパ書けばいいじゃん


285:デフォルトの名無しさん
09/06/07 22:40:50
だれか私に最初から教えてください。clisp

286:デフォルトの名無しさん
09/06/07 22:47:12
いいよ。どのくらい最初から?

287:デフォルトの名無しさん
09/06/07 22:54:10
適当なデータ型のリストを作成して、リストの内容を表示しようとしたら、どう書いたらいい?
超初心者ですりません。Cしか知りません

288:デフォルトの名無しさん
09/06/07 23:03:01
>>4に乗っているチュートリアルのどれかかなにかを読むのが一番だと思います。

289:デフォルトの名無しさん
09/06/07 23:05:42
なるほど、勉強してきます。

290:デフォルトの名無しさん
09/06/07 23:10:54
えらく曖昧だな。こんなんか?
CL-USER> (defstruct st id name) ; 適当なデータ型
st
CL-USER> (defvar *list* (list (make-st :id 0 :name "foo") (make-st :id 1 :name "foo")))
(#S(ST :ID 0 :NAME "foo") #S(ST :ID 1 :NAME "foo"))
CL-USER> (dolist (e *list*)
(print e))

#S(ST :ID 0 :NAME "foo")
#S(ST :ID 1 :NAME "foo")
NIL


291:デフォルトの名無しさん
09/06/08 02:24:42
いろいろ読みあさってなんとなくだけどわかってきた気がする。ありがとう。

292:デフォルトの名無しさん
09/06/08 06:59:56
>>279
それをlispで書きたい理由がわからないな。lispの練習をしたいならもっといい問題が
他にあるし、この問題を解きたいならもっといいソリューションが他にあるし。
それでもどうしてもcommon lispでやりたいなら
URLリンク(ja.doukaku.org)
でも見ればいいと思うよ。

293:デフォルトの名無しさん
09/06/08 08:48:04
>>292
> それをlispで書きたい理由がわからないな。lispの練習をしたいならもっといい問題が
> 他にあるし、この問題を解きたいならもっといいソリューションが他にあるし。

問題としては良くないんでしょうか?
練習もかねていますし、将来、この問題をもうちょっと高度にした処理も書きたいと思っています。

> URLリンク(ja.doukaku.org)

参考にさせていただきます。
ありがとうございました。

294:デフォルトの名無しさん
09/06/11 02:05:42
GNU Common Lisp 2.6.7を使っていて、記述した関数を読み込ませたのですが、
(load "ファイル名.l")と実行しても読み込めません。
コマンド自体は通っているようなのでファイルを置く場所が間違っていると思います。
GNU Common Lisp 2.6.7でいうカレントディレクトリは何処なんですか?

295:デフォルトの名無しさん
09/06/12 00:08:44
schme lispスレでこぼしていた者です。
遅くなってすいません。
パッケージのインストール・使い方について教えてください。
このサイトを読んでこいでもいいので、よろしくお願いします。

(load "hoge.lisp")は、わかるんですが、パッケージになるとわけがわかりません。
ライブラリのPATHの通し方もよくわかっていません。
でも、emacs lisp, schemeについては基本的なことはわかっているつもりです。でも、slimeのinfoをまだ読んでいませんが。
URLリンク(codepad.org)

CLの書籍はピーターうんたらさんの実践common lispの日本語訳のみ所有しています。

296:デフォルトの名無しさん
09/06/12 02:13:31
>>295
asdfで検索すると幸せになれる
主要なライブラリならclbuildを使う

297:デフォルトの名無しさん
09/06/12 02:38:17
あぁぁぁ (lambda x ...)素敵過ぎ

298:デフォルトの名無しさん
09/06/12 05:05:10
>>296
言われたとおり、ググって、みまわりしてきた。asdfは、ちょっとわかった感じだけど。まだ全然わかっていない。
asdfの英文のマニュアルも質素過ぎて、よくわからない。
clbuildは、asdf-installが中途半端に使った状態で使っていいのだろうか。
あとgentooのemerge(package system)を使わないで、clbuildを使って、処理系を入れた方がいいんでしょうか?

299:295
09/06/12 07:20:01
あっ、そういうことか。なんかわかってきたかも。

300:デフォルトの名無しさん
09/06/12 12:33:34
ubuntuだと
/usr/share/common-lisp
以下にasdfがつっこむようにされてるけど、他はどうなってるの?


301:デフォルトの名無しさん
09/06/12 19:26:50
>>294
 *default-pathname-defaults* で確認できんか?GCLは使ってないが。

302:デフォルトの名無しさん
09/06/13 19:16:16
lingr-down-p



303:デフォルトの名無しさん
09/06/14 01:59:39
(defconstant lingr-down-p t)

304:デフォルトの名無しさん
09/06/14 02:06:33
Location: URLリンク(gigamonkeys.com)
Copyright ← 2003-2005, Peter Seibel

14. Files and File I/O

(let ((in (open "/some/file/name.txt" :if-does-not-exist nil)))
(when in
(format t "~a~%" (read-line in))
(close in)))
を習ったんだけど、一行ずつ足す方法ってどうやるんですか?
string-to-integerみたいな関数はないの?
$ seq 1 100 > /some/file/name.txt

305:デフォルトの名無しさん
09/06/14 02:12:39
>>304
あるよ
URLリンク(www.lispworks.com)

306:デフォルトの名無しさん
09/06/14 17:46:52
>>305
>一行ずつ足す方法ってどうやるんですか?
304の本題のほうは、どう書くんですか?

307:デフォルトの名無しさん
09/06/14 18:31:09
読み進めばわかると思うが、まぁ最終的にはこんな感じになるんじゃね。
(with-open-file (in "name.txt")
  (loop for line = (read-line in nil :eof)
until (eq line :eof)
summing (parse-integer line)))
loop が嫌なら do とか go とか好きな別の制御構文でいいけどさ。

308:デフォルトの名無しさん
09/06/14 18:37:30
loop が嫌いな人って do も go も嫌いな気がするんだ

309:デフォルトの名無しさん
09/06/14 19:01:31
じゃあ再帰したければ再帰でもいい。
(with-open-file (in "name.txt")
(labels ((rec (stream line num)
(if (eq line :eof)
num
(rec stream (read-line stream nil :eof) (+ (parse-integer line) num)))))
(rec in (read-line in :eof) 0)))
でも、そこまで反復が嫌いならSchemeとか使ったほうがいいかもね。

310:デフォルトの名無しさん
09/06/14 19:34:36
>>307 summingなんてあったんか・・loopはまさに変態キングやね!

311:304
09/06/14 21:31:40
>>307
章単位でつまみ食いして読んでいます。飛ばした章はとりあえず流し読みだけ。

sbcl and slimeなんだけど、エラーはでないんだけど、答えが出てこないんだが。
loopは、よくわからないなあ。loopの章は読んだんだけどなあ。こういうものだと思って、構文を覚えればいいのかな。
fileもイマイチ書き方がわかっていないし。
>>309
動いた。動いた。
再帰版もサンクスです。

ちょっとしたものを書きながら、file関係の関数にについて理解を深めたいと思います。ありがとうございました。

312:デフォルトの名無しさん
09/06/14 21:58:33
それは飛ばし杉というか、手を動かしてないとかじゃないかなぁ。
LISPはじめてなら、本を読むときには、サンプルをREPLに何回か打ちこむくらいはしたほうがいいよ。

313:デフォルトの名無しさん
09/06/14 22:33:40
>>312
手を動かしているよ。
飛ばした章に書かれている内容は大雑把だけど、把握していて、読みたい章で飛ばした章の内容が出てきたら、戻るようにしている。
schemeは多少ゴリゴリやったので、Lispはちょっと実験的に章ごとの拾い読み的な勉強法を試している感じ。

304の話は、軽く調べた限りでめぼしいのがなく、初級レベルのレスも過疎っていたので、質問させていただきました。

314:デフォルトの名無しさん
09/06/14 22:42:33
string-to-integerといってる時点でSchemerと気がつくべきだったな。私がニブかったね。
PCLを原文で読めるくらいなら、LOOPは書けなくても読めると思うけどやっぱキモいかね。
英語圏の連中が自然に読み書きできる事をめざしていたそうだが・・・まぁSQLもそんな事いってたけど

315:デフォルトの名無しさん
09/06/14 22:58:49
COBOL もそんなこと言ってたよな

316:デフォルトの名無しさん
09/06/14 23:43:49
>>301
ダメでした
eclipseを使うことを勧められたのでそちらでやってみようと思います
ありがとうございました

317:デフォルトの名無しさん
09/06/15 01:56:24
Lispは処理系なり何なりがバラバラすぎる

自由度が重要なのは分かるけど、ただでさえ少ない人口が更に分散してる

318:デフォルトの名無しさん
09/06/15 15:49:11
人口多い言語はエラーメッセージ検索するとすぐひっかかるからいいよね

319:デフォルトの名無しさん
09/06/15 17:10:53
>人口多い言語はエラーメッセージ検索するとすぐひっかかるからいいよね
すぐググるという思考になって、よくない気もするけどなあ。
軽くググったりもするだろうが、10時間ぐらい悩むのがいいんじゃないだろうか。
いろいろ試行錯誤しても解決しないということは、いいことだし。肥やしになる。

解決するためには英文も読む必要が出てきて、英語の力もつくし。

奥村晴彦のアルゴリズム辞典という本があるけど、Lisp版って需要あるのかな。
ネットでLisp版サンプルコードを晒すだけなんだが。
コメント入れて、読みやすくはするつもりではいる。


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