【入門】Common Lisp その6【質問よろず】
((お勧めの Common Lisp 処理系)
(SBCL:
http://sbcl.sourceforge.net/ :プラットフォーム UNIX, Linux, Mac, Windows(移植中)
:開発 活発
:日本語 使える(UCS4, UTF8, EUC)
:特徴 一番お勧めのコンパイラ。)
(CLISP:
http://clisp.cons.org/ :プラットフォーム UNIX, Linux, Mac, Windows
:開発 そこそこ活発
:日本語 使える
:特徴 バーチャルマシン。遅いがフットプリントが小さい。)
(CMUCL:
http://www.cons.org/cmucl/ :プラットフォーム UNIX, Linux, Mac
:開発 そこそこ活発
:日本語 使えない(回避法有り)
:特徴 高速コンパイラ。SBCL の元になった。)
(Clozure CL:
http://openmcl.clozure.com/index.html :プラットフォーム PPC-Linux, Mac, x86_64-Linux と x86_64-FreeBSD に移植中
:開発 そこそこ活発
:日本語 使えない (pre ver 1.1なら多少扱える。)
:特徴 元々商用のコンパイラ。ネイティブスレッドが使える。))
>1乙
*、 *、 。*゚ *-+。・+。-*。+。*
/ ゚+、 ゚+、 *゚ ・゚ \ 。*゚
∩ *。 *。 +゚ ∩ *
(´・ω・`) +。 +。 ゚* (´・ω・`)
と ノ *゚ *゚ ・ 。ヽ、 つ
と、ノ ・゚ ・゚ +゚ * ヽ、 ⊃
~∪ *゚ *゚ * +゚ ∪~ ☆
+′ +′ +゚ ゚+。*。・+。-*。+。*゚
こんなスレあったんですね!
あったんですよ奥さん!
そうなんですか?カワサキさん!
今なら大安の日セールにつき、宝石盆栽の富貴樹が29800円ぽっきりですよ奥さん
そんな感じでAllegroCLを安売りしてくれないかしらw
Allegro店売りしてないのが困る
Allegro購入して使ってる会社って国内で何社くらいあんのかね。
まじ就職してえわ
50万ぐらいだっけ?
matlabと同じぐらいか
http://ccl.clozure.com/blog/?p=36 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)
>>17 過去本スレで100万とか1000万とかとにかく高そうな話はあったけど
今は案外お手頃になってるのか
どんどん桁が下がっていくな
もうしばらく待つか
確かstudent priceじゃなかったか?<$599
cmuclの19f(現在プレバージョン)だが、新しいくsse2の命令を使うようになったんだね。x8664版
はでてないけど、高速化は期待できるのかも。
非SchemeなLispではドットリストなformはどう扱われることが多いのでしょうか。
(+ 1 2 . 3) ; <- こういうの
どうもCommonLispでは仕様で決まってなさそうなのですがなにか理由があるのでしょうか。
普通にエラーです。
29 :
27:2009/02/27(金) 01:31:16
(+ 1 2 . 3) みたいなのはSBCLではエラーとなりましたが、CLISPとxyzzyでは普通に通りました。どうもドット以下はnilあつかいされているみたいです。
HyperSpecで確認してみましたがSection 3.1.2.1 Form Evaluation のところにはproper-listでなければならないとは書いていないような気がします。
実装依存にせよエラーにせよ、書かない理由もよく分からないので気になります。
GCLでは(+ 1 2 . 3)は6になるな
Common Lispの仕様は常識で分かるところは書いてない。
だからISO Cと同じくらいのサイズに収まってる。
32 :
27:2009/02/27(金) 20:24:16
たしかにこんなコードを書く人はまずいないからわざわざ標準で定める必要もないといえばないですね。
未定義の処理系依存エラーと把握しました。
今Lisp処理系を作っていてちょっと気になったので聞いてみました。
どうもありがとうございます。
pythonのzopeやDjangoに対応するものはlisp
ではどれになるのでしょうか
無い
lisperは自分で自分用のフレームワーク作るから
>>33 フレームワーク: ないことはないけど、 (2、3あった) そっちはあまり知らない。
>>33 weblockとかhunchentootとか?
hunchentootは使ってて楽しいよ
EmacsでのLisp開発環境としてSLIMEを使用しているのですが、
画面を二分して上のS式をC-x C-eで評価したときに
(in-package :hoge)
と言う式を評価したときにslimeのREPLでは
CL-USER>
のままでhogeのパッケージに入ってもらうにはREPLで
(in-package :hoge)
と打たなければなりません。これは設定で解消できるのでしょうか?
それとも仕様でしょうか?よろしくおねがいします。
cffiの中級者ぐらいの質問はどこですればいいのでしょうか?
comp.lang.lispじゃね
eclipse上で使うCUPSとかってあれからどうかわったんだろう?
うちはWindowsXPがx64なのでsbclが動かないから試せないんだ
44 :
:2009/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:2009/03/09(月) 15:21:10
とりあえず(require 'asdf)としてみたのですがNILが返ってきてしまいます
http://www.cliki.net/asdf このサイトには
If you have SBCL, OpenMCL, ECL or ACL, it's bundled and you need only (require 'asdf).
こう書いてあるのにどうしてなんでしょうか
47 :
44:2009/03/14(土) 18:48:08
>>47 asdf-install を*ちゃんと*どっかから持ってきた?
49 :
44:2009/03/14(土) 19:51:43
おま、俺様インストールじゃなくてREADMEがそこにあるんだから読めよ。
>>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:2009/03/15(日) 15:37:10
ありがとう御座います。
非常に助かりました。
>>51 C-x oじゃなくてslime selecterにキー割り当てるのはしないの?
>>53 やっちまったぜぇ
ありがとう
>>54 >
>>51 > C-x oじゃなくてslime selecterにキー割り当てるのはしないの?
slime selecterの説明が必要だろ
この場合は C-x o じゃ駄目か?
ここでいいのかな?
最近 slime モードのテキストバッファ(要は lisp ファイルを編集している時)
の、日本語入力が不自由なんだけど、これは *BSD で Wnn7 を使い続けてる
俺ん所だけの現象???
不自由とは?何かSLIMEが悪さするのかな。SKK使ってるけど、何も感じないです。
>>57 うち固有だとは思うんだが、今年の正月すぎからスペースで変換しなった
repl バッファは変換する。たぶん egg のキーマップ周辺
slime はとりあえず動いてるし、日本語出力する用事もないし、「かな漢」
までめんどうみてる暇もないので放置状態
emacs のバージョン問題もあるかも知れない
ほう、いまどきBSDとは。NetかDragonflyか。
お主、ブラックボックスは嫌いなのではないか?
フフフ。丁度良い物がある。
つ SKK
SKKは確かにYoi
SKKはLisper向けですから。。。
ねーよw
skkはyatexとkeybind重なるから使ってない
(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 をそのまま書けばいい。というのももっともですが、、、
>>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を使った方が
良いと思ってるんだけどどうなんだろ。
慣用句っぽいマクロとかあるのかな。
>>65 >
>>51 > C-c C-z
おぉ,正しくはこれか
ありがとう
でも,つい C-x o を押してしまうよ(笑
70 :
64:2009/03/23(月) 12:18:02
>>66-68 さんくす。
アナフォリックマクロ&自分のコードということで、
"os" の変数名を長くしてパッケージに入れることまではして、
とりあえずそのままにしました。
cp mkdirなどのunixのコマンドを
common lispから使う方法はないのでしょうか
簡単に言うとシェルスクリプトをcommon lispで書きたいのです
clispで
(ext:run-shell-command "ls")
とか?
sbclの場合sb-ext:run-programだそうな
73 :
デフォルトの名無しさん:2009/03/25(水) 02:22:44
穴掘り熊五郎、と覚えよう
(ext:dir)
(ext:cd)
パッケージの中のシンボル等をエクスポートする際には
defpackage の中の :export に記述する必要があるはずですが、
クラスをパッケージの中で定義する際に、
クラス名がエクスポートされていればいつでもスロットのアクセス関数等も
エクスポートされているようにするにはどうしたら良いですか?
全てのアクセス関数を :export に書かないといけないとすると不便すぎるのですが。
>>75 なんか方法あるのかね
自分が使ってる有名どころのパッケージのソース見てみたけど全部列挙してるね。
まあ、外部とのインターフェースとなる部分だから慎重さが必要な部分だし不便ぐらいでちょうどいいんじゃない
defpackageは便利マクロであってエクスポートの唯一の手段じゃないからCLOSの機能を駆使すればできそうにも思うけど自分には無理だ
不便すぎる、というか違いすぎるんだろう。
もれも仕事ではJavaとかなんで
>>75の言いたいことはわかる気がするが、
CLOSの場合はアクセス関数といってもクラスに所属するのものではないからなぁ。
CLOS流儀に馴染むというか、考え方をかえてもらうほうが建設的かな。
本当に細粒度にアクセサを公開しないといけないの?もっと美しいインターフェースは設計できない?
defexternalmethodとかオレオレdefclassとか作れば書くのは簡単になるかもだけど
読む側からしたら頭の方にexportでまとまってた方が追うのが楽じゃないかなとか思った。
ちょっとずれるけど、これ思いだした。
ttp://d.hatena.ne.jp/patterson/20081115/1226724801 >Q2:defclassを書くのって面倒くさい、黒田さんは全部書いていますか?
>A2:emacsの機能で楽してるけど、全部書いている。
>
>Q2:マクロは使わないのですか?
>A2:マクロを入力量を減らすために使うのは勧めない。
>Editorでがんばるべき。マクロは新しい語彙を入れ込むためのもの。
>安易に使うべきでない。自然言語の世界でも自分勝手な言葉を
>話すやつとはつき合いたくない。
マクロは最終手段だからね。下手に作ると分かりにくくなるが、
上手に作れば読みやすいソースになる。
オブジェクト指向の人がやたらクラスを作ってスパゲティにするのと似てるかも。
関数を作るにしてもinlineを使えば埋め込むこともできるけど、これは最適化のときの話
だもんな。
80 :
75:2009/03/27(金) 23:49:23
>>76-78 さんきゅです。
なるほど。アクセス関数は総称関数側だったんですね。
defclass で書いてるのでクラス側にあるのかと勘違いしていました。
じつは MOP でなんとかならないかといろいろ勉強してたんですけど、
ギブしました。
defpackage の :export の部分を間違えずに書けるように、
ファイル内のシンボル等の定義を読み、公開用には ":" をつけながら
全て出力するツールを作ってたんですけど、
これをアクセス関数にも適用できるように変更することとしました。
それでとりあえず良しとします。
というわけで試してみたよ
> (defclass a () ((a :reader a-of)))
#<STANDARD-CLASS A>
> (moptilities:generic-functions 'a)
(#<STANDARD-GENERIC-FUNCTION A-OF (1)>)
取り出せたけど関数オブジェクトからどうやって元のシンボルに戻せば。。。うう
もうちょい試してみたよ
他の関数を使えば望みのことはできそうだ
> (moptilities:slot-names 'a)
(A)
> (moptilities:slot-properties 'a 'a)
(:NAME A :INITARGS NIL :INITFORM NIL :READERS (A-OF) :WRITERS NIL
:DOCUMENTATION NIL)
クラスのスロットの属性にアクセスできりゃもうこっちのもんでしょ
アクセサ関数のシンボルを取り出してexportしてやればいい
そういうわけで試した結果これでどう?
指定したクラスのアクセサ関数(リーダ関数だけを見てるのでもうちょっとリファイン必要)を全部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)))
しかしなあ主にパッケージ使う側の人間から言わしてもらうとあれこれエクスポートするパッケージは使いにくいぞな
>>84 そんなのだめだぁ。必要もないものexportしないでくれぇぇぇ。
exportするものは厳選すべき。
パッケージの分割の設計を見直したほうがいいんじゃないか?
Mac版のLispWorks Personalで遊んでいます。
リスナーやエディタウィンドウで日本語'を入力したいのですが、まともに
入力/表示出来ません。こういうものですか?
Windows版ではどうですか?
Win版では日本語の入出力出来るみたいよ
89 :
87:2009/03/29(日) 11:45:50
>>88 情報ありがとうございます。
うーん、Mac版も内部的にはちゃんと処理しているみたいなんですけど。
Slime経由で使えばいいのかな…。
gsllとnlisp統合されないかなあ
数日前からCommon Lispを勉強し始めました。そこで疑問点が出てきました。
単一ディスパッチの言語だとクラスは名前空間の導入という側面があると
思いますが、多重ディスパッチの言語だとメッセージ送信先がひとつではないため、
一意に定まらないと思います。
よってCLOSのクラスでは名前空間の導入は行えない、これは分かります。
ここからが質問なんですが、CLOSにおいて、総称関数の名前空間の汚染に対しては
どのように対処すればよいのでしょうか?
パッケージシステムが解なのかと思いましたが、そうなると、オブジェクトごとにパッケージを
用意する必要がありますので、とても面倒な気がします……
・パッケージシステムには名前空間管理が含まれてる。
・総称関数は名前空間を越えて共通の名前であることが有用性上に重要。
それを名前空間を汚染するという風には考えない。
そのくらい名前は重要。
>>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
の引数チェック機構が死にます。
根本的に勘違いしてる可能性もありますが、うまい方法はないでしょうか。
>>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
...))
何か問題があるのだろうか?
>>94 ありがとうございます。
この場合困るのが、クラスBarを後から追加した場合です。
クラスFooを作ったときに作った総称関数とメソッドの定義を変更しないといけませんが、
これはOpen-Closed-Principleの観点から言ってよい方法であるとはいえません。
これを回避しようとしたらおそらくはパッケージシステムを使うことになるのでしょうが、
(foo:update foo-instance)
(bar:update bar-instance obj)
という冗長な記述になってしまいます。
あるいはパッケージにくるんだ上で、
(defgeneric update (obj &rest args))
という総称関数を作ってdefmethodで分岐するという手もありますが、単一ディスパッチの
言語では必要無かった苦労(パッケージング、defmethodの実装)を強いられる、という点で
腑に落ちません。
もし「総称関数は名前が重要。衝突しないように名前は決めるべき」というのが解ならば、いうのは
簡単です。
ですが、それを真に実現しようと思ったら、作るべきクラスのインターフェイスを書く前からすべて把
握する必要があります。これは非現実的です。
この辺りCLOSではどうやって解決するのがよいのでしょうか?
それともこんなものなのでしょうか。
操作内容の意味が変わるんだったら, 名前変えればいいんじゃないの?
つか flag に相当する部分は, 普通, クラスに閉じ込めないか?
通常, リファクタリングの最有力候補だよね
>>93 って.
> 言語では必要無かった苦労(パッケージング、defmethodの実装)を強いられる、という点で
> 腑に落ちません。
どっち転がってもメソッドは定義しなきゃいけないわけで,
たいした手間じゃないだろうに…
(defmethod bar ((obj foo))
(if *bebhavior-flag*
...))
(let ((*behavior-flag* t))
(bar (make-instance 'foo)))
的な, 逃げもなくはないが…
問題にしてるのは
・メッセージ名が同じ
・プロトコルが異なる
この二つを満たすメッセージを定義する上手い方法が総称関数には無いのではないか、という点です。
単一ディスパッチの言語にはあるにもかかわらず、です。
リファクタリング等の話は前提を覆しています。
>どっち転がってもメソッドは定義しなきゃいけないわけで,
>たいした手間じゃないだろうに…
単一ディスパッチの言語で必要のないこと、という点で大きな手間です。
単一ディスパッチの言語ならばメソッドのパッケージングもクラスによって分岐するメソッドの
定義も不要です。
もし統一的に表すために新たに総称関数を新たに定義した場合、その総称関数をどこに配置
するかという事も新たに考えねばなりませんし、機械でできそうな処理を人間が書く必要が
あるという点でLisp的ではない気がします。
もしこのような場合、Common Lispでは単一ディスパッチ言語が提供していたクラスによる名
前空間の導入を手動で行わなければならない、そういう仕様だ、というのならそういうものな
のかとあきらめます。
ですが、もし上手い方法があるのであれば教えてほしいと思った次第です。
>>97 上のほうで誰かが名前重要って書いてるよね
updateって名前がまずだめ。「更新」てどんだけ広い概念を総称させとる
そらぶつかるわ
総称関数はメッセージ名じゃないし
マルチプルディスパッチの言語では簡単なことが単一ディスパッチの言語だとくそ面倒くさくなるよね。そして逆のこともあるよ
既知の概念で理解できないものを否定して安心したがる心理はある程度理解するが、なぜ君の知ってる言語の延長線上にLispがあると思った?別もんだぞ
でもってC++に帰りな。マジオススメ。C++のほうがうまく書けるものをなんでLispでやる
>>98 すいません、わからない点があるのですが、
>総称関数はメッセージ名じゃないし
確かに総称関数の名前がメッセージ名では無いとすると、今までの私の指摘は当たらないことになります。
ですがそれならば、総称関数の名前はオブジェクト指向における何を表現しているのでしょうか?そしてどういう
名前が適切なのでしょうか?
updateが出たのでJavaのObserverパターンの実装を例に挙げます。Observableの実装は
どうでもよいとして、JavaのObserverの実装を機械的にCommon Lispに変換しますと
(defgeneric update (o obj arg))
になると思いますが、貴方の話ですとこの総称関数名はまずいということになります。
(クロージャで事足りるでしょうが、ここではそういう話はしてないのに注意してください)
クラス名をプレフィックスやサフィックスにしたり、クラス名のパッケージで包むという方法は考えられますが、
それは単一ディスパッチの言語に比べて冗長であるのは先に書いた通りです。
この場合、どのような名前が適切になりますか?
>既知の概念で理解できないものを否定して安心したがる心理は
多重ディスパッチや総称関数について一度も否定してません。
ただ総称関数だと上手く記述できない場面があるのではないか、という話をしているだけです。
これを否定と捉えて煽るのはちょっとひねくれすぎてるのではないかと。
と書いてて思ったのですが
>マルチプルディスパッチの言語では簡単なことが単一ディスパッチの言語だとくそ面倒くさくなるよね。そして逆のこともあるよ
要するに今指摘してる点が多重ディスパッチで困難な点、ということなのでしょうか?
もちろん、 Java 風のオブジェクトシステムで上手く記述できないものもあるよね。
Java 風の思想をそのまま持ち込むとうまく当て嵌らないのはアタリマエで、
デザインパターンを持ち出して「これをCLで書くと…」なんて議論はナンセンス。
だいたいオブジェクト指向なんてのも広すぎる概念で、
CLのオブジェクト指向は Java とは違ったオブジェクト指向なんだよ。
Java なんか一旦忘れろよ。
違う概念に対してupdateという同じ名前を使うというのが破綻している。
概念A に対しては パッケージX:update
概念B に対しては パッケージY:update
という別の名前を使うんだよ。
自分の知らないことを自分の知っている範囲の見方でしか切らないくせに
> これを否定と捉えて煽るのはちょっとひねくれすぎてるのではないかと。
とか笑ってしまうわ。
>>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
>>99 すまん。つい煽りっぽく書いたら煽りレスを呼び寄せてしまった
で、総称関数のラムダリストには決まりがある
それぞれのラムダリストは同じ個数の必須引数を持っていなければならない
それぞれのラムダリストは同じ個数の付加引数を持っていなければならない
その他いくつかの決まり事がある。
>>93はこの決まりを守ってない
だからCLOSでは書けない。あきらめがつくならあきらめてくれ
総称関数がクラスの所有物でない時点で、関数名のみで自己説明的であるべきなんだよ
衝突しやすい名前選んどいて衝突したとかいうな
それでも衝突した場合にはどちらをインポートするかどっちもしないのか選べるんだし
どちらもインポートしなければ
>>93の場合、あなたがどう見ても冗長と
言ってる方法で明示するしかないし自分にはどう見ても冗長に見えない
必要にして十分なことしか書いてない
おいオメー、さっきからうるせえぞ。「メッセージ名」「メッセージ名」ってよぉー
どういうつもりだてめー
そういう言葉は、オレたちの世界にはねーんだぜ……
そんな、弱虫の使う言葉はな……
「メッセージ名」…そんな言葉は使う必要がねーんだ。
なぜなら、オレや、オレたちの仲間は、
CLOSすると、頭の中に思い浮かべた時には!
切り替えが終わっちまってるからだッ!
だから使った事がねぇー
わかるか?俺の言ってる事…え?
「総称関数」なら、使ってもいいッ!
プロシュート兄貴乙
メッセージ渡しなOOだと「このオブジェクトの仕事は何か」から考えるだろうけど、
総称関数なCLOSだと「この関数の仕事は何か」から考えるから、
両者だと発想の順序が逆っていうか。
総称関数の名前がぶつかったらどうしようって心配は、
ある意味クラス名がぶつかったらどうしようって心配くらいには杞憂なんじゃないかな。
>>104 >というか、あえて言うならメンバ関数名とシグネチャあわせてひとつのメッセージ名でないの?
ああ、確かにそう考えると視野が広がります。
多重ディスパッチだと、メッセージ送信先もメッセージ名の一部と考えることができ、
そしてCLだとたまたまオーバーロードの機能が無い=異なるシグネチャから実行すべきメッ
セージの実装を決定する機能が無いと。
>>105 >だからCLOSでは書けない。あきらめがつくならあきらめてくれ
わかりました。
>総称関数がクラスの所有物でない時点で、関数名のみで自己説明的であるべきなんだよ
私は先に上げた場面をCLOSで解決できるのか、そして解決できないのであればその対処法を
欲していたので、この命名指針の提示は非常に助かります。
>どちらもインポートしなければ
>>93の場合、あなたがどう見ても冗長と
>言ってる方法で明示するしかないし自分にはどう見ても冗長に見えない
冗長といってるのは、メソッドに対してクラスが名前空間を導入するという単一ディス
パッチの言語に対しての話なので、CLの視点では確かに必要十分ですね。
冗長と感じるか否かはただ単に慣れの問題かもしれません。
>>108 なるほど、わかりました。
私の中では解決することができました。長々とすいません。
ありがとうございました。
あくまでもCLOSでは無理ってとこがポイントだよね。
Lispの世界で広く使われている枠組みの上では無理ってだけで、
その気になればいくらでも新しい枠組みを言語レベルで追加できる余地があるってのは大きい。
いいか、俺が怒ってんのはな、てめーの心の弱さなんだ!
そりゃいきなりクラスのメソッドって概念がブチ壊されたんだ、衝撃を受けるのは当然だ!
割と適当に作れたアクセサまでインターフェース並に外から丸見えになっちまうんだからな。
オレだってヤバイと思う!
だが!オレたちのチームの他のヤツならッ!
あともうちょっとで喉元に喰いつけるって時に、俺の知ってる〜できないんですね終了とか思考停止したりはしねぇ!
たとえ処理系の見た目がショボかろうと、ライブラリが揃ってなかろうともな!
オメーはマンモーニなんだよ!Java基準でビビったんだ!IDE支援に甘ったれて名前の命名を軽視してんだ!
分かるか?え?俺のいってる事。
Java のせいじゃねぇし、CLOSのほうが優れていると主張するわけでもねー。ただ、「違っている」だけだ。
だが、心の奥のところでオメーには他の思考モデルを認めるのにビビリがあるんだよ!
成長しろ
>>109! 成長しなきゃオレたちは「栄光」をつかめねぇ。
しつこいよ
みなさんCLOSが使いやすいですか
もっと普通の表記がいいとおもいませんか
>>113 普通って何だよ?
このスレ的には CLOS が普通なんじゃね?
その質問はナンセンス。
つか、もし使いにくいならマクロ書きゃいいし…
cffiがc++に対応してないのは
closの力不足もあるのかなあ
CLOSのオブジェクト指向に戸惑ってるのかな?
java風のが欲ければ自ら作る必要があるね。グレアムおじさんのon lisp
でもオブジェクト指向言語の作りかたはかいてるので参考にすればいい。
CLOSはjava/C++族のものにくらべると繋りがゆるやかだし、
面倒な処理は少いんだが、だからマルチディスパッチでも
とりあえつあつかえる。言葉は同じオブジェクト指向でも、
考えかたは違いが大きいので、同じ目線で考えないことは
理解する上でも大切かな。
むしろ、CにCLOS風のゆるやかなオブジェクト指向を加えてもらったほう
がありがたい。C-LOS言語とでも名付けてね。
ちなみに、オブジェクト指向はほとんど使わないよ。使ったところが便利なところ以外はね。
グレアムおじちゃんみたいに忌み嫌うことはないけど、普段から多様すると、
スパゲティメイカーに早変りなので注意が必要かな。
/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
>>116 単純に dynamic loader がらみの話じゃね?
g++ 一つとってみても abi ころころ変わるから,
他の言語でサポートするとなると結構大変だもん
common lisp じゃなくて何だが plt scheme は
標準ライブラリにメッセージ渡し式のOOシステムが入っているので
興味のある人は見てみるといいんじゃないだろうか。
PLTを使うとついつい固有機能をつかってしまい、他のSchemeに移る敷居が高くなる両刃の剣
Scheme はどれにしたってそんなもの。
>>109 のおかげでCLOSの理解が深まった。THX。
>>125 そこの参考文献の
Andreas Paepcke,
"User-Level Language Crafting (Introducing the CLOS Metaobject Protocol)"
面白いよね。タイムリーな話題。
;;; 馬鹿syntax sugar系じゃないよ。
Javaならclass.nameって書けるのに(class-name class)では冗長すぎる
という思考だと、読む以前の問題じゃないのかなと思ったり
class-name、ださっ!
そんな書き方しねえよ。
J('ー`)し ごめんね。おかあさんはじめてLISPの規格にオブジェクトシステム入れたから、ごめんね
>>128 (name-of instance)
じゃないの?
かあちゃんが謝ってるのはclass-nameが規格で決まってる名前だからだろ…
>>131みたいに、インスタンスのnameプロパティへのアクセサをどう命名するかってユーザーレベルの話とは違くて
クラスの名前を取得する場合の話
emacsが名前補完してくれるなら
長い名前でもいいんじゃない
mutiple-value-bind
なんて素でうちこまないし
確かに名前補完してもらった方がいいみたいだなw
>mutiple-value-bind
なんかイヤな名前だな
>mutiple-value-bind
むちぷる ばりゅー ばいんど
むしろ何か惹かれるものがあるが・・・
lambdaple-value-bind
なんてありそうでないか
むちむち らむだぷるぷる
むちぷる-ぼにゅう-ぼいん
ひょっとして画像をよみこませる方法って
cl-pngぐらいしかないのでしょうか
hunchentootでmultipart-mimeの受け渡しを解説しているサイトとか資料へのポインタを知っていたらご示唆ください
142 :
デフォルトの名無しさん:2009/04/21(火) 18:09:29
おまいら clispでgtk使うのはどうしたらいいですか?
clispでgtk使えばいいと思うよ!
lispを始めてみようと思い立ったのですが
環境構築の段階でつまづいていますのでご教示下さい。
1) SBCLでwinアプリ作成
=>最初にDOSプロンプトが立ち上がってしまうのでDOSプロンプトを立ち上げないようにしたい。
っていうかファイルでかすぎ
2) CLISPでwinアプリ作成
=>最初にDOSプロンプトが立ち上がってしまうのでDOSプロンプトを立ち上げないようにしたい。
3) ECLでFFIの利用方法が分からない。exeを実行しようとすると以下の様になる。
errorlog:
http://www.4shared.com/file/101112943/cb682248/ecl.html SBCL、CLISP、ACLはconflict起こさないし、一般的なライブラリだと思ってるのですが・・・
3-2) ECLでLispbuilderがインストールできない。
errorlog:
http://www.4shared.com/file/101061621/13a90384/lispbuilder.html ちなみに"C:/etc/cvs/ecl/site/lispbuilder-sdl/trivial-garbage/trivial-garbage.c"というファイルは存在しないので意味がわかりません。
4) ACL(free)でそもそもexeの作成方法が分からない。
目的はLispでwindowsアプリを作ることです。
とりあえず1〜4のどれかひとつでも打開出来れば後はなんとかなると思うんですが・・・
他の方法でも普通のwindowsアプリを作成する方法があればそれでも構いません。
商用ACLを買うというのは無しの方向で
どなたかお力添えをよろしくお願いいたしますm(_ _)m
気持ちをくじくようなことをいって悪いけど、Windowsでみためのいいデスクトップ
アプリを作りたいんだったらlisp系言語は向いてないと思うよ。
よいハカーは道具を適材適所で使います。
プログラミングのお勉強がしたいということならまずは*nixのインスコがおすすめ。
> (setq * 10)
10
> (* 5 *)
50
> (* 5 *)
250
"*"を変数として通常使用することもないと思いますが、
なぜ最初の"(* 5 *)"の後に"*"が50になるのか解説求む。
>>144 > 4) ACL(free)でそもそもexeの作成方法が分からない。
フリーのExpress editionにはその機能はついていません。
スタンドアロン実行ファイルを作成するにはEnterprise editionに付属している
Runtime licenseが必要になります。
> 目的はLispでwindowsアプリを作ることです。
現時点では、フリーの処理系でまともにWinアプリを作成するのは非常に難しいと思います。
私は試したことがないですが、Winアプリの作成をサポートしてるLispWorksやCorman CLを
使うのがいいんじゃないでしょうか。特にCorman CLはWindows専用という珍しい処理系で、
Win32 APIを簡単に扱えることを売りにしているようです。
コマンドラインから実行したっていいじゃないか
これだって立派なWinアプリなのに…
150 :
デフォルトの名無しさん:2009/04/23(木) 09:37:07
windowsってフリーのツールをつかってアプリを作るのに一番向いてないOSだと思うよ。
アプリ作りをするんだったらlinixやFreeBSDじゃまいか?
OSがある限り、叩けないAPIなどない
152 :
デフォルトの名無しさん:2009/04/23(木) 11:22:43
つ 非公開API
ECLでdllってできた?
GUIは別にするって手も
GUIのwebアプリならいいのできるのにね
もっと目的のOS自体を持ってなくてもアプリケーションが作れる
言語が増えれば良いのに....windowsがないからwindows向けの
アプリケーションが作れないな....Cで書くとコンパイルが必要だし
...
ゴ ゴ ゴ ゴ ゴ ゴ ゴ ゴ
/\ /|
/ /| \/ |(\ /)
/ / | \|( ゚ー゚) <全力でWindowsを捨てOpenBSDに移行せよ
/ / | __〃`ヽ 〈_
/ γ´⌒´-−ヾvーヽ⌒ヽ
//⌒ ィ theo`i´ ); `ヽ
// ノ^ 、___¥__人 |
/ ! ,,,ノ爻\_ _人 ノr;^ > )
/ ( <_ \ヘ、,, __,+、__rノ/ /
ヽ_ \ )ゝ、__,+、_ア〃 /
ヽ、___ ヽ.=┬─┬〈 ソ、
〈J .〉、| |, |ヽ-´
/"" | sshd |: |
レ :|: | リ
/ ノ|__| |
↑ /| ,, ソ ヽ )
\_/ .,ゝ ) イ ヽ ノ
y `レl 〈´ リ
/ ノ | | .
l / l;; |
〉 〈 〉 |
/ ::| (_ヽ \、
(。mnノ `ヽnm
Ubuntuでも結局Javaばっかだけどな
visualstudioみたいな開発ツールってありますか?
>>158 slime backend の swank を eclipse で使えるように
したのだったら有る
# エディタが、アホなんで使う気にならないが…
eclipseで調べてたらcuspってのを発見した
161 :
159:2009/04/24(金) 11:53:19
OpenGLのバインドがなぜあんなに充実してるのだろう
cuspは今のeclipseだと動かなくないか?
java製の統合環境もあるよ
ジャバラなんとかって
cusp普通に動いてるよ。
Windows上の場合は、lispプロジェクトの
コードをsjisにすると良い感じ。
あ、バージョンはeclipseが3.4.2、Cusp が0.9.390
他言語同様、オンマウスでヒントもでるし、
部分評価もやりほうだいなので、Windows操作系
では最高ランクでないかねぇ。
>>166 どうもSBCL_HOMEの設定がおかしいんじゃないかと疑ってるんだけど...
環境変数手で入れました?よかったら今の設定教えてもらえないかなあ...
FAQみるとcusp/sbclって書かれてるんだけど、こんなパス存在しないし
お願いします
http://www.ibm.com/developerworks/jp/opensource/library/os-eclipse-lispcusp/index.html に書いてあるとおりで「概ね」いけたはず。
(全く同じではないと思うが、大枠はこれで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 とかも設定する必要なし)
このくらいかなぁ〜
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切った環境なんだけど、なんかまずいのかなあ
ちなみにバージョンはeclipse、cuspとも>166と同じ
java.version=1.6.0_13
>>163 いろいろ試してるうちにサイトが消えた
なんでだ
図書館に行ってきたら、目当ての実践common Lispが貸し出し中だった
ネットでみれるからいいんだけどさ
買えよ
買われないと絶版になっちゃうだろ
>>173 英語読むハメになるから買う気まではないなあ
図書を返すついでに借りようかなと思った程度で
とりあえず、うちの図書館ではLisp本の奪い合いがあるみたいだ
頻繁に貸し出し中になる
lispに還元するなら別のなにかでするよ
還元する力もないが
175 :
デフォルトの名無しさん:2009/05/08(金) 13:07:33
>>174 pdfならapressのページで登録すれば配布されているんだよ。<PCL
もっとも原著だろうが訳書だろうが、本をもってるほうがなにかと
便利なんだが。
>>175 本は目にやさしいしね
力尽きたときに寝転がりながらパラパラ読めるのがいい
全体把握もしやすいし、索引がしっかりしていれば検索もしやすい
pdfってうざいなあと思っちゃうんだけど、これは印刷して読んでください用ということなのかな?
emacsでpdfって読めないのかなw
そしたら便利なんだが
slime便利だね
関数補完(一覧)が出るだけでも勉強効率があがって、すごく助かる
買えって、てっきり翻訳版のことを言ってるのかと思った
あれよくないの?
PDFも上手く作ってあれば画面で読んでも快適だよ。
目次からジャンプしたり好き勝手に検索したりというのは紙じゃ無理だ。
単にスキャンしただけというのは駄目だけど。
形式は別にPDFじゃなくてもいいんだけど、数式や特殊記号や図が多く
なりがちな専門書は他にいい形式がないんだよね。
本を何冊も持ち運ぶのは大変だけど、データなら何冊あっても楽だ。
もう紙の辞書なんか誰も使ってないのはこの便利さがあるからでしょう。
ただ寝転んだままノートパソコンの画面をみるのはつらいので、
日本でもKindleが使えるようになって欲しい。とりあえず日本語出なくても
いいから。洋書の専門書は重いんだよなあ。
>目次からジャンプしたり好き勝手に検索したりというのは紙じゃ無理だ。
見覚えのあるテキストをもう一度読みたくてざっとめくるってのができないのが電子書籍の欠点なので僕は紙の媒体を捨てられない
>>178 >もう紙の辞書なんか誰も使ってないのはこの便利さがあるからでしょう。
羅和とか大漢和とか古語辞典も全部電子化されればいいのになあ
紙媒体しかない辞書が多過ぐる
電子版は定期的にシリアルナンバーを打ち込まないと使えないとか
他に何を仕込まるか分からないとか、そういうのをやめてくれたらなあ
数年ぶりに開いた本に陰毛がはさまってることだってあるじゃないか
183 :
デフォルトの名無しさん: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 を使う意味は何なんでしょうか?
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:2009/05/09(土) 14:51:29
(apply #'+ '(1 2))と(+ 1 2)が同じってことわかってる?
(+ '(1 2))とか(funcall #'+ '(1 2))だとエラーになるよね
187 :
183:2009/05/09(土) 15:13:20
>>184 引数をリストで渡せて、その要素が一つ一つ関数への引数として渡せるのが便利だからって事ですよね。
確かにそれだと納得できます。ありがとうございます。
a が (1 2 3) として
(list a) のように関数を先頭にした表記で
実際には (list 1 2 3) と引数を展開して実行できるやり方はないんですか。
sbclrcをコンパイルする事はできないでしょうか?
sbclrcでシェバング対策やらasdfのインポートやらをしていたら
sbclを立ち上げてから*のプロンプトが出るまでに5秒ぐらいかかるように
なったのですが、皆さんもこれぐらいなのでしょうか?
よろしくおねがいします。
あと、sbclに履歴機能をつける方法とEmacsキーバインドで
操作できる方法が有ればよろしくおねがいします。
>>188 >あと、sbclに履歴機能をつける方法とEmacsキーバインドで
>操作できる方法が有ればよろしくおねがいします。
Slimeでも何でもいいからEmacsの中で使えばいいのでは。
>>188 sbclrcの内容を foo.lisp とかに移してからそれをコンパイルして
foo.fasl にし、sbclrc はそれをロードするだけにするとか。
191 :
159:2009/05/09(土) 15:50:21
>>188 sb-ext:save-lisp-and-die じゃあかんの?
>>190 そうしました、しかしsbclに標準でそういった機能がつくと
うれしいですね。(rc-compile)見たいな...
193 :
192:2009/05/09(土) 19:09:09
sbclのtoplevel.lispをざっと読んでみましたが
もしかしたら、sbclrc.faslというファイルが有ればそちらを
優先して読み込むと言う設定に改造してコンパイルすれば
良いかもしれませんね。ついでに(rc-compile)関数を組み込みにして
ファイル名を指定しなくても組み込みのsysinit-pathname
という関数を利用して適切なsbclrcファイルを選択してコンパイル
してくれるという関数が作れそうです。
(defun foo (...) ...)
の中身をみたいなのだけど
clispだと
#'foo リターン
だけで関数のソースみれる
sbclだとできない
sbclでfooのソースが帰ってくる関数ないのでしょうか
195 :
デフォルトの名無しさん:2009/05/10(日) 00:15:10
Common LispでOpenGLを使うライブラリみたいなのはありますか?
197 :
デフォルトの名無しさん:2009/05/10(日) 00:50:16
どうもです。ありがとうございます。
198 :
デフォルトの名無しさん:2009/05/10(日) 12:17:48
cmucl の最新スナップショットではutf8が使えるようになったよ。
これで高速なcmuclが日本語でも使える。ただし、32bit x86 のみ
>>198 最新じゃ無くてもutf8は使えてたぞ
日本語はダメだったけど
metatilitesの中のon lispのコード入ってるんだね
こういう便利なものってみんなどうやってみつけてるの?
CLiCCを動かせた人いますでしょうか?
いろいろコードの手直ししないとコンパイル通りませんよね?
最後にlispのコードよむところで
ffiがどうとかいうエラーでてあきらめたのですが
imaximaってslimeみたいにソース編集しながら
式の評価をいろいろ試せる環境なわけじゃないんだね
素直に、質問しろよ。
204 :
デフォルトの名無しさん:2009/05/11(月) 09:26:05
>>207 inferior-maxima-modeと組み合わせてみればできるんだけど、その方法はあまりかかれてないね。
Maximaとslimeのreplを行き来しつつ、ついでにemacsの中で
皿洗いも済ませてしまいたいのですが、そういうことは可能でしょうか?
アイコンを見ている限りは何とか出来そうな気もするのですが。。。
ご教示いただければ幸いです。
トースターでnetbsdが動くから、トースターで皿洗いができるということか
meta-bangの人のコード見てたら
#+test
でテストコード挿入する方法があるんだね
便利そうだけど使い方わかんない
clozure cl のWindows版のインストールの仕方を教えてください。
ダウンロードして解凍、CCLのフォルダができたのですが、
その後、どうしたらいいのでしょう?
>>212 それでインストールできてるんじゃね?
何がわからんのかわからん
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 :
デフォルトの名無しさん:2009/05/14(木) 18:53:33
split関数がなかったのでネットからダウンロードしたのですが、
こういう関数がパッケージになっているのは何故ですか?
パッケージにせずに単にloadする場合との違いは何でしょうか
clozure clっての入れてみたんだがSBCLより速いんだな
フィボナッチの計算で比べてみたら3倍ぐらい速かったわ
>>217 速い部分もあれば、遅い部分もあるよ。
ベンチマークが公開されてるから、見ると結構面白いと思う。
Allegroとかとの比較もあるよ。
>>217 ピープホール持ってない sbcl/cmucl に言ってはならないことを…
220 :
デフォルトの名無しさん:2009/05/15(金) 03:39:02
>>216 ありがとうございます。
名前が重複しないように、ということですね。
(setq l (list 0))
(pushnew 0 l) -> l= (0)
(push 0 l) -> l=(0 0)
こんなことおきるんだね
ゼロって怖い
223 :
212:2009/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.
Common LispでCや他の言語のようなキャリッジリターンを使用する方法は
どんな方法が有るのでしょうか?
formatについて調べてみたのですがそういう物は無いようですし。
よろしくおねがいします。
改行コードのことか?
(format t "hello~%yahoo")
>>225 そちらではなくて復帰のほうです。
引き続きよろしくおねがいします。
Cでやるようにキャリッジリターンを出力したいって言うんなら
(princ (code-char 13))
じゃないかな。本当にスクリーンコントロールしたいならcl-ncursesとかを使ったほうがいいと思うけど。
>>227 ありがとう御座います。
ロード画面のように
棒がのびるエフェクトをつけたかったのでキャリッジリターンを
知りたかったのです。インタプリタだと確認できないので
ファイルに書いて試してみたいと思います。ありがとう御座いました。
またmximaスレが落ちた
ある意味matlabより便利なのに,思ったより使ってる人すくないのかなあ
Common Lispでリストの要素を文字列化するには
どのようにすれば良いでしょうか?
'(hello world)というリストの
各要素の長さを別のリストに移したいのでmapcarをつかおうと思うのですが、
legthは文字列でないと受け取ってくれないので、どうしようかと
思っています。
よろしくおねがいします。
(mapcar 'length (mapcar 'string '(hello world)))
ありがとう御座います。
233 :
デフォルトの名無しさん:2009/05/17(日) 10:30:29
234 :
デフォルトの名無しさん:2009/05/17(日) 12:09:23
Common Lispの仕様書が欲しいのですが、
HyperSpecやらCLtL2やら
ANSI X3.226-1994 Information Technology - Programming Language - Common Lisp
やらが出てきてどれが本物なのかがわかりません。
少し聞いた話がANSIが仕様書でCLtL2はその仕様書の編纂途中の様子とかを記録した物で
HyperSpecは辞書のような物だと聞いた事が有ったような....
できれば書籍で販売されているとうれしいです。
ヤンデレが治ったら本気出すスレ
$350.00 って趣味で出すにはちょっと高いかも
趣味ならANSIからPDFを買って自分で印刷すればいい
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式でも関数でもないと帰ってきてしまいます。
これを回避するにはどのようにすれば良いのでしょうか?
よろしくおねがいします。
>>240 carにlambda式を置くというバッドノウハウは無視して
常にfuncallを使うようにすれば良いと思います
243 :
233:2009/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 :
デフォルトの名無しさん:2009/05/20(水) 15:05:06
OpenTypeFontが扱えないとか。
245 :
233:2009/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含め全て再インストールした方が良いでしょうか・・
>>245 こちらではほとんど同じ環境ですが、mcclim-freetypeもmcclim-truetypeも
使えているようです。mcclimはclbuildで入れました。mcclim-truetype.asdでのcl-aaへの
依存を取り除いた以外は特に変更を入れていません。
247 :
233:2009/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:2009/05/26(火) 18:05:45
>>247 gitは入れていますか?zpb-ttfをclbuildで入れるときにこれが必要だったような気がします。
(macportsで入れました)
249 :
デフォルトの名無しさん:2009/05/28(木) 12:23:50
Teepeedee2ってほんとに速いの?
250 :
233:2009/05/29(金) 05:58:43
>>248 返信ありがとうございます。
どうにもならないようなので、一度すべて再インストールしてみることにしました。
アンインストールしてから、SBCL、darcs、clbuild、Gitを再インストールし、
clbuildを使ってmcclim、cl-vectors、zpb-ttfを入れましたが、
truetypeは
>>243のエラー、freetypeは
>>245のエラーがやはり出ます。
これ以上場所を取るのも悪いので、以降は自分で何とかしてみることにします。
また新しく何か分かった時は質問させていただくかもしれないので、その際は宜しくお願いします。
251 :
246:2009/05/29(金) 06:25:07
252 :
233:2009/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:2009/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*の方はこれらの値のうち相対パスになっているものにだけ
使われるので、今は気にしなくて良さそうです。
on lisp 注文しちまった
>>254 なんだか注文した事が後悔されているように読めて悲しい。
技術書の良くできた本って読み物としても良くできてるんだよね。
そしてOn lispは読み物としてもおもしろい本だったよ
他のlisp本だと実践CommonLispが楽しかった。
;;; 小生は活字中毒なのもあるかもしれんが
OnLispは文学
勃起した
258 :
デフォルトの名無しさん:2009/06/02(火) 02:18:11
技術書でかつ訳書といえば、大抵は意味不明な難読日本語に悩まされるのが常だけど、
On Lispは明瞭かつ流暢な日本語で書かれているので、100点を付けてもいいよ
>>258 それで悩んだのはクヌース本の初版だけだったな、ASCII版は普通によめた
でも算符とか鍵盤とかの訳語は好きだぜw
算符じゃなくて算譜だね。この訳語が定着しなかったのは残念。
確かに昔の技術書や科学書は硬い言葉使いが多くて読みづらかったけど、
それでも何とかなっちゃう秀才が大学教授になって、やはり硬い文章を
再生産するのかもしれないなあと思ったりして。
馬鹿みたいに簡単なランレングス圧縮のプログラム
(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))
これってもっとかっこよくエレガントに書けませんかね?
パターンマッチとか使えるといいんだがなぁ...
何を持ってカッコいいとするかはさておき。
(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:2009/06/04(木) 00:09:40
>>253 返信ありがとうございます。
requireの下に、
(setf (cdr (nth 8 mcclim-truetype::*families/faces*)) #P"/Library/Fonts/Arial Unicode.ttf")
を追加したところ、ようやく日本語が表示されました。
色々説明不足であったにもかかわらず、何日もに渡ってお教えいただき、本当にありがとうございました。
初めの方に返信を下さった方々もありがとうございます。
Lisperの皆さんの優しさにちょっと感動です。
今まで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の方が若干遅かったのは驚きました。
タイミングの問題ですかね?
末尾再帰最適化のメリットは主にスペース面で、スピード面の直接の貢献は少ないんじゃないかな。
むしろ末尾再帰のために引数が増えたりすると、スピード面ではデメリットになっているかもしれない。
相互末尾再帰は最適化やってくれるんかな
a->b b->c c->d・・・みたいな
末尾再帰も相互末尾再帰も末尾呼び出しの最適化だ
>>267 Clinger の "Proper tail recursion and space efficiency" でも読みなされ。
270 :
264:2009/06/04(木) 13:07:42
コンパイルした結果がそのようになりました。
(proclaim '(optimize speed))
を忘れていたので帰ったら試して見ます
>>266 tail call 用の引数の計算にスタック上のデータが必要だと、
処理が少しだけ面倒くさくならない?
なんかうまいやり方があるのかな。
272 :
264:2009/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
末尾再帰版が早いときもあれば遅いときもある、ってぐらいじゃないかな。
何回かやってみると必要サイクル数は少し変動してるし(ガベコレのタイミングのせい?)。
うちの環境ではどちらが早いとも言えなかった。
274 :
デフォルトの名無しさん:2009/06/07(日) 11:14:44
今時Common Lispを始めようなんて、
いったいどういう理由なんですか?
>>274 どういう理由と文脈で「今時」とか嫌味つけてそういうことを聞くの?
人それぞれだと思うよ。
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 :
デフォルトの名無しさん:2009/06/07(日) 16:26:46
安物ルータのhtml形式で書かれた通信ログを定期的に保存したいんですが、どのようにしたらいいんでしょうか?
できれば、タグを取り除いたplain text形式で保存したい。
ヒントでいいので、教えていただきたい。
つcron, perl
>>278 cronは、使うと思うんだけど。スクリプトはclで書いてみたいんですが。
とりあえず、簡易版でいいので実装できれば、いいかなと思っています。
280 :
デフォルトの名無しさん:2009/06/07(日) 20:11:53
read-line-intoをSBCLで使えるようにできるライブラリはありますか?
>>280 (setq var (read-line ...))
じゃ, あかんの?
282 :
デフォルトの名無しさん:2009/06/07(日) 20:36:15
>>281 データが大量なのでバッファを使った読み込みが好ましいんですが、
read-sequenceでは使い勝手が悪いので・・。
283 :
デフォルトの名無しさん:2009/06/07(日) 20:39:46
固定長の、ですね。訂正します
だれか私に最初から教えてください。clisp
いいよ。どのくらい最初から?
適当なデータ型のリストを作成して、リストの内容を表示しようとしたら、どう書いたらいい?
超初心者ですりません。Cしか知りません
>>4に乗っているチュートリアルのどれかかなにかを読むのが一番だと思います。
なるほど、勉強してきます。
えらく曖昧だな。こんなんか?
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
いろいろ読みあさってなんとなくだけどわかってきた気がする。ありがとう。
>>279 それをlispで書きたい理由がわからないな。lispの練習をしたいならもっといい問題が
他にあるし、この問題を解きたいならもっといいソリューションが他にあるし。
それでもどうしてもcommon lispでやりたいなら
http://ja.doukaku.org/ でも見ればいいと思うよ。
>>292 > それをlispで書きたい理由がわからないな。lispの練習をしたいならもっといい問題が
> 他にあるし、この問題を解きたいならもっといいソリューションが他にあるし。
問題としては良くないんでしょうか?
練習もかねていますし、将来、この問題をもうちょっと高度にした処理も書きたいと思っています。
>
http://ja.doukaku.org/ 参考にさせていただきます。
ありがとうございました。
GNU Common Lisp 2.6.7を使っていて、記述した関数を読み込ませたのですが、
(load "ファイル名.l")と実行しても読み込めません。
コマンド自体は通っているようなのでファイルを置く場所が間違っていると思います。
GNU Common Lisp 2.6.7でいうカレントディレクトリは何処なんですか?
schme lispスレでこぼしていた者です。
遅くなってすいません。
パッケージのインストール・使い方について教えてください。
このサイトを読んでこいでもいいので、よろしくお願いします。
(load "hoge.lisp")は、わかるんですが、パッケージになるとわけがわかりません。
ライブラリのPATHの通し方もよくわかっていません。
でも、emacs lisp, schemeについては基本的なことはわかっているつもりです。でも、slimeのinfoをまだ読んでいませんが。
http://codepad.org/HNzeTkc4 CLの書籍はピーターうんたらさんの実践common lispの日本語訳のみ所有しています。
296 :
デフォルトの名無しさん:2009/06/12(金) 02:13:31
>>295 asdfで検索すると幸せになれる
主要なライブラリならclbuildを使う
297 :
デフォルトの名無しさん:2009/06/12(金) 02:38:17
あぁぁぁ (lambda x ...)�素敵過ぎ
>>296 言われたとおり、ググって、みまわりしてきた。asdfは、ちょっとわかった感じだけど。まだ全然わかっていない。
asdfの英文のマニュアルも質素過ぎて、よくわからない。
clbuildは、asdf-installが中途半端に使った状態で使っていいのだろうか。
あとgentooのemerge(package system)を使わないで、clbuildを使って、処理系を入れた方がいいんでしょうか?
299 :
295:2009/06/12(金) 07:20:01
あっ、そういうことか。なんかわかってきたかも。
ubuntuだと
/usr/share/common-lisp
以下にasdfがつっこむようにされてるけど、他はどうなってるの?
>>294 *default-pathname-defaults* で確認できんか?GCLは使ってないが。
lingr-down-p
303 :
デフォルトの名無しさん:2009/06/14(日) 01:59:39
(defconstant lingr-down-p t)
Location:
http://gigamonkeys.com/book/files-and-file-io.html 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 >一行ずつ足す方法ってどうやるんですか?
304の本題のほうは、どう書くんですか?
読み進めばわかると思うが、まぁ最終的にはこんな感じになるんじゃね。
(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 とか好きな別の制御構文でいいけどさ。
loop が嫌いな人って do も go も嫌いな気がするんだ
じゃあ再帰したければ再帰でもいい。
(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とか使ったほうがいいかもね。
>>307
summingなんてあったんか・・loopはまさに変態キングやね!
311 :
304:2009/06/14(日) 21:31:40
>>307 章単位でつまみ食いして読んでいます。飛ばした章はとりあえず流し読みだけ。
sbcl and slimeなんだけど、エラーはでないんだけど、答えが出てこないんだが。
loopは、よくわからないなあ。loopの章は読んだんだけどなあ。こういうものだと思って、構文を覚えればいいのかな。
fileもイマイチ書き方がわかっていないし。
>>309 動いた。動いた。
再帰版もサンクスです。
ちょっとしたものを書きながら、file関係の関数にについて理解を深めたいと思います。ありがとうございました。
それは飛ばし杉というか、手を動かしてないとかじゃないかなぁ。
LISPはじめてなら、本を読むときには、サンプルをREPLに何回か打ちこむくらいはしたほうがいいよ。
>>312 手を動かしているよ。
飛ばした章に書かれている内容は大雑把だけど、把握していて、読みたい章で飛ばした章の内容が出てきたら、戻るようにしている。
schemeは多少ゴリゴリやったので、Lispはちょっと実験的に章ごとの拾い読み的な勉強法を試している感じ。
304の話は、軽く調べた限りでめぼしいのがなく、初級レベルのレスも過疎っていたので、質問させていただきました。
string-to-integerといってる時点でSchemerと気がつくべきだったな。私がニブかったね。
PCLを原文で読めるくらいなら、LOOPは書けなくても読めると思うけどやっぱキモいかね。
英語圏の連中が自然に読み書きできる事をめざしていたそうだが・・・まぁSQLもそんな事いってたけど
COBOL もそんなこと言ってたよな
>>301 ダメでした
eclipseを使うことを勧められたのでそちらでやってみようと思います
ありがとうございました
317 :
デフォルトの名無しさん:2009/06/15(月) 01:56:24
Lispは処理系なり何なりがバラバラすぎる
自由度が重要なのは分かるけど、ただでさえ少ない人口が更に分散してる
人口多い言語はエラーメッセージ検索するとすぐひっかかるからいいよね
>人口多い言語はエラーメッセージ検索するとすぐひっかかるからいいよね
すぐググるという思考になって、よくない気もするけどなあ。
軽くググったりもするだろうが、10時間ぐらい悩むのがいいんじゃないだろうか。
いろいろ試行錯誤しても解決しないということは、いいことだし。肥やしになる。
解決するためには英文も読む必要が出てきて、英語の力もつくし。
奥村晴彦のアルゴリズム辞典という本があるけど、Lisp版って需要あるのかな。
ネットでLisp版サンプルコードを晒すだけなんだが。
コメント入れて、読みやすくはするつもりではいる。
ググらなくてもソースコードの中検索すれば大抵すぐ解決するでしょ
> 奥村晴彦のアルゴリズム辞典という本があるけど、Lisp版って需要あるのかな。
覚え始めのころにちょっと挑戦してみたことがある。
魔方陣のコードが見た目凄いことになったのでマクロを覚えて書き直したら
他人に分ってもらえなくなったw
似たものでnumerical recipes in C のlisp版ソースを公開しているものが
あったけど、cをそのまんまcommon lispに直しているだけで、あれはだめだ
ひどいと思ったから、それそうとうのlispらしさを出す努力だけはしてね。
>>322 > ひどいと思ったから、それそうとうのlispらしさを出す努力だけはしてね。
ハードルをあげるのは好きだなw
lispらしさってlisperが思うlispらしさだろ。そんな10年ぐらい触らないとわからないんじゃないのかな。
とりあえず、糞コードを書いて、数年単位ぐらいで書き直して、精度を上げていけばいいんじゃない?
もちろん、過去の糞コードも残して。
そのくらいのスタンスだったら凡人でも鑑賞に堪えるものができるかなと思っているんだけど。
>>319の前半に同意なだけに
そんなの自分でやらせたらどうよと思うw
Cのソースからの単純な置き換えでなんとかなってしまうだけに
「lispらしい」例を少しぐらいは示しておくのでないと
> そんなの
ってのはlispへの書き換えのことね
>>324 らしさ、というと抽象的です。だけども、多値を使うということは意識できるだろう
マクロを使い過ぎというのも一時のもの(あれはlisperの中二病ですね。)だし、そこ
まではする必要はない。まして、最適化まではもとめないよ。loopかmap系かみたいな
ところも好みがあるので、それもらしさという意味ではどっちでもいいよ。また、
schemeとcommon lispでも違いはあるけども。
>>323 もし10年と考えているならば、それはあまり使ってない人だと思う。和訳も出ている
norvigのcommon lispのスタイルに関して記述したものくらいは読んで理解できると
思うがね。そのコードが見本になるものくらいの気持(決っして、そこまで要求しな
いけど、)はもっておいてほしいだけさ。そこに努力の意味が入っている。
聞く耳持たないんなら黙って実行しろよ
ごめん、何がしたいのか分らない。
CからLispへのトランスレータで解決だね
ていうか奥村さんのその本ちゃんと見たのかなー
ぱっと見で楽そうとか思ってね?
lispにforがないのはなんで?
LOOPマクロにある FOR じゃ駄目なのかい…まぁ、煽りなんだろうけど
>>330 君も知ってる通りLisperは再帰を使うのさ。って言って欲しかった?
333 :
デフォルトの名無しさん:2009/06/19(金) 00:10:11
LISPってC言語より古いんだぜ?
for(初期化付き繰り返し)の原型が最初に出てきた言語って何だろ
FORTRANじゃないの?
>331
煽りじゃないです>< ググってみます
>>332-334 りすぱーへの道のりは通そうです><
本気なの?じゃあ答えるけど、C風のforなら
for (int i=0; i<10; i++) {
...
}
は、次の LOOP 式とほぼ同等
(loop for i from 0 below 10 do
...)
だし、Perlみたいなforを想定してたなら
for my $i (@lst) { ... }
これ
(loop for i in lst do ...)
まぁ、こいつはらforじゃなくてloopだろとか字面の話なら、存在しないってことでもいいけど
doのことも忘れないであげてね
初心者です。本で勉強してます。再帰関数をつかった問題を解いていて
自力で解けず、解答のコードを見ても再帰関数がどう動いて値を返してるのか
把握出来ません。例を当てはめても、理解出来ないこともあります。
こういう作業をするときはこのコードを使うと1:1で対応させて
暗記してしまえば良いんでしょうか?それとも、悩みぬいた方がいいんでしょうか?
コンピュータ上で動かしながら考えたらいいと思うよ
いわゆるprintfデバッグでもいいし、traceもあるし、デバッガも使えるし。
再帰の理解は基礎の基礎。ちゃんと理解しなさい。
どうしてもダメなら自分では再帰は書かない、あらゆる処理をループで書くと決意する。
理解していないのに暗記で書くなんて最悪だ。
342 :
デフォルトの名無しさん:2009/06/22(月) 13:55:44
理解する方がいいのは当たり前だが、暗記がそれほど悪いわけでもないと思うけどなあ
暗記で書くのとライブラリを使うのとは本質的に同じだ
使うライブラリはすべて理解しろと言うわけでもないだろうし
> 暗記で書くのとライブラリを使うのとは本質的に同じだ
んなわけない。まあ書くのも使うのも自分一人なら同じかも知れないが。
>>339 そんなあなたに little schemer
doとかloopの使い方なら暗記で良いけど、
再帰関数はコードが読めないと何をしているかわからなくなるよ。
自分も教えられるほど理解してないけど、基本的には、呼び出し側の関数に呼び出された関数を展開するように考えればいいと思う。
みなさん、レスどもです。理解するまでやってみます・・・
ネスト入ると、頭が沸騰しちゃいますね・・・
ネスト?相互再帰とかかな。どんなので沸騰してるんだろ。
再帰関数hogeの中で、別の再帰関数higeが呼ばれて
higeの引数にhogeが渡されるような関数です。
動きを頭の中で追おうとすると沸騰します。
>>348 人の関数を追いかけるからだよ
再帰で物がきれいにかけても人の考えまでは見えないからね
自分で再帰関数の定義を自在にできるようになるまでは相互呼び出し系は鬼門だとおもうよ(再帰に限らず関数ポインタ渡すCとかも)
「処理の流れ」をおっかけようとしているのが原因じゃないかな。(他の言語の経験があると仮定すると、ですが)
「どう動くか」じゃなくて、「何をやっているのか」を読めるようになるといいと思う。
停止条件と、次の呼び出しのときにどう問題を細かくしていくのか、に注目してみよう。
>>344 little MLerって本もあるらしい。
>>349 >>350 はい、処理をおっかけてとりあえず理解しようとしていましたが、問題を一つ解くのに
エライ時間かかりましたし。何をやっているかを読むようにしてみます。
>>351(
>>344)
余裕が出来たら、読んでみます
353 :
351:2009/06/24(水) 21:29:07
>>352 ごめん、MLスレと間違えたんだ。無視してください。
maximaが静的スコープなのを確認した
lispboxを触ってみたら、さっそく分からないことが・・・。
Emacs上で以下のリストを書いてC+c C+kでロードしたら
(setf mat_A '(((1 2) (5 4)) ((1 2) (2 3))))
↓こんな警告がでた。
-+ Warnings (1)
`-- MAT_A is neither declared nor bound,
it will be treated as if it were declared SPECIAL.
警告自体はあまり気にしてないんだけど、警告画面が消せない。
警告画面を消してslime-repl画面に移動するにはどうすれば
いいんでしょうか?
>>355 lispboxについてはよくわからないし、初心者に毛が生えたレベルだけど、
警告出たら、qなり、Ctrl-x oなりすればいいんじゃないの?
消したいウィンドウのモードラインで右クリックしたら消える
slime-compilation-finished 辺りを書き換えるか、
slime-compilation-finished-hook で警告を消せばいいんじゃないの?
slime はかなり読みやすいんだからこれくらい自分で探せよ
360 :
デフォルトの名無しさん:2009/06/26(金) 20:09:01
破壊的リスト操作をする関数を非破壊的操作に変えたいんだがなにか良い方法はないかな?
関数でsetqはあまり良くないよね
破壊的操作がされることを期待して書かれたコードがあったりしない?
大丈夫?
(defun non-destructive-function (list)
(destructive-function (copy-list list)))
3秒で書いたのでどうなっても知らない
>>356 ありがとうございます。
ふだんxyzzyは使うんですが、emacsには慣れてなくて。
>>357-358 ありがとうございます。
それでうまくいきました。
>>359 サーセン、無理ッス。
364 :
デフォルトの名無しさん:2009/06/27(土) 16:47:40
cond式で複数の値を返すってできる?
>>364 values 使うだけちゃうの?
CL-USER> (cond (nil (values nil t))
(t (values t nil)))
T
NIL
CL-USER>
366 :
デフォルトの名無しさん:2009/06/28(日) 02:27:58
再帰の利点って何ですか?
最適化でループになるのなら、初めからループで書けば良いと思うのですが
それは、再帰が何か特別な物に見えている人(再帰を消化しきれていない人)の
発想じゃないかなぁ。
ある動作を素直に表現しようとした時に、それが再帰と呼ばれるものを使用している場合がある。
他のあらゆる技法、概念と同じだよ。
368 :
デフォルトの名無しさん:2009/06/28(日) 03:07:08
>>366 再帰にすることで、構造が非常にはっきりする(場合がある)という利点はあるよ
ループのほうが速ければ、別に再帰にする必要なんかない
カルト宗教じゃないんだから
再帰はイメージできるようになったんだけど、loopの構文ってどうやって覚えればいいの?
loop構文で出てくる単語を覚えられない。
読むのは、いじっていればなんとかわかるんだけどなあ。
loopは、別に使えなくていいらしい。
構文の重箱の隅をつつくような使い方をすると、
ちゃんと動かなかったりするらしい。
…と初心者の聞きかじり。
371 :
デフォルトの名無しさん:2009/06/28(日) 10:49:37
関数の引数に大域変数を渡すと、その大域変数に値を代入してくれる関数って作れる?
rplaca,rplacdを使わないで
何を言っているのだお前は
イミフ。そもそも大域変数って何か分かってんのか?
374 :
デフォルトの名無しさん:2009/06/28(日) 11:23:03
>>372 (defun settest (x) (setq x 123))
で(settest y)としてもyに値を入れてくれないじゃん
どうすればいいの?
つ マクロ
376 :
デフォルトの名無しさん:2009/06/28(日) 11:33:36
>>374 関数に副作用持たすのはよくない傾向と共通認識があるからそもそも問題にならない
呼び出し側でsetfすればいい話
(defun settest (x)
(setf (symbol-value x) 123))
(settest 'y)
マクロの質問なのですが.
(defvar *test*
'(("aaa" . "bbb")
("ccc" . "ddd")))
(defmacro build-toolbar (val)
`(progn
,@(loop for i in val collect
`(print ,(car i)))))
こういうマクロを書いて
(progn
(print "aaa")
(print "ccc"))
こうなることを期待したのですが.
(build-toolbar *test*)
とやると,The value *TEST* is not of type LIST.
と出てしまいます.
どうすればよいのでしょうか?.
ちなみに,,@(loop for i in *test* collect...とやるとうまくいきます.
defvarで*test*が束縛されるのは実行時。
マクロが展開されるのはコンパイル時。
383 :
380:2009/06/29(月) 18:22:44
うーん,原因はわかったんだけど解決法がわからない...
そもそも定数値をマクロに渡すような手法は間違っているのだろうか...
> ちなみに,,@(loop for i in *test* collect...とやるとうまくいきます.
てことは展開時に *test* はそのリストに束縛されてんだろう
(build-toolbar *test*)
のマクロ展開時に val が束縛されてるのは symbol *test* であって、その
値である '(("aaa" . "bbb") ...) ではないからじゃね?
the value *TEST* だからそれだな。
両方?
>>380 (defmacro foo (val)
`(mapcan (lambda (x) (print (car x))) ,val))
(defmacro bar (val)
`(eval (cons 'progn (loop for i in ,val collect (list 'print (car i))))))
>>380 (defvar *test* '(("aaa" . "bbb") ("ccc" . "ddd")))
(defun foo (val)
`(progn ,@(mapcar (lambda (x) `(print ,(car x))) val)))
(defmacro build-toolbar (val)
(let ((m (gensym)))
`(macrolet ((,m () (foo ,val)))
(,m))))
なんでおまいらそんなにひねくれてるんだ
>>380に書いてあることを素直にやればいいんだ。
> ちなみに,,@(loop for i in *test* collect...とやるとうまくいきます.
↓
うまくいくマクロを定義するマクロを書く。
>>381のような誤解もあるので書いておくことにする。
>>380の最後に書いてあるように、大域変数の値に実際にマクロの定義文内で
アクセスすることは可能。でもトップレベルスコープであるマクロの展開中は
大域変数にしかアクセスできないのでふつうは
>>387-388のように書く。
あたしネカマだけど、マクロ展開とコンパイルを区別できない男の人って・・・
>>380のdefvarとdefmacroがコンパイルしたい同じファイル内にあるならそうだけど、
そんなこと書いてないじゃん。質問がreplでは通るのにcompile-fileできません><なら
ともかく、
>>381の回答は明らかに状況が判ってないだろ。
実際、compile-fileが評価される前に評価されたdefvarの値をマクロ定義内で参照してる
ファイルはコンパイルできる品
395 :
デフォルトの名無しさん:2009/06/30(火) 17:22:42
clisp使ってるんですけどプログラムを走らせてる途中でメモリーが足りないというような
メッセージが出たんで一旦止めて
$ clisp -m 768KB program.fas
という具合に -m オプションをつけて走らせたんですけど、同じようにメモリーが足りないという
メッセージがでます。
ps でメモリーの使用量を調べたら30%も使ってませんでした。
これってclispのバグとかでしょうか?
ネカマの振りして後から必死で言い訳か。まあ頑張れ。
ついでに、たいていの処理系ではREPLで(defun ...)を評価しただけでコンパイルまで
されちゃうってことも知っておいてね☆
398 :
ネカマ:2009/06/30(火) 17:48:06
あたし頑張る!!
トップレベルの式がコンパイルするときには評価されないとか 全 く 関係ないから
>ちなみに,,@(loop for i in *test* collect...とやるとうまくいきます.
と書いてあるんだから、すでに *test* は束縛されてることがあきらかなのに
トップレベルの式はコンパイル時に評価されないとかズレたこと言い出す
>>392 は無能すぎ
質問に答える価値なし
たとえ defvar 式がトップレベルに書いてあるファイルをコンパイルしてても
元々束縛されてるものはちゃんと束縛されてますから
小学校からやりなおしてね
>>395 申し訳ないが、今は
>>392で遊ぶのに必死で、あなたの質問に答える余裕がないことを
どうか許してもらいたい
いつから幼稚園になったのこのスレ
おれはむしろ一度たりとも小学校レベルにたどり着いたことがあるのか知りたい
良く分からないんだけど、彼は何でこんなにヒートアップしてんの?
WindowsXP上で、CLisp(2.47) + ActiveTcl(8.4) + ltk(0.91) を使い、
テキストボックスを表示させてキー入力すると固まってしまいます。
(ウィンドウが完全無反応になる)
要はltkを使いたい(CLでGUIアプリを作りたい)のですが、
1.上記組み合わせ(CLisp + ActiveTcl)で解決方法はありますか?
2.ない場合、上記現象がおきない処理系の組み合わせを教えてください
(AllegroCLとかLispWorksといった有償のパッケージは使わない方向で)
LispWorks personal (無償)+ CAPIはだめなの?
関係ないかもしれんが、もしお商売の一環としてやるならフリーウェアを使うことでよけいに
手間がかかることの潜在的なコストというのも考えるべきだと思う。
>>403 LispWorksは日本語のリテラルが入ったソースの扱いで困る
ACLは店頭で気軽に買えないので困る(通販でも買えないし)
>>402 文字コード関係の問題だと思った過去スレ4だかに同じような話が出てたよ
405 :
402:2009/07/01(水) 20:30:57
過去スレ3にあった文字コード関連の設定を行ってみましたがダメでした。
((defun wish-enable-japanese… や (setf sb-impl::…)といったもの)
CLispの代わりにSBCL(1.0.20)を使ってみると、固まらずに動きました。
Windows版のSBCLは不安定、といった感じの文章をみたことがあるので、
できれば避けたかったのですが。
>>405 > ((defun wish-enable-japanese… や (setf sb-impl::…)といったもの)
CLISPつかってるのにsb-implを設定とな?
407 :
402:2009/07/03(金) 09:09:14
新規に別マシンにインストールしたところ、固まらずに動作しました。
狐につままれた感じです。OSの違いが関係あるのでしょうか???
(以前)Windows XP Home SP1
(今回)Windows XP Pro SP2
一応各モジュールのバージョンを書いておきます。
CLisp 2.47
ActiveTcl 8.4.15.0.280619
ltk 0.91
408 :
402:2009/07/03(金) 09:10:03
すいません、ageてしまいました
多分難しくて理解できないんだろう
411 :
デフォルトの名無しさん:2009/07/08(水) 08:11:01
LISPでネタプログラム作ろうぜ!まずは俺から。
CL-USER(1): ;; Setting (stream-external-format *terminal-io*) to :emacs-mule.
CL-USER(2): (defun ^o^ () '(^o^))
^O^
CL-USER(3): (^o^)
(^O^)
CL-USER(4):
412 :
デフォルトの名無しさん:2009/07/14(火) 22:18:57
LispにJavaのURLクラスのようなものはありますか?
Webサイトを読み込みたいのですが
Drakmaつかえ
414 :
デフォルトの名無しさん:2009/07/14(火) 23:03:44
>>413 レスありがとうです。
やっぱりライブラリがあるんですね。
415 :
デフォルトの名無しさん:2009/07/15(水) 08:20:33
format関数の値を返さないようにする方法ってある?
値を返さない組み込み関数があるといいんだけど。
>>415 意味がわかりません
関数は必ず値を返します
elispでいうignore関数みたいなものが欲しいって事?
(defun my-format (stream format &rest args)
(apply #'format stream format args)
(values))
;; 書き忘れ: 値を返さないことが嬉しいってどういう場合なのか聞いてみたい
>>418 こっそり変化かぁ。おもいっきり副作用じゃないの。
たぶん言語的なものじゃなくて、機械語に変換される際の高速化に影響する場合
といったものだと思うよ。それも処理系依存だから、特殊な条件がかさなるよ。
formatって何が返るんだっけ
まあ関数型言語だし、何も考えずとも最適化されとるよ
nilとか返すよ
(do ((n 1 (* n 2)))((print (format (< n 1000) "~A" n))))
yaclmlを使ってcgiを作ろうと思うのですが
(require 'asdf)
(asdf:oos 'asdf:load-op :yaclml)
をしたときに
; loading system definition ...
などと出力されますよね?
この情報?の出力をやめさせたいときは、どうすればいいのでしょうか?
ch-whoじゃだめなの?
>>423 cl-whoでやりたいことはすべてできそうです。ありがとうございました。
425 :
デフォルトの名無しさん:2009/08/05(水) 03:27:16
>>422 CommonLispでcgiって遅くない?
動作は速いんだけど、起動してロードする時間かかりすぎた気がする。
結局その時はHTTPサーバとかも全部Lispにしたんだけど、なんか速くなる方法あるんですか?
コンパイルしといても時間かかるでしょ?
ECLとかでスタンドアローンにするのかな?
gaucheとかだとCGI速いんだけど、やっぱCLのほうが使いやすいからなー。
実用的速度で使える方法があるなら知りたい。
>>91 の言っている事って、C++では普通関数アダプタ(bind2stみたいなので)使って解決するもんだよ。
template<typename T, typename F>
void update(T& obj, F func)
{
func(&obj);
}
Foo foo;
Bar bar;
update(foo, mem_fun(&Foo::update));
update(bar, bind2nd(mem_fun(&Bar::update), true));
なんで、CLOSでも同じ事すれば万事解決じゃないかな?
C++はマルチパラダイムなんで、普通にCLOSと同じ事をしているってことだね。
起動してロードする時間が少ないのはclispってどこかに書いてあった
>>425 fastCGI 的なことをするしかないと思う。
mod_lisp はあんまりメンテされてないという噂も。
普通はdumpするから起動したら既にロードし終わってるんじゃないの?
>>429 なんだかんだで大きなcore読まないとならんでしょ
短いcgiならfastcgi使うのがいい、システムが大きくなりそうならHunchentootとか
「実践 Common Lisp」を買いました。
また分からないことがありましたら質問にきます。
買った報告なんていらねぇよ。
値段や表紙のデザイン程度でもなんか感想くらい書けよ。
何を実践するのか判らないね
>>436 /etc/libmap.conf を作って
libpthread.so.2 libthr.so
とか, 書き込むと幸せになれるかも知れない
だめだったら, あきらめろ
439 :
438:2009/08/17(月) 21:37:56
>>436 追加 ${PORT}/misc/compat6x をいれるってのもありかもしれない
それでもだめだったら本当にあきらめるしかないっぽいな
440 :
436:2009/08/17(月) 21:48:04
misc/compat*をインストールしたところうまくいきました
ありがとうございます
> pthread 入れろ
libpthread.* は *BSD には無条件でインストールされるはずなのに
どんな意味で言ってるんだろうか?
Common LispでSRFI-*の関数が使いたい時、一つ一つ移植してオレオレライブラリに追加してるんだけど、
これって非効率すぎるよね?皆さんどうしてるの?
そんな時はない
Windows環境でいちばんお勧めな処理系ってなんでしょ?
手頃なとこでclispでいいんでないかい
>>445 ありがとう。やはりclispが妥当ですか。
Windows上でThread使える環境ってACLしかないのかな?
どうしてそう思ったのかな?
clispとsbclはどっちもサポートされてなくてションボリしてるだけなんだ
>>442 commonlispの上でschemeを動かす
こんなのclerなら簡単だよね?
>>448 clozuer clが該当したけどXP64bit版でMeadowからslime経由で64bitのCCLを実行すると落ちるんだよね
32bit版のCCLは起動自体拒否されちゃうし
ちなみにThreadさえ使わないならSBCLは凄く使いやすいのだけど、hunchentootで遊ぼうとかするとモウダメポ
ACL店売りしてくんろ >> Franz
aclってクソ高かったような
aclダウンロード販売汁
+, -, incfみたいな既に定義されているオペレーターをオーバーライド
するのってどうやったらよいのでしょう.
vectorクラスを定義しておいて,+オペレーターの引数にvectorクラスが
渡されたら,自分が定義した処理を行うみたいな...
C++でいうoperatorみたなのをやりたいんですが...
教えてください
>>454 汎関数ならオーバーライド的なことはできるけど、
+はただの関数だから無理では。
C++と違って+はオペレーターじゃないぞ。
>>455 ちなみに汎関数(これって自分が定義する関数ってことですよね?)
どうするんでしょう??
genericのことかよ
総称関数を普通汎関数なんて言わない
普通「汎関数」といえば“functional”の訳語だね。
すまん。用語を間違えた。総称関数のつもりだった。
汎関数てのは無いが汎変数てのがあるね。(defsetf)
>>461 なんでサイエンス社で出さないんだろう。
旧版、持ってるけどお布施で買うか。
因みに未だ読んでない。
>>462 旧版って20年も前の本ですよ。
随分と寝かしましたな〜w
>>463 何年か前に古本屋で買ったんですよ。で、積読になってるんです。
汎関数は、単に関数オブジェクトを引数として取って、数値を返す作用のこと。
ところで、CLに確率過程を取り扱えるライブラリってある?
funcallってなんのでしょうか
lambda (f x) (funcall f x))
こんなのを定義したときの動きがよくわかりません
>>466 頭の括弧が抜けてるだけだよね?
それだと、
変数f と 変数x を引数に取って
変数xの値を引数にして
変数fに束縛されている関数を呼び出すlambda
になってる。
その例だと少しややこしいから、以下の関数と見比べて考えてみて欲しい。
(funcall '1+ 1)
(funcall (lambda (x y) (+ x y)) 1 2)
funcallはなんなのか?といわれれば関数適用applyの特殊形態だろ。
Lisp Scheme スレは既に墜ちた!残るは我らだけじゃ!
Snow LeopardにしたらSBCLが動かなくなってクマった。Maximaも使えないよ。(*・(エ)・*)
>>469 > Snow LeopardにしたらSBCLが動かなくなってクマった。Maximaも使えないよ。(*・(エ)・*)
clisp でやりゃいいじゃん。オレはしぶとく Tiger で Maxima 使ってるけど。
最新版の Sage だと ecl で Maxima を動かしてるみたい。昔は clisp 使ってたはずなんだけど。
473 :
デフォルトの名無しさん:2009/09/15(火) 10:40:46
Snow Leopard上のSBCLですが、とりあえずx86_64のバイナリなら動きますよ。
コンパイルするには若干修正が必要です。
clispでrequireがasdf:load-opに置き換わるマクロ書いたら不具合おきないのかな
sbclに慣れたので長いタイプが不便
>>469 Lisp Schemeスレはとうとうパンドラの箱を開けてしまった。
災厄なのか、キボウなのか。
そろそろID導入してアク禁することも検討しないといけなくなったな。
携帯の場合はアカロムになるから覚悟しとけよ。
コピペ乙
>>478 その態度も今の内だな。
世の中甘くないぜ。
甘いところはとことん甘いのが世の中。
>>479 勘違いしてるみたいだが、俺は荒らしている人間とは別だぞ。
下らないゴタゴタをこっちのスレまで持って来るなよ。
482 :
デフォルトの名無しさん:2009/09/16(水) 12:21:16
XreaにSBCL突っ込んでCGIやろうとしたらbashに制限かかってて断念
お金ケチると駄目だね
Gauche をクロスコンパイルして xrea に転送して使ってる。
SBCL も使えなくはないんじゃないかなぁ。 面倒だろうけど。
dreamhostでclispはコンパイルできた
clbuildも途中までは動いた
485 :
デフォルトの名無しさん:2009/09/16(水) 13:47:04
windows上で動くlispboxでasdfとcffiが使いたいので
~/.clisprc.lisp
に
(load "FullPath\\asdf.lisp")
(push "C:\\usr\\share\\common-lisp\\systems" asdf:*central-registry*)
と書いて
C:\\usr\\share\\common-lisp\\systems
にcffi.asdのリンクを置いた
しかし
(asdf:operate 'asdf:load-op :cffi)
とすると
*** - MAKE-PATHNAME: Illegal :TYPE argumen
The following restarts are available:
ABORT :R1 Abort main loop
となってうまく動かない
参考にしたのは
http://mono.kmc.gr.jp/~mak/hiki/?lisp%2Flispbuilder%2Fwindows%2Fclisp
487 :
デフォルトの名無しさん:2009/09/19(土) 16:33:36
上のコメントに感化されてさくらサーバを借りてみましたが、どうも上手くいかないです。
sshを繋いで、sbclをインストールするためにsh install.shをすると、
mkdir: /usr/local/share/info: Permission deniedと出るので、
install.shを開いて、変数:DEFAULT_INSTALL_ROOTを権限のある自分のディレクトリに変更、その後もういちどsh install.shとすると、
SBCL has been installed:
binary /home/[*ユーザ名]/bin/sbcl
core and contribs in /home/[*ユーザ名]/lib/sbcl/
と表示されたものの、テストcgiではサーバエラー(500)が出ました。
cgi内容:
#!/home/[*ユーザ名]/bin/sbcl
(format t "Content-Type: text/html~%~%")
(format t "<html><body>~%")
(format t "test~%")
(format t "</body></html>~%")
うーん、何か間違ってますかね?
>>487 そのCGIの名前は? シェルから起動して動く? 権限の設定は?
~% で CR+LF が出力されているか確認した?
489 :
デフォルトの名無しさん:2009/09/19(土) 17:01:39
>>489 改行コードは od に出力を渡して調べる
とりあえず、Apacheがshebangを見てスクリプト起動できるようにしないと
先には進めないと思う
なので % ./test.cgi が動くようになるまでファイト
# Action, SetHandler, ラッパースクリプトを使えばなんとかなるかもしれないけど
# そこまでしても労に見合わない気がする
windowsでお勧めのCommon Lisp処理系はclispでいいの?
asdf関係がおかしい気もするんだけど
WindowsでのおすすめはAllegroだけって言っても問題ないような気がする
>>489 ちょっと試してみたんだ
さくらインターネットのスタンダード FreeBSD 7.1-RELEASE-p6
sbcl-1.0.23-x86-freebsd
% cd sbcl-1.0.23-x86-freebsd
% setenv INSTALL_ROOT /home/USERNAME/sbcl
% sh install.sh
% cd ~/sbcl/bin
%./sbcl
fatal error encountered in SBCL pid *****:
can't find core file at /usr/local/lib/sbcl//sbcl.core
% setenv SBCL_HOME /home/USERNAME/mysbcl/lib/sbcl
% ./sbcl
This is SBCL 1.0.23, an implementation of ANSI Common Lisp.
[...]
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
Bus Error
%
\(^o^)/
インストール先が/usr/local/*を想定されているから
sbclの起動引数
--core corefilename
を使って$HOME以下にインストールされているはずのcoreファイルの場所指定すればいいだけな気がするが?
と思ったらSBCL_HOME設定のうえBus Errorかよ
なんかMC68000を直にさわって落としてた頃を思い出したぜ
496 :
493:2009/09/19(土) 21:10:37
>>494 SBCL_HOME の代わりに --core を試してみたけど Bus Error
これ以上興味本位で引っ掻き回すのも悪いので成功者の報告を待ちます
498 :
493:2009/09/19(土) 22:11:00
499 :
493:2009/09/19(土) 22:11:48
ああごめん・・・
% uname -m
i386
500 :
デフォルトの名無しさん:2009/09/20(日) 04:42:30
皆さんありがとうございます
いろいろ試したのですがBus errorですね
改行は問題ないようです
uname -mはi386と出ました
進展があればまた書きます
501 :
デフォルトの名無しさん:2009/09/20(日) 04:43:59
↑489です、すみません
xreaでやってみたけど同じエラーが出たよ
報告だけで助けにはなれないけど頑張って
>>503 せっかくIDEがあるのにマルチバイト文字(言語に関係なく)の扱いがぞんざいなので結局オペレーションにslime+emacsになっちゃう
505 :
デフォルトの名無しさん:2009/09/20(日) 18:18:40
ttp://code.google.com/p/lispbuilder/wiki/WindowsSBCLlispbuilder-sdl Lisp + SDLで遊んでみたくて↑の記述を真似てインストールしてみましたがうまくいきません。
(asdf:operate 'asdf:load-op :lispbuilder-sdl)実行時に↓のようなエラーが出ます。
; compiling file "G:\\Program Files\\Steel Bank Common Lisp\\1.0.29\\site\\lispbuilder-sdl\\cffi\\library.lisp" (written 02 SEP 2009 03:09:26 AM):
; compiling (IN-PACKAGE #:LISPBUILDER-SDL-CFFI); compilation aborted because of fatal error:
; READ failure in COMPILE-FILE:
; SB-INT:SIMPLE-READER-PACKAGE-ERROR at 485 (line 12, column 51) on #<SB-SYS:FD-STREAM for "file G:\\Program Files\\Steel Bank Common Lisp\\1.0.29\\site\\lispbuilder-sdl\\cffi\\library.lisp" {23FF98D1}>:
; package "SDL-BIN" not found
SDL-BINというパッケージはlispbuilder-0.9.8.tgzとwin32-lispbuilder-sdl-binaries-1.2.12.tgzには入っていないんですか?
環境はWindows XPとSteel Bank Common Lisp 1.0.29です。
Windowsでうまく行かなくて・・・というのを見るたびに、まずはWindowsを窓から投げ捨て
ましょうと教えたくなってしまうのだが。プログラミングをしたければまず*nixを入れるが吉。
必ずしもそうとは言えないけど、
CommonLisp はあまり windows で使うことを考えてなさそうな傾向はあると思う。
508 :
デフォルトの名無しさん:2009/09/21(月) 05:57:08
>>506 えーと、うまくいかない理由は「Windows環境であるから」なんですか?
それとも「Windows版固有の不具合」なんですか?
わからないのなら無理に返事くれなくてもいいんですよ。
一体何がしたいんですか?「自分はWindowsが嫌いである」という信仰の告白ですか?
私はCommon Lispを使いたいんであって、Linuxを使いたいのではありません。
Linuxは環境構築するのに無駄に時間がかかりすぎますし、日本語環境とエディタが
糞すぎるので絶対に使いたくありません。コーディングはWindowsとxyzyyで万全です。
509 :
489:2009/09/21(月) 06:44:35
489ですが、結局駄目でした。CLISPを入れることにします。
ついでに質問なのですが、LispをコンパイルせずCGIで動かす場合、
処理が遅くなるevalやdefmacroは避けた方が良いですか?
それとも皆さんコンパイルして使うのでしょうか。
>>508 お前が無知なだけね。
今時のlinuxはインスコと同時に日本語も見れるし、日本語も打てるようにできる。
エディタもemacsで世界最強。 てか、ある程度完成されたエディタはどのOSでも使えるから理由になってない。
自分の使ってるエディタのスペリングを間違えるような厨房にレスするべきではないかもしれんな。
>>510 >今時のlinuxはインスコと同時に日本語も見れるし、日本語も打てるようにできる。
>日本語環境とエディタが糞すぎるので
cannaとかいうimmは入れ直さないと使いものにならないよね
512 :
デフォルトの名無しさん:2009/09/21(月) 07:28:54
>>510 >
>>508 > お前が無知なだけね。
> 今時のlinuxはインスコと同時に日本語も見れるし、日本語も打てるようにできる。
Windowsと同等以上の手軽さでできるとでも?
日本語環境を構築できる事が必ず保証されてるわけではなく、インストールする環境次第では
日本語を表示できないトラブルが多発しますよね。
余計な手間がかかる上にはるかに見劣りする環境しか無いのがLinuxじゃないですか。
> エディタもemacsで世界最強。 てか、ある程度完成されたエディタはどのOSでも使えるから理由になってない。
emacsは重すぎて話になりませんし、Linuxには買ってきてすぐに使えるWindowsPCほどの便利さがありません。
コーディングの道具とするにはWindows搭載のノートPCとxyzzyを使うのが最適です。
> 自分の使ってるエディタのスペリングを間違えるような厨房にレスするべきではないかもしれんな。
そんな些細な部分しか反撃出来る箇所が見つからなかったんですか?
くだらない人格攻撃をしなければならないような程度の低い人は黙っていて下さい。
513 :
506:2009/09/21(月) 07:35:29
>>508 *nixと書いたのがなぜLinuxに限定されたのかわからんが・・
xyzzy使ってるんなら無理にCL入れずにxyzzy lispで遊んでればいいだろ。
SBCL開発者から見たらWin XPなんて「二級市民が口答えすんなや(゚∀゚)アヒャヒャヒャヒャ」って感じでしょ。
514 :
デフォルトの名無しさん:2009/09/21(月) 07:50:32
>>513 > *nixと書いたのがなぜLinuxに限定されたのかわからんが・・
えっ?Linux以外に個人ユーザが使う上で現実的な選択肢が他にあるとでもいうんですか?
> xyzzy使ってるんなら無理にCL入れずにxyzzy lispで遊んでればいいだろ。
えっ?LispとSDLを使って遊びたいだけなのに、xyzzyでSDLを使えるようにするところから
自力で書くんですか?そんな非効率的で馬鹿馬鹿しい事なんてしたくありません。
> SBCL開発者から見たらWin XPなんて「二級市民が口答えすんなや(゚∀゚)アヒャヒャヒャヒャ」って感じでしょ。
あー、やっぱり貴方はその程度の人なんですね。煽りたいだけなら黙っててください。
516 :
506:2009/09/21(月) 08:23:02
>>515 Windowsの汚濁から永らく離れてるスノッブで悪いが、そのlibrary.lispのコメントアウトされてるところ
を非コメント化してその下の今ある#+windows部分を代わりにコメントアウトしたらどうなるんだ?
>>514 www ワロタ。
>>512は、知能が低いのに「自分の主張 = 真理」
だと頑固に信じきっているようなリアル馬鹿。
他人にとっては、
>>512は偏った主観でしかないのにな。
こういった人間は死んでほしいよ。
nautilusも糞
>>512 asdf-installを動かすだけでめちゃくちゃめんどくさい
そんなんだったらvmware上の*nixの方がはるかに簡単
最終的にslimeに落ち着く結果になるのにxyzzyにこだわるのがワケワカメ
関数型言語スレで有名らしいキチガイがLisperを問い詰めたいといってたが、あいつかなぁ
まぁ誰であれ礼儀をわきまえた初心者には親切にすべきだが、おかしな奴はスルーするのがいいぞ
521 :
506:2009/09/21(月) 09:10:44
ドッカン
ドッカン
☆ゴガギーン
.______
. | | |
∩∩ | | | ∩∩
| | | | | | | | | | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ,,) | | | (・x・ )<オラ!人が教えてやってんだから出てこい
>>515!!
/ つ━━"....ロ|ロ . | l |U \___________
〜( / | | |⊂_ |〜
し'∪ └──┴──┘ ∪
Linuxはサーバとしては良いけれどデスクトップ環境としてはWindowsに大きく
見劣りしているのは確かでしょう。
LinuxをデスクットップOSとして使用している人は少ないし、
Lispを使っている人は更に少ない。
使用者の裾野を広げなければ将来はありませんな〜
Mac全盛だったころに
DOS+Windowsに対して
同じことを言っている人がいたね
マク全盛と言ってもシェアは10%以下
Linuxは更にそれ以下
>>522 Lisp は別に広まって欲しいようなものではない。
>>522 CommonLisp をデスクトップマシンで使う意義がそれほど無い。
単に適材適所。
>>526 Windowsからtelnetか何かでLinuxに繋いでLispやってんの?
Clozure Common Lisp とか ECL とかは Windows でも不都合なく動くよね。
ところで Clozure って clojure と混同しやすくね?
漏れ明日からVMWareでXPにLinux突っ込んでLisp勉強するんだ
おまいらやさしくしてね
つか、windowsでclコード書いて、動かしてみても、その後どうすんの?
windowsでclサーバー立ち上げるなんて、実用的じゃないし、
単なる時間の無駄じゃね?
windows上でcl書くなんて、授業の宿題以外で何か使い道あんの?
>>522 >使用者の裾野を広げなければ将来はありませんな〜
2番目に古いコンピュータ言語に対して面白いことをおっしゃいますな〜
これだけ長きに渡って活発に処理系が開発されている言語もそう無いですぜ
clサーバって何ですか?
>>531 それは処理系が開発しやすいのとgccのような決定打が無いからじゃなかろうか?
>>515 >> *nixと書いたのがなぜLinuxに限定されたのかわからんが・・
>えっ?Linux以外に個人ユーザが使う上で現実的な選択肢が他にあるとでもいうんですか?
Mac OS X 良いよ。Lisp やる環境としてはかなり恵まれてるし、
デスクトップとしても使い易い。宗教的理由で Mac が使えない
とかじゃなければお薦めです。UNIX としても十分使える。
もちろん Linux でも良いけど、正直 Windows はお勧めしません。
使ってる人が少ないから。
>>533 gcc が決定打だとは思えないんだが…
最近ずいぶん賢くなったけど, 昔の gcc の最適化のおばかさかげんときたら………
決定打があってはいけない。
多様性が Lisp らしさの根源。
フリーの処理系だと一時期 CMUCL が決定打だったんじゃないのかな
その時代はよく知らないけど、何となくそういうイメージがある
Cygwinでも導入したらええがな。重いから俺は使いたくないけど。
>>536 Common Lispを否定するのか?
>>539 「標準的なものも必要だけど, もっと多様なものがあってもええんちゃう」
って言ってるんちゃうの?
541 :
536:2009/09/21(月) 15:27:15
>>539 実装も含めての話。
>>533 は GCC を例に挙げているけど、「C++99を否定するのか?」なんて言ったらナンセンスだろう?
それと同じ。
>>516 はい、今さっき帰宅しましたよ。昼間は我慢して下さいね。暇じゃないので。
で、それを試したらコンパイルは通りましたね。
かわりに↓なエラーが出るようになりましたが。
debugger invoked on a SB-KERNEL:SIMPLE-PACKAGE-ERROR:
no symbol named "*DEFAULT-FPSMANAGER*" in "LISPBUILDER-SDL-BASE"
結局Windows版の方にはsdl-binなんて入ってないって事なんですか?
>>519 別に業務に使いたいとか、どっぷり漬かってそれだけ使いたいとかじゃないですから。
ちょっと遊んでみるだけなのにOSから入れるなんて面倒な事したくないですよ。
>>534 すいません、宗教上の理由によりMacは使えません。改行コードとかおかしいし。
日本語環境がおかしくてOSごとすぐ落ちるという印象がまだぬぐえないので。
PowerXCell 8iが載ったMacとかが出たら考えちゃいますが。
かまってちゃんのキチガイはスルーでお願いします。
失敗してるからリコンパイルでもすればいいんですかね?
>>543 えーと、AAを貼りだしたからといって、
>>506をかまってちゃんのキチガイ扱いするのは可哀相すぎじゃないですか?
個人的には
>>520あたりの脳内仮想敵について語り始めたり、罵倒しはじめる人の方がどうかと思いますよ。
今のところ可哀相じゃない
>>542 煽りっぽいけどマジレス
asdf-installが使えないと何かが足りないときに本当にめんどくさい。
どうしてもWindows上でチョロくCommonLispで遊びたいならUnix系のVM作るか
学習版のLispworksを入れてからStarter packで遊ぶ以外どうしようもない
なお学習版のLispworksでSDLなんかで遊ぶとあっという間にconsセル上限に達して再起動だから
結局製品版を買わないと遊べないぞ
あー、なるほど?
506の人がいった*nixの方がいいというのはそういう事なんですか?
わかりました。そういう事ならVMにLinux入れて試してみます。
Lisp を触りたいなら、Windows 信仰を捨てれば色々と楽になるよ。
550 :
506:2009/09/22(火) 03:48:50
>>542 >
>>534 > すいません、宗教上の理由によりMacは使えません。改行コードとかおかしいし。
物知らずなので教えて欲しいのだが、正しい改行コードというのがあるのだろうか?
ここだけ読むと途方も無い莫迦にしか見えない。Winsdows の改行コードだけが正し
いのです、というのなら *nix も使えないと思うのだけど。なるほど確かに宗教的な
理由だね。
> 日本語環境がおかしくてOSごとすぐ落ちるという印象がまだぬぐえないので。
> PowerXCell 8iが載ったMacとかが出たら考えちゃいますが。
OS ごとおかしくて、直ぐに青い画面になったり、一般保護違反を出すという印象が
まだ拭えな(ry
正しいのはCR+LF
なぜかというと
タイプライタのCRが行頭でLFが改行だから
Macの様にCRのみだと同じ行に重ねてタイプされる
*NIXの様にLFのみだと
下の行に移動はするが
行頭にはいかない
そんなことを言い出したら
backspaceでカーソル前の文字が消える
delete(rubout)でカーソル位置の文字が消える
(カーソルはブロックカーソルを想定)
ってのも、おかしいわけだが
>>550 ご親切にどうも。マカ―かどうかについては、口にするほどの事は別に何も。
>>552 通信分野、特にインターネットプロトコルの多くはWindows(というかDEC)の改行コード
である CR + LFが正統とみなされてますね。
*nixのLFのみは対応している場合もありますが、旧MacのCRのみは論外ですね。
調べてみたらMacはOS Xで一応まともなOSになったんですね。
あと、宗教的理由とは言いましたが、使ってる人が圧倒的に多いWindows環境になるべく
合わせたいんですよね。Macみたいに人が少なすぎて誰にも遊んでもらえないとか悲しいですし。
まあ、Common Lispを選んだ時点であんまり関係なさそうですけど。
それは機械式のタイプライターじゃなくてテレタイプのことだし、そんなこと言い出したら長い行のときは
その分いっぱいCR並べないといけないことになるわな。機械式はレバーでがちゃーんとやると行送りと
同時にヘッドも行頭に戻るようになっていた。
>>554 > 調べてみたらMacはOS Xで一応まともなOSになったんですね。
Windows はいつになったらまともなOSになるんですか?
cp932 以外の文字コードは認めない。UTF-8 なんて論外だ。
EUC-JP は存在自体が許せない。
とか言い出しそうな人にしか見えない。
改行コードってそもそも低速通信の頃の名残じゃなかったっけ?
そんな話を何処かで聞いたのだけど、何処だったか忘れた。だか
ら正しさとかいう話ではないと思うが、どうなんだろう。
私は使えれば良いや、くらいにしか思ってないから拘りがあんま
りないな。だから Java には驚いた。
558 :
デフォルトの名無しさん:2009/09/22(火) 07:50:41
もし宜しければどなたか
>>509をお願いしますm(_ _)m
あと、String型としてHTMLタグを書くときに、バックスラッシュを使わずにダブルクオーテーションをそのまま書ける方法はありますか?
まさか未だに Mac が PowerPC だと思ってるわけ無いよな。改行コードは知らなかった
みたいだけど、Mac OS X が元々 NextStep だって事くらいきっと知ってるんだよな。
この分野で Windows を使ってる人が圧倒的に少ない事にはそろそろ気付いてるだろうし、
SBCL の公式バイナリが Mac 版だけが最新バージョンな事は当然知ってる事だよな。
その上で自分の宗教と現実のどっちが大事かくらいは分かるよな。
>>557 > 改行コードってそもそも低速通信の頃の名残じゃなかったっけ?
そだよ。50baud 位の通信レートで直接リレーを叩くって時代の名残
>>558 ほとんどのCL処理系は読み込んだ時点でコンパイルまでしてしまうと思うが・・。(評価時に未束縛
シンボルや不正データ型でエラーが出るのはまた別の話)evalはともかくマクロ自体はパフォーマンスに
関係ないはずだし、ふつうボトルネックはCGI本体以外のところにある。
エスケープせずにダブルクオート使いたかったら自分でリーダマクロ書くしかアルマジロ。
>>554 >>Macみたいに人が少なすぎて誰にも遊んでもらえないとか悲しいですし。
今ならMac=Unixなんだから、プログラム勉強するならMacの方が圧倒的に楽だけどなぁ。
技術系のセミナーとか行ってみるといい。Macのノートがやたら多いよ。
>>551 > OS ごとおかしくて、直ぐに青い画面になったり、一般保護違反を出すという印象が
> まだ拭えな(ry
へぇ、今りぬくすユーザはそんなことが書けるんだ。
なんでりぬくすにコントロール+おると+デリートキーコマンドがあったのか知らないのかな。
いや、みゅーる終わらせるのに再起動していたインスト厨だけど(泣
>いや、みゅーる終わらせるのに再起動していたインスト厨だけど(泣
ものすげぇ自爆じゃねぇか!
>>559 むしろPowerPCアーキテクチャでなくなった事で、完全に選択肢に入らなくなりましたね。
Mac OSを使う気は全く無いですし、Windowsが動くとはいっても、Macにこだわるべき理由
が全くありませんから。素直に低価格のWindows PCを選びますよ。2〜3万円で必要な
機能は全て揃いますからね。
> SBCL の公式バイナリが Mac 版だけが最新バージョンな事は当然知ってる事だよな。
これは知りませんでしたね。まさかSBCL自体が地雷だったとは思ってもみませんでした。
>まさかSBCL自体が地雷だったとは
こういう事を平気で言えてしまうのは一体どういう人なんだろうな…
他人事とはいえ、悲しくなるわ
567 :
デフォルトの名無しさん:2009/09/22(火) 21:25:23
>>561 ありがとうございます。
スレ荒れてますね・・。
相手しないほうがいいって意見が正しかったな
569 :
デフォルトの名無しさん:2009/09/22(火) 21:52:25
宗教って怖いね
>>566 > こういう事を平気で言えてしまうのは一体どういう人なんだろうな…
一神教の人。
>>569 MIT の学生なら、その問題を解かなくても Google には入れそうな気が、、、
でもこういうのは楽しくて良いね
573 :
デフォルトの名無しさん:2009/09/22(火) 22:43:56
(defun test (str)
(setf lst '())
(loop for i from 0 upto 3
do (setf (char str i) #\a)
(push str lst))
(format t "~A ~A ~A ~A~%" (car lst) (cadr lst) (caddr lst) (cadddr lst)))
(test "test")
* aaaa aaaa aaaa aaaa
NIL
何故だ
>>566 どんな状況でも自分を正当化できる人間って、ある意味羨ましいよな
やりたい事はこれでいいのかな?
(defun test (str)
(format t "~{~A~^ ~}~%"
(loop
for i from 0 upto 3
for s = (copy-seq str)
do (setf (char s i) #\a)
collect s)))
* (test "test")
aest tast teat tesa
NIL
一つしかない文字列 str を破壊的に更新しているから。
i:0 str => "aest", lst => ("aest")
i:1 str => "aast", lst => ("aast" "aast")
i:2 str => "aaat", lst => ("aaat" "aaat" "aaat")
i:3 str => "aaaa", lst => ("aaaa" "aaaa" "aaaa" "aaaa")
どうなって欲しいのかがよくわからんが、push時にコピーしときたいならこうかな。
(defun test (str)
(let ((lst nil))
(loop for i from 0 upto 3
do (setf (char str i) #\a)
(push (copy-seq str) lst))
(format t "~A ~A ~A ~A~%" (car lst) (cadr lst) (caddr lst) (cadddr lst))))
今気付いたけどtoじゃなくてuptoなんてあるんだ。
なんか違いあったりするの?
数値ベースの for における incremental stepping / decremental stepping の指定につかう。
toとuptoで違いがあるというより組合せだね。byでの増分値指定は正の数のみなので、
from .. to .. [by N] => inc
from .. upto .. [by N] => inc
downfrom .. to .. [by N] => dec
from .. downto .. [by N] => dec
となる。below/aboveとかもあるけど。詳細は CLHS 6.1.2.1.1 The for-as-arithmetic subclause 参照。
579 :
デフォルトの名無しさん:2009/09/22(火) 23:15:47
>>566 だってシェア10%未満の環境のみを基準にして、他は対応が大幅に遅れるんでしょう?
なら、地雷そのものじゃないですか。GCLにでも乗り換えますよ。
>>571 つまりMac信者の事ですね。
やっぱりソースコードが書いてあるとスレがマッタリするな〜
>>580 シェアが大きいってことは「正しい」ってことでも「優れている」ってことでもないんだ。
ある条件にはよりよくマッチするってことはあるかもしれんがね。
>>582 その話題を続けたいなら別スレに行こうな。
君が相手を続ける限り終わらないぜ。論理で信仰に挑んでも仕方が無いさ。
584 :
デフォルトの名無しさん:2009/09/23(水) 01:28:36
まじキチ…ユダヤが人工地震を起こすぞ
【緊急情報カクサンよろしく】
ついに来ました。
大きい動きです。250nT超えてきました。ほぼ間違いありません。もう一度言います。
友人、知人、親類縁者、あらゆるつながりを駆使して巨大地震がくることを教えて下さい。
四川地震より大きいのが来る可能性があります。
http://g★olde★ntam★atama.b★lo★g84.fc2.c★om/
★★★★★危険度MAX★★★★★
★★★★★★★★★★★★★★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★★★★★★★★★★★★★★★★
★★★★★危険度MAX★★★★★
警告!連休中の21、22、23日が危ない!かも2
http://live24.2ch.net/test/read.cgi/eq/1★253494015/
【大気イオン】e-PISCO Part11【また延長】
http://live24.2ch.net/test/read.cgi/eq/1★252991726/
本当に地震が来たら、犯人は特権階級全員だということ2
>>580 SBCL は *nix 上で動作するものとして開発が始まっていてだなぁ,
Windows 上での動作なんてのは想定外だったんだよ。
# Mac も OS X は, ユーザーランドは立派な *nix だしな………
そうゆう意味では地雷だったわけだ。
# ぶつぶつ文句言うくらいだったら SBCL Windows 版の開発に参加すればいいのに
# 何のためのオープンソースなんだか………
なぜかやたらSDLにご執心のようだからおおかたHSP畑の人なんじゃね・・と書こうとしたら
|
\ _ /
_ (m) _
目 ピコーン
/ `′ \
∧∧
(・∀・)
ノ( )ヽ
< >
HSP <-> I_ISP <-> LISP 俺って天才?
>>586 _人人人人人人人人人人人人人人人_
> な、なんだってー!! <
 ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
∩___∩ ∩____∩
| ノ u ヽ / u u └| ∩____∩
/ # ● ● | | ● ● # .ヽ/ u └|
| u ( _●_) ミ 彡 (_●_ ) u |● ● # ヽ
彡、 |∪| 、`\ / |∪| 彡 (_●_) u |
/ __ ヽノ /´> ) ( く ヽ ノ / u |∪| ミ
(___) / (_/ \_ ) ( く ヽ ノ ヽ
#'って紛らわしくない?
quoteっぽく見えるけど、やってることはquote剥がしに近い
>>590 俺も、似たようなこと思ってた。
時々、#'がquote の関数版とか言う表現を見かけたんだけど、
「やってることの向きが逆じゃね。」
と、思ってたよ。
ただ、だまってたけど。
>>590 見た目のはなし?気に入らないなら function でもどーぞ。
>>591 それって見た目の話じゃなくて意味の説明だった?
俺には向きというか全然別物に見えるけど。
シンボルから関数実体をデリファレンスするんだから、確かにquoteのように
ラップするのとは逆といえば逆かな。
lambdaに対する#'は微妙だけど。
>>590 quote と function は元々同じ意味で、
function を使うのは処理系に与えるヒントでしかなかった。
emacs lisp では今でもそう。
Common Lisp では (たぶん lexical closure のせいで)
quote と function は違うものになった。
ANSI Common Lispのlambda式は謎すぐる。
全体として関数名とみなされ、#'で対応する関数が得られ、
それとは別にlambdaマクロで関数が得られる?
もうschemeに帰りたい…
あんまり関係ないオペレータ間に関係を見出すのはどうかと思うなぁ。
(QUOTE object) => オブジェクトそのものを返す
(FUNCTION name) => カレントレキシカル環境の指定された名前の関数を返す。みつかんなかったらグローバル環境から探す。
だろ?
>>593のいうようなデリファレンスはSYMBOL-FUNCTIONを想像するなぁ。
>>595 俺もお前が謎すぐるので、もうSchemeに帰ってほしい…
>>594 その辺はemacs lispの方がわかり易いな。
ただemacs lispはCLの人の為に #' は残してくれてるよね。
中では多分同等にあつかってるとおもう。
(defun foo (fn) (funcall fn))
=> foo
(foo '(lambda nil 1))
=> 1 (#o1, #x1)
(foo (lambda nil 1))
=> 1 (#o1, #x1)
(foo #'(lambda nil 1))
=> 1 (#o1, #x1)
(foo (function (lambda nil 1)))
=> 1 (#o1, #x1)
#'1
=> 1 (#o1, #x1)
> #'1
> => 1 (#o1, #x1)
こいつはくせえ。ゲロ以下のにおいがプンプンするぜ。
CLでもlambdaマクロからは同じようなにおいがするけどね。
>>601 > こいつはくせえ。ゲロ以下のにおいがプンプンするぜ。
ちゃんと
>>600を読めよ。 emacs lisp では
' == #'
なんだよ。
603 :
デフォルトの名無しさん:2009/09/24(木) 12:39:45
> (defun foo (f) f)
FOO
> (defun fuga () (format t "test"))
FUGA
> (foo (fuga))
test
NIL
これって問題ないんですか?
funcallやapplyは不要??
(foo (fuga))と(foo fuga)を混同してない?
605 :
デフォルトの名無しさん:2009/09/24(木) 13:01:03
((lambda (x) x) (format t "test"))
どう違うかって、試してみればいいでしょ
608 :
デフォルトの名無しさん:2009/09/24(木) 14:58:15
> (foo fuga)
*** - SYSTEM::READ-EVAL-PRINT: variable FUGA has no value
変数の名前空間と関数の名前空間が違うということですね。
ということは(foo (fuga))ではfugaは代入されて実行されたわけではない?
引数にした関数をなかで実行したい場合はどうすればいいんですか??
610 :
デフォルトの名無しさん:2009/09/24(木) 15:10:06
ごめんなさい…
>>608 各 symbol には関数以外の値と関数の値(ポインターかコードオブジェクト)を
保持するスロットがある。名前空間が違うわけではない。
>>608 呼び出し元で function(#')またはquote(')、
呼び出し先でapplyまたはfuncallを使う。
>>611 > 各 symbol には関数以外の値と関数の値(ポインターかコードオブジェクト)を
> 保持するスロットがある。
それが名前空間が違うということなんじゃないの?
> 呼び出し元で function(#')またはquote(')、
たいていはどっちでもいいのだが
前者は関数定義そのもの、後者は関数名による呼び出しなので
別のものが呼び出される場合がある
> (defun fuga () (format t "test"))
fuga
> (setq fuga1 #'fuga fuga2 'fuga)
fuga
> (funcall fuga1)
test
nil
> (funcall fuga2)
test
nil
> (defun fuga () (format nil "test"))
fuga
> (funcall fuga1)
test
nil
> (funcall fuga2)
"test"
windowsで.sbclrcってファイル作れないよね
dot.sbclrcとかで代用できないの?
617 :
デフォルトの名無しさん:2009/09/24(木) 17:36:37
%HOME% 設定してるうちの環境ではふつーに読んでくれるみたい
;;; SBCL 1.0.29 on win2003
>>616 コマンドラインからつくれなかったっけ?
>>618 nt-emacs あたりで普通に作れなかったけ?
>>616 適当なファイル名で作ってから ren コマンドでリネームが常套手段
(human nanasino gonbe
((00-0000-0000 keitai)
(11-1111-1111 ie))
(("toukyouto chiyodaku nagatacho 1-1-1" jitaku)))
みたいなデータ構造を扱いたいと思っています
これってプロパティリストでは扱えないと思うんですが
アクセッサやフォーマットチェッカなんかを作ってくれるライブラリとかご存じないでしょうか
ちょっと良くわからないな。
> これってプロパティリストでは扱えないと思うんですが
内容によっちゃぁ、
(:type human :name (nanasino gonbe) :keitai 00-0000-0000 :ie 11-1111-1111 :jitaku "toukyouto ...")
とう形式で覚えて、入出力時に任意の表現でもいいんじゃないか。
> アクセッサやフォーマットチェッカなんかを作ってくれるライブラリとかご存じないでしょうか
どんなアクセサが欲しいのか?フォーマットチェッカはどんなデータをどうエラーにしたいの?
sbclよりECLの方が速いんだろうか
どうしてそう思ったのかスゲー気になるけど基本的にsbclの方が圧倒的に速いよ。
625 :
デフォルトの名無しさん:2009/09/27(日) 19:36:46
kwsk
天才が居ると聞いてやってきました
天気予報を見ていると「満潮」「干潮」の時刻まで画面に表示している。
干潮 (かんちょう) というと当然ながら浣腸を連想するわけだ。
肛門にぶっ挿して中に出すあれだ。
では満潮 (まんちょう) というと、もちろん差し込む場所は…
誤爆しました。 すまんこってす。
天才が居ると聞いてやってきました
>629
Lisperは変態の集まりだと思われかねないので
そのような誤爆には気を付けてくれた給へw。
>>632 > Lisperは変態の集まりだと思われかねないので
え、違うの?
マルチコピペ
ここまでテンプレってところですか
_, -―‐―- 、
/斗──= 、―-、\
/'´>‐‐──-\ ヽ`ニヽ
//// l ヽ ∨ヽ\
__〃 l | { ヽ | V-、/
く // │l ト、ノ ヽ \‐-! | トく \
//| l l |l┼匕_\|\ \ {_\| j l{ ヽ/}
</レV|ヽ小 ヾ心 \l〃⌒| 八ーW
// /| \ヽハ弋ヒ} , ::::::│/ / 从リ
/ /|__l | rfV \ ::: t=ー ァ // / `>、_ すまんコ!
∨ {ヘハヽト:!ハ\.> _`ー_,.イl/∨l / /\-、___
. ヽ从| | lヘn\ゝト、 7 :|八 '/ / ノ`'|lllレ│
| l人j {ヽミ :|二ニ二| / / |l斗' |\
{ ヽ `}\ ∨ ,' j '/ ォ<__/__ヽ、j _}
/ム , /}小\∨ r// / )><_|寸|/ /
/_|l`三彡ハ \∨l/ //「「|  ̄ _/
{/ \二イ `ーォ≧≦二ニ ≠ \>‐‐=彡'
| / / / / ハヽ │ `rー‐'´
l / 人く/イ| L_>、 /ヘ
`ー‐'´ / '/ | ! \ヽj/ / /^ヽ
r‐'´ ,' /j j ヽト、 / ノ\_
} / /// ∧ヽ /
ヽ. / /く/ │l\_> /
\_/ l │l /
|`ヽ{_ ノ { __/
| `ー┬┬-、(厂'ー'´/
| ,' / /
araneidaってどう?
hunchanroot使う人多いみたいだけど
clbuildが/home/myname/.sbcl/
以下にいろいろインストールしちゃうんだけど
/usr/share/common-lisp/
以下に変更する方法ないものだろうか
>>569 いまさらだし、ネタばれ読んでから作ったものですが、、、
(defun make-decode-hash (key-list)
(let ((d-hash (make-hash-table :size 47))
(bs-list (coerce "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'list)))
(dolist (x (append key-list bs-list) d-hash)
(or (gethash x d-hash)
(setf (gethash x d-hash) (pop bs-list))))))
(defun decode-google (key quest)
(let ((dec-hash (make-decode-hash (coerce (nstring-upcase key) 'list))))
(format t "~{~a~}~%" (mapcar #'(lambda (x) (gethash x dec-hash))
(coerce (nstring-upcase quest) 'list)))))
(decode-google "jobs" "8MLDQ6TUI6TFMLRHAANRA6Q8EFLDMQ86II2O32S5J13JXOJ")
この問題に関してなら、コンパイルなしでハッシュが使える言語なら、
何でも向いているといえそうな気がします。
640 :
デフォルトの名無しさん:2009/10/04(日) 09:55:07
Lispのハッシュってどれくらい早いの?
データが多くなければMySQLの代わりに使える?
速さで言えば充分に速いと思うけど、
MySQL (リレーショナルデータベース) の価値は速さじゃないからなぁ…
代わりに使えるかどうかという疑問には簡単には答えられない。 状況による。
>>640 お前バカか?
基本ハッシュテーブルの方が早いわ。
644 :
デフォルトの名無しさん:2009/10/04(日) 10:28:32
>>641-643 wikiで関係代数、関係論理の項目読んでみた。
無知でごめん。勉強になります。
>>643 MySQLのHEAPテーブルだったらオンメモリなハッシュテーブルみたいだから
あまり変わらんのでは?
>>645 いや基本遅いから。
いちいちこんな簡単なこと聞くなよ低能。
日本語のようだが意味が通じない
アフリカ人並の読解力だな
差別発言だな
アフリカ人の平均言語性IQが異常に低いのは事実であり、差別発言ではない。
Lisperの平均的社会性が低いのは分かった。
知能の低い人や頭のおかしい人は、変なタイミングで変なことをわかっちゃうからね。
この人なら、町内会のチラシ見て宇宙の真理とかもわかっちゃいそう。
そのチラシに第42回とか、42歳とか、42年目とか書かれていたのかもしれん
人生、宇宙、すべての答えが42だとしても、
42という数字がそうであると一瞬で確信できるのはやっぱりキチガイ。
655 :
デフォルトの名無しさん:2009/10/04(日) 20:35:14
(defmacro macro-test ()
(let ((g (gensym)))
`(eq ',g ',g)))
を評価して
>(macro-test)
を評価すると
T
となるのですが
>(EQ '#:G6575 '#:G6575)
を評価すると
nil
となるのはどうしてでしょうか?
>>645 マニュアル見ると、機能的には実装もハッシュぽいね。
これならあんまりかわらないのかも。
>>655 前者は gensym で作成されたシンボルが g にうめ込まれている。二つは同じシンボルなので比較するとT。
後者はリーダーが読む毎に別のシンボルを作成する。後者の場合はリーダーが読んだ結果は (EQ <シンボルA> <シンボルB>) でこの二つは別のオブジェクト。
SYNBOL-NAME で取得するとどっちも "G6575" がかえってくるだろうけど、別のシンボル。#: はこれを実現するためのマクロだからね。
この動作は CLHS 2.4.8.5 で規定されている。
658 :
655:2009/10/04(日) 21:53:02
納得しました.ありがとうございました.
windowsにsbclとcffiをインストールすると
うまく動くPCと動かないPCがある
何が違うんだろう
> マニュアル見ると、機能的には実装もハッシュぽいね。
苦笑い
今迄、これほど顕著になることはなかったけれど、
なんかこのスレの程度の低さが露呈されてきたようだな。
このスレッドには基礎的なデータ構造すら理解できていない人間が多すぎる。
でもそのレスだったら、このスレで一番程度の低い人でも書けますよ。
ハッシュテーブルを外部プログラムに任せる方が速いCL実装があるとは信じら
れないが、そんなことが分からない人間がこのスレにいることは信じるしかない
みたいだな。
>>664 Lisp脳は簡単な日本語も分からないのか?
どこにLispの実装より早いと書いてある??? はぁ????
666 :
デフォルトの名無しさん:2009/10/05(月) 22:12:13
脳細胞がリストとS式出来ているから無理は無いかwwww
Orz
>>640 ハッシュテーブルで済む用途にはハッシュテーブルを使ったらいいし、
RDBS が必要な用途にはそれを使えばいい。
機能が違うのに性能を比較するのはナンセンス。
ただのハッシュテーブルで済むことに MySQL を使ってたのだとしたら、
アホなことやってんなぁと思う。 そんな話。
どうしても速度が気になるなら自分がやりたい条件で実測しろよ。
あんまり汚い言葉ばかり使っていると、自分のきれいな部分が汚れていくよ
671 :
656:2009/10/05(月) 23:32:23
学生です…ハッシュつかったO(1)かと思ったのですが、違ったんですかね。
不用意な発言で荒れてしまい申し訳ありませんでした。
殺伐としてきたな。まあお茶でも飲んで落ち着け
旦旦旦旦旦旦旦旦旦旦旦/⌒ヽ旦旦旦旦旦旦旦旦旦
⊂二二二二二二二二二二( ^ω^)二二二二二二二二⊃ お茶が入りましたおー
| /
( ヽノ
ノ>ノ
三 レレ
∩ ダシャーン
ミ //
ミ ⊂'ヽ ∩ // \
ミ \\\\_,,,,,,,,/ ∠ /
\\\\ .,''.,':.',, .,':.',, .,': l .,':.',,|[]].,':...,
ガッ ) \\ ).,':.',,:.',, []] .,':.',,.,':.',,.,日 .,':.',,.,':.',, /
凵@ ⊂二二二、___ヽ \_,,..ノ /[]].,':',,:',[]]/[]]\[]].,':.',,|[]].,':.',, _ .,':.',,]]/ 日.,':.',,.., . ..,,,;:[]]
lispは初心者を大事にするような風潮がないようだね。
最初は間違うものだから頑張れ。頑張れ。
>>666 脳細胞がリストとS式で出来てるなんてうらやましい
全部weak pointerですが
頭を振ったらアトムが出てきたお
>>675 表現可能ってだけで、できているわけではない。
それにS式である必要もない。
リストはS式に含まれるから
単に(S式)か(アトムとコンスセル)かどっちかだな
lambda式を取り出す手段てありますか?
(lambda (...) ...)はマクロとして評価されて返ってくるのは関数ですよね。
直接lambda式をいじる、という状況はあまり思い浮かばないけど
なんとなく気になったもので。
>>679 M式って別の表現があることで分かるように、S式は印字表現だぜ。
>>680 #'(lambda (...) ...)のこと?
>>681 M式 … S式は印字表現
なにをば(ry
>>681 #'(lambda (...) ...)だと返ってくるのは関数ですよね。
ほしいのはその一段階前の状態です。
マクロとして評価されない(lambda (...) ...)と言えばいいのかな?
lambda はスペシャルフォームだお。
>>685 意図していたのはまさにそれです。ありがとうございました。
自分で聞いといて何ですが、どういうときに使うんでしょうね。
function-lambda-expression の返す lambda expression に関しては、
CLHSにあるとおり nil が返る可能性があるからねぇ。最悪常に nil でもいいわけで。
ほとんどの処理系で最適化の具合でなくなっちゃうから、ユーザーレベルでこれを
アテにするほうな利用法はあまり見かけないね。プリティプリンタ、インスペクタなどの
表示系で nil になったても致命的じゃない場所で使われてるのはたまに見かける。
>>684 節子、それcommon lispやない、schemeや
節子、ここにいたのか
defunのついでにdefvarで適当な名前の変数に関数定義のS式を格納しておくマクロでも
書けばいいんでねえか
>>687 なるほど。表示系が一番適切そうですね。
>>690 書き込み見て気づきました。
|
\ __ /
_ (m) _ピコーン
|ミ|
/ .`´ \
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(・∀・∩< lambda式ってただのS式?
(つ 丿 \_________
⊂_ ノ
(_)
>>690 defun特化なら、そのシンボルのsymbol-plistに加えた方がいいのでは?
ただdefun特化だと、無名のクロージャのfunction-lambda-expressionは取れないよね。
それからS式は印字表現だっての。
http://en.wikipedia.org/wiki/S-expression > The term S-expression or sexp (for symbolic expression) refers to
> a convention for representing semi-structured data in human-readable
> textual form.
Elisp辺りはobjectの意味で使ってるけど。
>>685-687 schemeだと、それがnilにならないの?
stalimもそうなのかな
Schemeは、ラムダ式の評価後の値は実装依存の何かだよ。
$ gosh
gosh> (lambda () t)
#<closure #f>
$ guile
guile> (lambda () #t)
#<procedure #f ()>
RDBSが必要な場面ってなんだろう
データがメモリーに入りきらないとき?
「リレーショナル」ってどういう意味かわかるよな?
データを別のプログラムやシステムと共有するとか、
冗長性を減らすとか、一貫性が必要な場合とか、完全性とか
セキュリティとか…いっぱいあるから RDBMS は勉強しとくといいよ。
あったよ。
701 :
デフォルトの名無しさん:2009/10/08(木) 13:35:12
Linuxに入れるclispをffi対応にしたいのですがどうすればいいのでしょう?
readlineとlibsigsegvはインストール済ですがffiもどこかから持ってくる?
configureするとこうなっています
Configure findings:
FFI: no (user requested: default)
readline: yes (user requested: default)
libsigsegv: yes
>>701 configure の時のオプションは何?
703 :
デフォルトの名無しさん:2009/10/08(木) 14:06:29
>>702 prefixでインストールディレクトリだけ指定しています
あと、configureではありませんが、srcディレクトリで
./makemake --with-dynamic-ffi
等も試してみました
705 :
704:2009/10/08(木) 17:00:25
ためしに clisp-2.41 でやってみた。libsigsegv などを /usr/local ではない所に
入れているので、./configure のときにちょっと書き足したけど、結果は以下の
通り。
Configure findings:
FFI: yes (user requested: default)
readline: yes (user requested: default)
libsigsegv: yes
ということで、バージョン依存でよさそう。2.47 だと FFI は no になってた。
"Land of Lisp"ってどうなんでしょうかね
ゲームを題材に、ってのは惹かれる
>>706 どうもアチラさんの絵のセンスは理解できない。
試み的には期待してる。
709 :
デフォルトの名無しさん:2009/10/09(金) 11:21:50
>704-705
>>707 インストールできました。ffcallという名前のライブラリだったんですね
ありがとうございます
>>711 ありがとうございます。
cvs ってのがイマイチよく分からなかったのですが、なんとか落としてみました。
;; tgz で固めたのでも置いてくれれば個人的には楽なんですけど、筋違いですね。
だよねーアーカイブ作れっての
cvsメンテしてる奴って完全にアホだよね
そんなもんアーカイブなんて作る意味が無いわ
古い話なのですが、私の環境でも
>>223と同じエラーがでて実行することができません。
どのようにすればいいのでしょうか?よろしくお願いします。
使用OSはWindows XPです。
>>715 俺んとこでは普通に動いたからなー
逆になんで動かないのかこっちが聞きたいw
ためしにデスクトップに解凍したら
>>223っぽいエラーがでた。
日本語も空白もないパスのときは普通に起動した。
718 :
223:2009/10/16(金) 23:10:51
>>717 うまく動作したよ。フォルダの問題だったんだ。ありがとう。
かなり速い。
? (time (tak 12 6 0))
(TAK 12 6 0) took 0 milliseconds (0.000 seconds) to run
with 2 available CPU cores.
During that period, 172 milliseconds (0.172 seconds) were spent in user mode
0 milliseconds (0.000 seconds) were spent in system mode
12
?
719 :
デフォルトの名無しさん:2009/10/18(日) 08:51:34
すいません、Windows、emacs23の日本語表示に関する質問です。
処理系はSBCLを使っています。
日本語を扱うため、色々調べた結果.emacsには以下の設定を書きました。
(set-language-environment "Japanese")
(set-terminal-coding-system 'utf-8)
(prefer-coding-system 'utf-8-unix)
(set-keyboard-coding-system 'utf-8)
(set-clipboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(modify-coding-system-alist 'process""'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8-dos)
(set-selection-coding-system 'utf-16le-dos)
(setq slime-net-coding-system 'utf-8-unix)
しかし、REPLで日本語を入力すると
decoding error on stream
#<SB-SYS:FD-STREAM for "standard input" {23B57741}>
(:EXTERNAL-FORMAT :SHIFT_JIS):
the octet sequence (130 10) cannot be decoded.
というエラーが出てきてしまって日本語が扱えません。
どなたか解決法を知っている方がいましたら教えて下さい。
まず日本語を窓から投g(ry とかできたらどんなに良いかとたまに思うが
新聞の今日の一句を見て思い直す
>>719 slime起動して
sb-impl::*default-external-format* と
sb-alien::*default-c-string-external-format*
の値を調べて、:utf-8じゃなかったら
Emacsのホームフォルダに .sbclrcというファイルを作って
(setf sb-impl::*default-external-format* :utf-8)
(setf sb-alien::*default-c-string-external-format* :utf-8)
と書きこんどく。
直らなかったら次の人頼む
721 :
デフォルトの名無しさん:2009/10/18(日) 11:08:53
>>720 レスありがとうございます。
しかし、そのように設定してもREPLで同様のエラーが出てしまいました。
ちなみに外部のテキストファイルtest.txtに対して
test.txt
----------
(12 23 あ)
以下を実行すると
(with-open-file ( in "test.txt")
(let ((word (read in)))
(format t "~A " word)))
(12 23 \202\240)
このように表示されてしまいます。
すごくたくさんエンコーディングを設定しているなぁ。
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
;; slime
(setq inferior-lisp-program "sbcl.exe") ; your Lisp system
(add-to-list 'load-path "~/.emacs.d/slime/") ; your SLIME directory
(require 'slime)
;(slime-setup)
(slime-setup '(slime-repl))
(add-hook 'lisp-mode-hook (lambda ()
(slime-mode t)))
(setq slime-net-coding-system 'utf-8-unix)
自分の設定はこんなだけど、utf-8で問題なく動くよ。
723 :
720:2009/10/19(月) 23:27:45
>>722 それと同じ設定にしてみてもダメでした。
Windowsからだと難しいようですね。
Linuxの環境を整えた後にまた挑戦してみます。
>>723 Windowsのインストーラは標準ではUTF-8の環境をインストールしてくれないので
インストール時に項目をチェックしてないのではないかな?
725 :
デフォルトの名無しさん:2009/10/20(火) 20:23:07
commonlispのオープンソースで金融関連のものってありませんか?
QuantLib のようなものを探しているのですが
726 :
722:2009/10/20(火) 20:50:16
>>723 ntemacs-23, sbcl1.0.29で、win xp, vista共に
UTF-8で使えているよ。
何が違うのでしょうね。
727 :
sage:2009/10/25(日) 13:31:35
Gauche-rfbのようなライブラリってCommon lispにありますか?
作ればあるよ。
Common lisp を勉強しようと思うんですが、「ANSI Common Lisp」か「実践CommonLisp」
どちらが初心者におすすめですか?
ANSI Common Lisp
実践CommonLisp
少ないんだから両方読め
733 :
デフォルトの名無しさん:2009/10/26(月) 08:28:26
ネットの入門サイト+On Lispで学んだ俺はそれを勧めてみる
>>729 ANSI Common Lisp の方がいいんじゃね。
古本屋にウインストンの本があったら、それもいいかもね。
735 :
729:2009/10/26(月) 16:28:55
皆さん、ありがとうございます。
両方買いますが、まずは「ANSI Common Lisp」の方で
勉強することにしました。
Practical Common Lisp をちょっとだけ読んでみた。
Lisper には当たり前の話なんだろうけど、テスト用の
データも S 式で用意するのね。これは簡単で良いね。
ウインストンは。。。 公共図書館で頼んでおけばそこになくても
他の図書館から借りてくれたものを貸してくれるよ。
みれば分かると思うけど、car/cdrを使わずにfirst/restでやってるから
当時のご時世がよくわかると思うよ。グレアムのANSI Common Lispのほうが
いいんじゃないの?
ウインストンの本は題材が今のと違って人工知能っぽいものや
数学っぽいものがあるんで、また違う角度からLispが楽しめるんじゃない?
う、うん……(´・ω・`)
grahamのOn Lispのflattenで(s式に含まれるatomを単純にリストアップする関数)
(flatten '`(,X Y))
を計算させると、
`(,X ,@QUOTE)
となるのですが、どうしてこうなるのか、どう考えればいいかよくわからないので
どなたか教えてください。
なお、flattenは
(defun flatten(x)
(labels((rec(x acc)
(cond((null x)acc)
((atom x)(cons x acc))
(t(rec(car x)(rec(cdr x)acc))))))
(rec x nil)))
です。
On Lispそのままのコードは、私もいくつか動かなかった
改良されたmetabangの人の関数がお勧め
clbuildで/usr/share/common-lisp
以下に各種アプリを入れる方法ないのでしょうか
744 :
デフォルトの名無しさん:2009/11/17(火) 08:50:05
>>740 えーとまず、back quote 式は read 時に、指定された通りのリストを構築する式に展開される。
`(,x y)であれば、たとえば scheme 風に(qq (unquote x) y)といった感じになるかもしれない。
ただし、この展開された式がどのようなものになるかは処理系に依存する。
で、これに'をつけると、その展開された式を quote したことになる。
'`(,x y) なら(quote (qq (unquote x) y)) とかになる。
それが flatten に渡されるわけだから、上記のように展開されていた場合には結果は (qq unquote x y) となる。
と、ここで話が終われば簡単なんだけれど、
repl に表示する式が(この場合での qq のように)back quote 式の展開形であると判断する手掛かりがある場合、
処理系によっては back quote 式に戻して表示しようとする。
しかし flatten の戻り値の場合には当然 back quote 式の展開形としては不適切なものになっているはずなので、
なにやらぶっこわれた back quote 式が表示されることになる。
どうぶっこわれるかは処理系依存。
>>741 実はダグホイトのLOL(Let Over Lambda)という本を読んでるんですが、
そこで、flatten関数にback quoteされた式を入れていて、一体どうなってるのか
だんだん分からなくなってしまったところです。
flattenは特別に難しい関数というわけではないので、back quoteの問題なのだと思います。
>>744 詳しい解説ありがとうございます。
私が使ってるlispはsbclなんですが、traceしてみると、途中、よくわからないですが(X '(Y))とかいうのをflattenしているらしく、これだったら(X QUOTE Y)となり、
最後によくわからないSB-IMPL::BACKQ-CONSというアトムをコンスしているようです、、。
試しに
(cons 'SB-IMPL::BACKQ-CONS '(X QUOTE Y))
を計算させると、
`(,X ,@QUOTE)
となります。
LOLの本でdefmacro/g!というマクロはflattenを使っていて、
このマクロにback quoteした式を入れているのですが、
なにかよくわからなくなってしまった、、、。
weblocksチュートリアルみると便利ですね
でもチュートリアルのそのままの説明で作ると一部ちゃんと動かないのがありますね
demoみるとちょっと泥臭いこともしているので、
本当に綺麗には書けないってことでいいんでしょうか
CLISP 2.42での質問です。
Emacsなどのテキストエディタを使わずに、、saveinitmem、clisp -M を
使いながら、対話形式での開発の使い勝手を試している所です。
関数をコンパイルした後でも、定義内容を確認する方法はあるのでしょうか?
[1]> (defun double(x)(* x 2))
DOUBLE
[2]> #'double
#<FUNCTION DOUBLE (X) (DECLARE (SYSTEM::IN-DEFUN DOUBLE)) (BLOCK DOUBLE (* X 2))>
Break 1 [3]> (compile 'double )
DOUBLE ;
NIL ;
NIL
Break 1 [4]> #'double
#<COMPILED-FUNCTION DOUBLE> <-- 定義内容が判らない
>>747 function-lambda-expression
[1]> (defun double (x) (* x 2))
DOUBLE
[2]> #'double
#<FUNCTION DOUBLE (X) (DECLARE (SYSTEM::IN-DEFUN DOUBLE))
(BLOCK DOUBLE (* X 2))>
[3]> (compile 'double)
DOUBLE ;
NIL ;
NIL
[4]> #'double
#<COMPILED-FUNCTION DOUBLE>
[5]> (function-lambda-expression #'double)
(LAMBDA (X) (* X 2)) ;
T ;
DOUBLE
>>748 有り難うございます。
まだまだ判らない事が多いので、On Lispを読了したら、一度体系的なLisp可燃本も読んでみます。
>>746 あれ?アパッチアップデートしたら普通に動いた
#+ecl
#+gcl
などの処理系ごとに違う処理をさせたい場合の書き方の解説どこかにないでしょうか
解説と言われても…
例えば式EをSBCLのみで使いたかったら
#+sbcl
E
と書けばいいし、SBCLでは使いたくなかったら
#-sbcl
E
と書けばいいだけでは。あとは
#+(or sbcl ccl)
とか
#+(and sbcl sb-thread)
なんてことも書ける。
ある処理系が#+の後に書いて受け付けるキーワードは、
変数 *features* をみればわかる。
そのくらいしか解説することないんだけど。
ありがとうございます
つまり、
#+foo
次の1つのリストだけが意味があるということなんですね
引数のlistの要素が同じかどうか調べる関数set-equalをsubsetpを使って書きました。
(defun set-equal (lx ly &rest lzs)
"Test equality of list as set."
;; !!TODO!! need keywords :test :test-not and :key
(let((r(and(subsetp lx ly)(subsetp ly lx))))
(cond((null lzs)r)
(r(set-equal lx (car lzs) (cdr lzs)))
(t nil) )))
この関数に:test :test-not :keyといったsubsetpに渡すキーワードを引数として渡せるようにしてやりたいと思っています。
単純に引数に書いてやればよいのですが、その場合にはsubsetpのキーワードのデフォルト値を調べ、
さらにtest test-notが排他になるようなコードを書いてやらなければならず、面倒くさいです。
簡単に書く方法は無いのでしょうか。
>>754 &rest でキーワードを受け取って subsetp に apply すればいいんじゃね
そうすると &rest で lzs を取ることができなくなるけど、
union とかと同じインタフェースになるだけだから悪くはないと思う
(defun set-equal (xs ys &rest keys)
(and (apply #'subsetp xs ys keys)
(apply #'subsetp ys xs keys)))
>>1の
>lispを使用してC#やJAVAの代替にするための方法(おまけ)
ってどこに解説があるんですか?
758 :
デフォルトの名無しさん:2009/11/27(金) 21:12:21
>>757 abcl使いがいれば そんなのがもっと増えるだろうが、国内にabcl使いはおらん。
;; (foo) が nil を返す場合エラーになるんだね
;; (consp nil) => nil だから
(destructuring-bind (x . y) (foo)
(cons x y))
ごめん、それだけ
多重バッククオートについてなんですが、内側のバッククオートが
さきに計算されなければならないのではないのでしょうか?
例えば、
``(,z)
はzに値がセットされていなければunboundエラーになるはずではありませんか?
しかし、sbclでは
`(,z)
となるのです、、。
>>760 quasiquote/unquoteのネストは内側から`と,の組み合わせを作っていき、できた組み合わせを
外側から展開していくことになるのだ。On Lispの16章にあるマクロを定義するマクロの例を
見るとよいだろう。
762 :
760:2009/12/08(火) 23:00:32
>>761 レスありがとう。
でも、理解できるまで時間がかかりそう、、。
sbcl, cmucl, clispで外部コマンド(ls, whichとか)を使うには、どうすればいいんでしょうか?
ググり方でも教えてください。英語資料でもいいです。よろしくお願いします。
ディレクトリ・ファイル操作はosicatで結構できるな。
使ったことないけどshelispというものもあるらしい。
sbclならsb-ext:run-program、cmuclならextensions:run-program で
外部コマンドが実行できる。こんな感じかな。
(with-output-to-string (so)
(sb-ext:run-program "/bin/bash" (list "-c" "which cal") :input nil :output so)
so)
英語で素直に common lisp external command などとググれば
色々出てくるぞ。
>>764 サンクス、ちょっとやってみます。
djbのpublicfile、動かなねえ。
766 :
デフォルトの名無しさん:2009/12/10(木) 00:29:27
Cuspがインストールできないんだけど
SBCLのバージョンが関係あるのか?
ってCuspって2007年で開発がとまってんだね
テンプレの情報が古くなってるので報告。
Clozure CLは日本語もきちんと使えるようになってる。
対応エンコードは、CP932、EUC-JP、Unicode系全般。ISO-2022-JP未対応。
内部コードはUTF-32。単純さと速度の関係で決めたそうな。
それと、対応OSも、Windows、Solaris/x86が増えた。
全部の環境で64-bit対応済。Windowsでもスレッドが使える。
WindowsやMac OSユーザは、使ってみるのもいいかも。
Clozure CL はフットプリントが小さいのが良いよね。
SBCLってそんなに重量級なの?
>>770 coreイメージがでかいんだよね
cclってプロセス起動でどれくらいだかしらないけどそんなに軽い?
;;;clispは軽いんだけど処理が重いorz
Windows版32-bitのCCLで、デフォルトのイメージが15.2MB、
カーネルが1.64MBだから、そこまで小さいわけじゃないと思う。
ECLがUnicodeをもっとちゃんとサポートしてくれれば、
SBCLとかとCLISPの中間くらいで、良い感じになると思うんだけどなー。
内部でUTF-32使ってるっぽいのに、I/Oではバイト単位でぶった切るとか、
エンディアンとかどうするんだ。external formatもサポートしてないし。
みたいなことを、ECLのマニュアル読んでて思った。
WindowsのCLISPでASDF-Installが動いたので報告。
port.lispで定義されているreturn-output-from-programに問題がある。
* formatの括弧が閉じてない
* 環境によるのかもしれないが、:waitがnilだと上手く機能しない
formatの括弧の閉じ忘れは、開発者が「直すぜ」と言いつつ放置中。
これで、tarの所で止まってたのが、動くようになるはず。
ちなみに、パスに空白が入ってると正常に動作しないのはお約束。
使いたいなら、cygpathとtarにパスを渡すところで「'」とかで囲んでやる。
Clozure CL /win で日本語は扱えますか?
エディタをUTF-8にして (setq a '日本語) にすると文字化けします。
? (setq a '日本語)
|ニ律ニ悽ネェ桍
>>773 サンクス。windowsでsbclだと上手くいくのにclispだと上手くいかなくて
困ってたんだ。試してみる。
ついでに、WindowsでClozure CLを使う場合、
1.4の現時点で付属のASDF-Installにはバグがあって、そのままだと上手く動かない。
ccl\tools\asdf-install\*.wx32fslを削除してから、
(push :win32 *features*)
(asdf:operate 'asdf:compile-op :asdf-install)
をして、ASDF-Installを再コンパイルしてから、.asdf-installに
#+(and :ccl :windows)
(in-package :asdf-install)
#+(and :ccl :windows)
(progn
;; 自分の環境に合わせて設定する
(setf *cygwin-bash-program* "c:/Cygwin/bin/bash.exe")
(export '*cygwin-bash-program*)
(in-package :asdf-install-customize))
とすれば、正常に動作するようになる。
>>776 -K オプションを追加したらutf-8で漢字も処理できました。
ありがとう。
サンデープログラマです。現在のLinux環境はUbuntuでsbcl+slimeを使っています。
珠玉のプログラミングを読んでいて、いろいろと考えさせられることが多かったです。
日本語を扱う際、UTF8はEUCの1.5倍のデータ量を使うようですが、大量の文字データ処理を扱うことも視野に入れているのであれば、
文字コードはEUCとUTF8をどちらを使ったほうがいいのでしょうか?
好きにすれば?
あと内部と外部で同じものを使うのか?
emacs23の内部コードがutfらしいけど
他もそれにあわせるといいことあるのかな
内部コードを気にする必要があるプログラミングって、
プラグインとかぐらいと思うが。
>>780 本当に大量データの場合はCと同じくバイト列として扱うよ。
>>783 処理系の内部コードのこと言ってるの?
それ以外にもプログラム上の内部コードってあるよね?
HTTPサーバ/クライアントみたいに、
受けてからデータの文字コードが分かるケースあるから、
byte arrayで受けて〜ってことは日常茶飯事かと。
日曜プログラマなら富豪的プログラミングしても誰も文句いわないよ。
正直、もうUTF-8以外の世話をしたくない。
激しく同意。
いろいろ問題はあってもみんなでUTF-8使ってれば解決策は出てくるよ。
場当たり的に符号を変えるよりはUTF-8で統一するのが一番マシ。
じゃぁ俺はまだまだ EUC-JP で行くから、頑張って沢山解決策を出しておいてね。
えっ・・・・
>>788 何文字目ってのがUTF8だとアタマから数えないといけないのでそういう状況が多いときは困る
なので内部UCS4とかがわりと好きかな。
UCS4 を使うという事は Unicode の正規化とか合字は考えないという事だよね。
俺もそっちの方が好き。
いろいろ諦めたら楽なのは当たり前のこと
諦めても困らない物は捨てた方が楽だね
(lambda(x)t)とか
(handler-case
...
(:no-error(condition) ....))
といった場合に変数が使われていないというエラーを抑制したいのですが
どうしたらよいのでしょうか
797 :
デフォルトの名無しさん:2009/12/22(火) 00:51:34
(lambda(x) (declare (ignore x))t)
(handler-case
...
(:no-error(condition)(declare (ignore condition)) ....))
798 :
796:2009/12/22(火) 01:20:38
>797
ありがとうございます
うまく行きました
昔、2chのdatを整理するプログラムをcommon lispで書いたけど
アスキーアートの頻出するスレで止まりまくりだった
今はだいぶましになったのだろうか
プログラムが変わってないんなら一緒でしょ
全角スペース+半角スペース
あるいはその逆が含まれているレスはAAと見てスルー
それが楽になれる
801 :
デフォルトの名無しさん:2009/12/24(木) 11:56:39
文字列をシンボル(というか変数名とか関数名)として評価するにはどうすればいいのでしょう。
(setq x 10)
(setq y "x")とやって、
(うんにゃら y)
とかすると10って出てほしいのですが。
(symbol-value (read (make-string-input-stream "x")))
関数ならsymbol-valueをsymbol-functionにすればいい。
使い方によるけど、文字列から変数の中身を直接触れちゃうと安全じゃない気がするから、
直接symbol-valueを見ないでhash-tableなりalistなりを使った方がいい気がする。
803 :
801:2009/12/24(木) 12:31:34
できました。ありがとうございます。
intern
explode
806 :
デフォルトの名無しさん:2010/01/01(金) 17:31:29
あけましておめでとうございます。
リストではなく多値を利用した方がいいのはどんな時ですか?
808 :
デフォルトの名無しさん:2010/01/03(日) 01:09:35
なるほど、ありがとうございます
809 :
デフォルトの名無しさん:2010/01/03(日) 20:47:59
clsqlで、変数に保存されているテーブル名から、select関数でselectする方法はありますか?
たとえば変数tablenameに"menberlist"というテーブル名が保存されていても、
(select * from tablename)とするとtablenameというテーブルからselectすると解釈されますよね?
queryはインジェクションが怖いので使わない方向で…
810 :
質問:2010/01/04(月) 15:36:21
(lambda (x) (> 5 x))
をこれ以上簡単にする方法は無いでしょうか?
質問の意味がよーわからんけど
(defun pa$ (f &rest c)
#'(lambda (&rest x) (apply f (append c x))))
とか作って
(funcall (pa$ #'> 5) 10)
ってやるとか?
812 :
質問:2010/01/04(月) 19:14:26
それ以上の回答が欲しかったら、他人に十分理解可能な形に質問し直さないとな。
814 :
質問:2010/01/04(月) 21:15:08
解決しました
よく解らんけど解決方法をここに書いとくと後の人のために役に立つんじゃまいか
816 :
デフォルトの名無しさん:2010/01/06(水) 15:25:23
C言語のgetch()をつかった簡単なリアルタイムキースキャンを
したいのですが方法はあるのでしょうか?
getchをffiするくらいならcl-sdlじゃだめなん
818 :
質問:2010/01/07(木) 10:22:50
継続を使わずに高速なコルーチンを実装する方法ってありますかね?
ubuntuでaptでcl-fooインストールすると
/usr/share/common-lisp
にインストールされるけど
asdf
clbuid
それぞれ違う方法でインストールするファイルを
別な場所に置くならどこが推奨ですか?
FreeBSD-8.0-RELEASEでSLIME 2009-08-08の上でSBCL 1.0.30を使っています。
sb-ext:run-programでsbclを起動して子プロセスにlispコードを流して制御したいと考え、
まず、
(setf sbcl1 (run-program "sbcl" '() :input t :output t))
(setf sbcl1 (run-program "sbcl" '() :input :stream :output t))
(setf sbcl1 (run-program "sbcl" '("--help") :output *standard-output*))
echo '(loop(print "hello")(sleep 1)' > /tmp/hello.lisp
(setf sbcl1 (run-program "sbcl" '("--script" "/tmp/hello.lisp") :output *standard-output*))
等としてみたのですが、すぐに#<SB-IMPL::PROCESS :EXITED 1>が帰ってきてしまい、
helpメッセージやhello.lispの出力も得られません。
どうしたらsbclからsbclをインタラクティブに操作することが出来るでしょうか。
821 :
820:2010/01/07(木) 18:30:35
ありがとうございます
少し調べたところ、どうやらプログラムをフルパスで指定しなければならないとわかり、
(setf sbcl1 (run-program "/usr/local/bin/sbcl" '("--help") :output t))
などとするとうまく行きました。ただ、Slime上で実行したのではcoreが見つからないらしく、
(setf sbcl1 (run-program "/usr/local/bin/sbcl" '("--core" "/usr/local/lib/sbcl/sbcl.core" "--script" "/tmp/hello.lisp") :output t))
としなければなりませんでした。M-x run-lispではcoreの指定をせずともよいので、Slimeがなにかしているんでしょうか。
また、このループするプロセスを終了させようと
(process-kill sbcl1 15)
としてみたのですが、Tは帰ってくるものの"hello"は出力され続け、他のターミナルからpsでプロセスを見ても子プロセスは生きたままになっているようです。
どうしたらプロセスを殺せるのでしょうか。また、子プロセスのI/Oを操作したいと思い、
(setf sbcl (run-program "/usr/local/bin/sbcl" nil :input :stream :output :stream))
としてみたのですが、Slimeでもrun-lispでもターミナルでもプロンプトが戻ってきません。
なにが問題なんでしょうか。
822 :
デフォルトの名無しさん:2010/01/07(木) 22:25:42
>getchをffiするくらいならcl-sdlじゃだめなん
具体的にはどうやればいいのでしょうか。
ちなみにWin 、メモ帳、clisp、コマンドプロンプトでやってます。
824 :
820:2010/01/11(月) 20:28:53
ありがとうございます。
どうやらプロンプトが戻ってこないのは、run-programの時に:waitがデフォルトでtになっているのが原因のようで、
(setf sbcl
(run-program "sbcl"
'("--core" "/usr/local/lib/sbcl/sbcl.core"
"--noinform" )
:search t :wait nil
:input :stream :output :stream ))
としたら上手くいきました。
ただこのままだと(read-char-no-hang (process-output sbcl))などとしたときにプロンプトも戻ってきてしまいます。
sbclの--noprintオプションを使うと出力を制御できるのですが、今度は何も出力されなくなってしまいます。
プロンプトの文字を変えるにはどうしたら良いんでしょうか。
>>824 何がありがとうございますなのか知らないが、
質問の仕方がどれも信じられないくらい下手だな。
メモ帳代わりに使ってるなら知らんけど。
他の人は君が知ってる前提を一切知らないんだから、
そこをはしょったら、当然だけど、話通じんぞ。
自分の文章、回答者の立場でもう一度読んでみなよ。
slime上で、Lispbuilder-sdlのサンプルを動かそうとしたのですが、
sdlの初期化の段階で
「Lisp connection closed unexpectedly: connection broken by remote peer」
とメッセージが返されてslimeとの接続が切れてしまいます。
Lispbuilder-sdlは、slime上では動かせないのでしょうか?
環境は、 OSX 10.6 + CarbonEmacs(2009-07-26) + slime (svn20100117)
+ sbcl(1.0.32) です。
Lispbuilder-sdlライブラリは、clbuildで今日インストールしたものです。
行おうとした操作は下記です。
--------------------------------------------
(asdf:operate 'asdf:load-op :cocoahelper) <--ここで「Lisp connection...」
が出てslimeとの接続が切れる
;; そのため↓を実行できない
(asdf:operate 'asdf:load-op :lispbuilder-sdl-examples)
(sdl-examples:BEZIER)
--------------------------------------------
上記の操作は、ターミナル上で ./clbuild lispして
実行すればきちんと動作します。
追加。*slime-events*バッファも参考になるかも。
SLIMEの通信ログが出力されてるから。
>>827 > *inferior-lisp*バッファには何か表示されてない?
「Process inferior-lisp trace/BPT trap」
と表示されていました。
> あるいは、Common Lisp側のバックエンドを手動で起動して、
> Emacsからはそれに接続するようにしてみたら、
> エラーメッセージとか拾えるんじゃないかと思うんだけど、どうだろう?
下記のようにして
$ ./clbuild lisp
* (load "/path/to/swank-loader.lisp")
* (funcall (read-from-string "swank-loader:init"))
* (funcall (read-from-string "swank:start-server") "/var/folders/B8/B8zxQQFbGsWSqD-hxDT5pk+++TI/-Tmp-/slime.17139" :coding-system "utf-8-unix")
バックエンド起動してから、
Emacsから、slime-connectで接続して
* (asdf:operate 'asdf:load-op :cocoahelper)
を実行したところ、バックエンド側に
* ./clbuild: line 415: 17419 Trace/BPT trap ${lisp} $common_options $eval "$require_asdf" $eval "$set_central_registry" $eval "$EXTRA_CLIM_FEATURES" "$@"
と表示がされていました。
これどんなエラーなのでしょうか?
>>829 SLIMEでのasdf:*central-registry*の値と、
clbuildでインストールされているライブラリの場所は?
どんなエラーなのかは、Mac OS X持ってないから分からない。
でも、全く同じ症状訴えてる人いるみたいだね。
>>830 > SLIMEでのasdf:*central-registry*の値と、
CL-USER> asdf:*central-registry*
((MERGE-PATHNAMES "links/docs/0114/clbuild/systems/" (USER-HOMEDIR-PATHNAME))
(MERGE-PATHNAMES ".sbcl/systems/" (USER-HOMEDIR-PATHNAME))
(LET ((ASDF::HOME (POSIX-GETENV "SBCL_HOME")))
(WHEN (AND ASDF::HOME (NOT (STRING= ASDF::HOME "")))
(MERGE-PATHNAMES "site-systems/" (TRUENAME ASDF::HOME))))
*DEFAULT-PATHNAME-DEFAULTS*)
> clbuildでインストールされているライブラリの場所は?
~/links/docs/0114/clbuild/systems
にasdファイルを置いています。
>>831 ありがとう、でも
問題切り分けのため、lispbuilder-sdlのみ
インストールしている状態なので、
lispbuilder-sdl-gfx関連は関係ないです。
>>832 Terminalからだと成功するんだよね?
それぞれの環境変数LD_LIBRARY_PATHの値は?
>>834 >
>>832 > Terminalからだと成功するんだよね?
はいそうです。
> それぞれの環境変数LD_LIBRARY_PATHの値は?
emacs上でもtermain上でも
LD_LIBRARY_PATHは定義されていません。
原因がある程度絞れました。
sdlにCFFIを使ってアクセスしているようなのですが、
emacsで
(cffi:load-foreign-library "/Library/Frameworks/SDL.framework/SDL")
を実行すると、*Messages*に「Process inferior-lisp trace/BPT trap」が
表示され接続が切断されることが分かりました。
terminal上では、きちんと
(cffi:load-foreign-library "/Library/Frameworks/SDL.framework/SDL")
#<CFFI:FOREIGN-LIBRARY {1003717241}>
となります。
おそらく、
(asdf:operate 'asdf:load-op :cocoahelper)
を実行中にcffi関連が呼ばれて、切断がされてしまうみたいです。
やはり、cffiが悪いみたいでした。
cocoahelperを読み込む時に、依存関係でcffiを
読み込むのですが、その際に
(cffi:use-foreign-library sdl)
が呼ばれて、slimeと切断されてしまうようです。
lispbuilder-sdl/cffi/library.lisp
-----------------------------------
(cffi:define-foreign-library sdl
(:darwin (:or (:framework "SDL")
(:default "libSDL")))
(:windows "SDL.dll")
(:unix (:or "libSDL-1.2.so.0.7.2"
"libSDL-1.2.so.0"
"libSDL-1.2.so"
"libSDL.so"
"libSDL")))
(defun load-sdl-library ()
(cffi:use-foreign-library sdl) <--ここで死ぬ
(when (handler-case (cffi:use-foreign-library sdl-glue)
(load-foreign-library-error () nil))
(progn
(setf *glue-loaded-p* t)
(pushnew :lispbuilder-sdl-audio *features*))))
(eval-when (:load-toplevel :execute)
(load-sdl-library))
-----------------------------------
新しいcoreつくってslime経由ではそっち使ってみるとかじゃだめなん?
cffiといえばmaximaからcffi呼ぼうとして苦労して結局できなかったな
iPhnoeとか、他のケータイでなんか遊べないんかな?
活用術みたいなのってない?
誤爆した
841 :
839:2010/02/02(火) 11:17:04
なんか活用術ないかな
Objective Lisp
#+sbcl
があるなら
#+amd64
#+i386
なんてもあるのかな
動いてるシステムが64bitか判定したいんだけど
自己レス
+64bit
だった
64bit linuxのsbclで
(require :cffi)
としたらエラーでまくる
clispはエラーなく動く
>>847 その出てるエラー書かんと。
SBCLは一番メジャーな処理系なんだから、
それでエラーが出るのは考えにくい。
あるいは、そういう状況なら各所で報告が絶対ある。
>>848 パッケージよみこむときに
ロック解除しますか
にYesじゃなくて
Accept
押してただけでした
すみません
リーダーマクロについて真面目に学んでみたいのですが
なにか良いマニュアルとかありませんか?
sbclのインタプリタで矢印キーを使いたいのですが「^[[C 」等の文字列が出てしまいます。
また、Lisp用に別のインタプリタは存在しないのでしょうか?(pythonのipythonのようなものです)
OSはubuntuを使っています。よろしくおねがいします。
>>853 素のターミナルから入力してんの?
どうせエディタのサポート無しでまともなものは書けないから emacs か vi 入れることをオススメする。
rlwrapを使え
Ubuntuならaptでおk
SLIMEもaptでいけるからEmacsわかればそっちのほうがいい
>>853 矢印キーを何に使うの?
履歴辿りたいだけなら、rlwrap使えばいいみたいよ。
IPythonみたいな環境が良ければ、Emacsをインストールして、
SLIMEを使えば良い。インタラクティブ開発の本家の実力を体感できる。
まあ、SLIMEが強力すぎて他の環境を試す気にもなれないんだけど、初めて
の人にEmacsはやっぱりきついのかもね。PLT-Scheme (Dr. Scheme)みた
いな環境がCommon-Lispにもあるととっつきやすいのかも知れないけど。
LispWorksやAllegro CLはよくできてるけどお高いし。
MacだとMCLIDEというのがあるんだけど、まだ発展途上なので今後に期待。
http://mclide.in-progress.com/
windows上のcclでexeを吐かせるにはどうすればいいですか?
自分もEmacsユーザだからSLIME使ってるけど
他に良い環境無いの?
人に勧めにくいなあ
>>857 Allegroは買えない値段じゃないんだけど、小売りしてないんだよ
個人購入する品物じゃ無いの承知の上で言うけどものすごく不便
なんで購入の意思をメールで送るところからせにゃならんのだ!
ちなみにLispWorksはよくできてるけどIDEから日本語入れると悲惨なので却下
emacs+slimeするって前提なら別なんだろうけど、それじゃ金出す意味がない
>>858 ccl:save-applicationを使う。
ttp://ccl.clozure.com/manual/chapter4.7.html#Saving-Applications save-applicationはLispシステムの状態をファイルに保存する関数。
このファイルに、Lispのコア部分を含めると、実行可能なバイナリができる。
(save-application "a.exe" :prepend-kernel t)
ただ、これだとエントリポイントがREPLで、大抵は不都合なので、
(defun main () (format t "Hello, world!"))
(save-application "a.exe" :prepend-kernel t :toplevel-function #'main)
みたいに、自分でエントリポイントを作って指定する。
ちなみに、一般的に、Lispシステムの状態を「イメージ」、
Lispのコア部分のことを「カーネル」というから、覚えとくといいよ。
実行可能なバイナリを作るとき以外でも、
例えば、大量のライブラリの読み込みが必要な場合、
読み込んだ状態をイメージとして保存しておけば、
起動時間を短縮できたりして、上手く使えば重宝するよ。
>>861 ありがとうございます
さすがLispスレの人は親切ですね
質問です
windows上のclispにasdf、asdf-installをインストールするまではできたのですが、
ためしに(asdf-install:install 'cffi)を実行してみたところ
WARNING: Cannot find tar command "C:\\PROGRA~1\\Cygwin\\bin\\bash.exe".
というメッセージが出て続けることができませんでした。
cygwinをインストールしてgpgとtarは用意してあり、windowsの環境変数のPATHに登録済みです。
で
質問は?
どうすればWindows上のClispのasdf-installでライブラリをインストールすることができますか?
>>864 bash が tar を見付けられんのだろ。
set MSYS=
俺が
>>773に、Windows上のCLISPで、
ASDF-Install使う方法書いてるのはスルーか。
でも、実際問題、Windowsでのこういう問題って至る所にあるから、
ある程度以上のスペックのマシン使ってるなら、
>>868の言うように、
VirtualBoxとかcoLinuxとかで仮想環境用意するのは良い案だよ。
ファイルのやり取りは共有かネットワーク使えばいいわけだし。
windowsの問題?
違うでしょ、プログラマの問題。
sbcl + slime on Ubuntu なんだけど、ライブラリの(複数の)パスの通し方ってどうするんだっけ?
/usr/lib/foo/
/home/taro/usr/lib/bar/
>>872 「Windowsでの問題」とあるのを「Windowsの問題」とか読まれても。
>>873 ASDFならasdf:*central-registry*。
requireの場合は、SBCLだと何かあるのかな?
公式のドキュメントにはそういった記述を見付けられなかった。
CLISPならcustom:*load-paths*、CCLならccl:*module-search-path*
とかあるみたいだけど。
876 :
デフォルトの名無しさん:2010/02/26(金) 19:55:57
読んだよ。
Lispエッセー集だと思っていればいい。
技術書としての価値を求めるタイプの本じゃない。
昔のLispの事情はいろいろ学べるけれども。
ちなみに雑誌「bit」に連載していた
TAO/ELISの記事の方が、技術色は強い。
まあCommon Lispの良書は今やたくさんあるから、
そういうのを読んでから、暇な時の読書として読む本。
>>878 Common Lispの良書を2〜3冊教えてください。
本自体がAmazonでもわかるぐらいしかないかもしれない
>880
>4-6
>>880 LOL,CLTL2,Practical Common Lisp
あとグレアム御大の書いたやつ
>>880 CLtL2とかOn LispとかPCLはオンラインで読めるから良いよ。
まさにそんな感じだな.
$cat hoge-draft.html
abcd
<!-- eewfsijflsjfs -->
eeee
<!--- eewfsijflsjfs --->
fjjfsj hoge
-------------------------
$cat hoge.html
abcd
<!-- eewfsijflsjfs -->
eeee
fjjfsj hoge
-------------------------
これってどうやればいい?
$ cat smb.conf | grep ^[^#].*$
smb.confだったら、こんな感じでコメント行をはずせるんだけど
初めての人のためのLISPってまたすぐ絶版になっちゃうのかなー
予防的に買っておくか・・・
>>888 amazonでも中古安いし、出たらまた下がるだろうし、
投機的に買うほどのこともないのでは?
>>889 カリカリチューンされたのが必要な人は、
まずライブラリを選んで、次に言語を選ぶから、
Common Lispになくても別に不思議はない。
相対的に得意だったのはMacLispの頃で、
今では不得意でもない程度のこと。
>>887 何をやりたいのか、良く分からない。
単に、行頭が「<!---」の行を省きたいってことなの?
それなら、一行ごとに正規表現でマッチを掛けて、
必要なものだけ出力すればいいと思うけども。
せめて、abcdとかeeeeとかの適当な文字列じゃなくて、
「本文」とか「ドラフトにだけ必要なコメント」みたいに、
意味の読み取れる文字列にして欲しい。
適正な注釈宣言(いわゆる「コメント」)は残して、<!-- コメント文 -->
不正なマーク宣言は除去していって事かな? <!--- 後ろのハイフン三つが問題になる --->
>>889 cffi使わないで単純にパイプでつないだ方がいいのかなと
思う今日このごろ
Webアプリケーションでもつくってみるかと思い立ち、Allegroserveを入れてみる
Allegroserveが実際に使われているWebサービスとかあったら教えてくらさい
別に宣伝じゃないけど?
どういうつもりでそんな事言ってるの?
いいかげん飽きた
アフィでもないしただの目次じゃねーか?
ひょっとして出版社に何か問題でもあるのか?
>>897
LISPスレでLISPの入門書の話をすることの何が問題なのか本気で分からない
>>901 Hunchentootは知らなかったな。ちょっとみてみます。
CL-HTTPもあるしCommon LispはWebサーバいっぱいあっていいね。
906 :
デフォルトの名無しさん:2010/03/05(金) 12:40:10
>>892 <!--- eewfsijflsjfs --->もコメントです。
hoge-draft.html に何かの処理をして、<!--- eewfsijflsjfs ---> のコメント部分を除いて、hoge.htmというファイルを作りたいのです。l
>>906 > <!--- eewfsijflsjfs --->もコメントです。
これは不正なマーク宣言です。(後ろの--->が問題になる有名な例)
>>887から帰納的にルールを推測すると、
>>892になります。
908 :
デフォルトの名無しさん:2010/03/07(日) 12:34:56
マルチスレッド対応でコンパイルしたSBCLをSLIMEと一緒に使っているとき、
.lispファイル中で C-x C-e でS式を評価すると、REPLから C-c C-c で処理を中断できない。
この場合どうやって処理を中断すればいいのでしょうか?
Multiple REPLを使うとか。
>>895 http://www.ranoba.com/ sbcl+aserve+clsql
aserveはURLでマッチングが使えないので、
すべて属性で渡す必要があるためURLがきれいにできない。
(/entry/0001 -> /entry?id=0001みたいな)
あとファイルのアップロードとかも独自実装しないといけないので面倒。
上にも張ってあったけど、日本語問題は簡単に回避できる。
Hunchentootはよく知らないけど、でかくて重くて煩雑で使いにくい印象だった。
>>883 PAPR
だったかそんな名前の本もなかった?
前に調べたらめっちゃ値段高くて買うのあきらめたけど
PAIPのことか?
913 :
デフォルトの名無しさん:2010/03/09(火) 00:15:57
おら「実践Common Lisp」読んで、何かウェブアプリさ作りたくなっただ
色々家の鯖で試してるけど、あっちでつまづいたり、こっちでつまづいたり
全然環境作りがなかなかすすまねーだ。
なんでCentOS5にClisp入んないの?
なんでDebianにApache2.2入れると設定ファイルとっちらかってるの?
なんでopenSUSEインストールしたらLANに繋がらなくなった?
んで考えたんだが、Common Lispで書いたプログラムを、コンパイルして
拡張子*.cgiにしてあげれば動くんでねーの?
まずがってるがぁ?
>>913 おれもミーハーなんで実践CLでWebアプリ作るぜーってなって作ったけど超大変だった。
なんかLispじゃない部分でつまづいてそうだが、
cgiは実は裏でコマンドを毎回実行してるだけなんで
起動自体が遅いCLだと超重いのでやめたほうがいいと思う。
外部ライブラリとかユーティリティーをまったく使わないならありかも知れないが
基本使うでしょ?asdfのプリントとかが出てきてやばいよw
まぁfastCGIつかったり、eclでコンパイルしたりすれば速いかもしんないけど、
フレームワーク使ってAPサーバ立てたほうがLisp的なことが
いろいろできるので楽しいと思う。
>>914 ECLもそうだけど、CLISPは普通に軽量級。
それと、重量級CLをCGIに使っても、コンパイルすれば、
起動時間含めてトータルでPerlとかより速かったりする。
とは言え、フットプリントが馬鹿でかいのは事実なので、
アクセスが集中するプログラムではお勧めしないけど。
ASDFについてはマニュアル参照。
(asdf:operate 'asdf:load-op 'foo :verbose nil)
それ以前に、ライブラリ読んだ後にダンプしたイメージを使う方が速いよ。
'("a" "b" "c")の様な文字列のlistから
"abc"というような形で全ての要素を連結した文字列を作りたいと思っています。
concatenateという関数が見つかったので、
&restにこのlistを渡せばいいのかと思うのですが
やり方が分かりません。どうしたら良いのでしょうか。
>>917 (apply #'concatenate 'string '("a" "b" "c"))
919 :
917:2010/03/09(火) 21:40:39
>918
ありがとうございます
うまく行きました
917は一冊本買って軽く学んだほうがいいぞ。
基本的なとこだけでも。
そういえば関数を定義するときにリストを引数にとって
(max '(1 2 3))
みたいにするか、あるいは
(max 1 2 3)
みたいに可変長引数をとるようにするかで悩むときがあるな。
後者の場合はリストに対して適用するときにいちいちapplyするのが面倒なように思える。
スタイルとしてはどちらが正しいんだろう。
>>921 「リストを処理する」というのが目的なら本質的には前者だろ。
後者は記法上の便宜が必要なときにそうする気がする。
>>921 前者で定義して、後者をユーティリティとして用意するに一票。
別にどっちでもいいけど。
クセの少ない処理系ってなにかな?
かーちゃんかな
「うー」とうなっただけで「ごはんたべる?」と聞いてくれる
>>926 なるほど、Allegro という手があったか。フリーのやつしか頭になかった。
ありがとん。
>>925 お前以外に対応してない可能性が高い。
部分最適化の極値で、むしろクセが強いと思う。
>>928 一瞬、ACLの話かと思ってからアンカー先に気づいてワロタ!
Mathematica はCLですか?
あ、どの言語で実装してるかって意味ならCみたいよ。
Mathematicaは、脱Lisp数式処理システムの象徴のような存在。
REDUCEとは違うのね
REDUCEは、数式処理&Lispの象徴みたいなもんだしね。
Starndard Lispを移植すれば、その上で動いた。
「初めての人のためのLISP 増補改訂版」の正誤表ってどこかにないですか?
p.171のマクロの説明のところが悲惨なことになっているんですけど。
え・・・
でるのがおくれたのって誤植を取り除いたりする時間がかかったんじゃないんだ・・・
そうなんですよね。
だからこの手の本の初版版は避けたくなっちゃう。
文芸作品なら初版マニアがいたりするんでしょうけど。
この本に2版があるかは分からないけど。
ノ´⌒`ヽ
γ⌒´ \
.// ""´ ⌒\ )
r‐、 i 彡 \ / .i ,-ァ
ヽ ヽ!_ 彡 (・ )` ´( ・) .Y -く
[i 6 ● (__人_) ●ト、/ 脱税〜はママの味〜♪
. ト-' 、 `ー' .ノ
> ___ <_
/ヾ ヽ ヾ ヽ\
/ | ◯ ̄ ̄ ◯ |/
>>939 第2刷が出る保証が無いから当日に買った。どっちが良いのかなぁ。
実践Commno Lisp も第2刷が出る気配はないし(これはオーム社だけど)。
竹内Lisp本はオヤジギャグ満載だとは聞いていたが
全編オヤジギャグでお送りするとは思っていなかった
抗体のある漏れですらこれはきつい
でもいいこと書いてあるっぽくて2度悔しい
(+ 3 5) は何か、とか好きだ
>>942 なにを今更なことを。
初版(復刊前の方ね)の時代ですらオヤジギャグだってのは知れ渡ってるじゃないか
;;;そこは目をつぶるべきなのか、著者の人柄を思ってニンマリするのかでちがうのだろうけど
初出が雑誌連載らしいからしようがないと思うが、
個人的には時代を感じるギャグ本としても面白い。
ただLispについて調べたい人がふと手に取ったとき、
「装填はしっかりしているのに……なぜ」と思った後、その本をどうするかは気になる。
装丁な
>944
Computer Todayの中でも浮きまくっていたけどな。 (Computer Today は bitをほんのちょっぴりアカデミックに振った感じだった。)
アカデミックに、というよりも理数系寄りに、って感じだろう。bitは工学寄り。
949 :
デフォルトの名無しさん:2010/03/24(水) 12:43:56
>>947 Computer Todayは編集方針が全くわからない雑誌。
同じ出版社の数理科学、日本評論社の数学セミナーの方が
よほど、しっかりしている。
それより、最後の頃ではない、マトモナ時代のbit(含む 増刊)を
共立はなんとか出してほしい
>>949 なんで共立出版ってPOD版に手を染めないのかな?
事情通の人いないかな?
老舗だからそういう新しいものへの対応はトロいんでしょ。
952 :
デフォルトの名無しさん:2010/03/26(金) 23:44:55
日本語で
「共通のリスク」語ってことなんだろうけど
この言語にはどんなリスクが内在しているのでしょうか?
rとlの発音だけにあきたらず、kとpの発音が区別できない人間に分類されるリスク
なんという二重苦
ニジューク
みんなのリスプ
ハイリスプ、ハイリターン
さあリスプざますよ
リスプでがんす
コモン☆リスプ厨はただちに巣に帰れ
961 :
デフォルトの名無しさん:2010/03/28(日) 17:15:13
ここCLのスレだが
そう、こもん☆りすぷのスレはここだ
こもん☆りすぷ = みんなが☆舌っ足らず
ちょっと意味わかんないです
>>963-964 Lisp には「舌足らず」という意味がある。
でも、 Common を「みんなが」とするのはちょっと無理あるんじゃね?
では「標準的な舌足らず」
意味分からんなw
ここのスレはもっと(((((こもん☆りすぷ)))))ってな感じで括弧が飛び交ってるのかと思ったら
案外普通の2chっぽくてホっとした
このスレの住人は、かっこつけたがりが多いからな。
あはは
(((ははっこれは面白い)))
このスレで括弧が見えないんなら、もう相当の熟練者だな
>>971 僕はあなたのレスの括弧が見えないのですが、これは僕があなたの仰る相当の熟練者だと言う事でしょうか?
括弧
()
カッコ
()
[]
なぜかpythonっぽくみえない
()ってなんだっけ
カッコの巣の上で
カッコつけすぎ
カッコってなに?
...かっこわるい