【入門】CommonLisp【質問よろず】at TECH
【入門】CommonLisp【質問よろず】 - 暇つぶし2ch200:デフォルトの名無しさん
05/01/04 08:18:14
>>196
完成って・・・
SOA対応でlispからSOAの手軽な実装方法とか出せたら、
今のC#とかJAVAに取って代われるかもしれないぞ?

201:デフォルトの名無しさん
05/01/04 23:09:04
>今のC#とかJAVAに取って代われるかもしれないぞ?
なんか今年の初夢みたいな話だな(笑

202:デフォルトの名無しさん
05/01/06 06:53:58
決心した。
ACL7.0を買う!!

203:デフォルトの名無しさん
05/01/06 07:02:20
>>202
俺にも(ヽ゚д)クレ

204:デフォルトの名無しさん
05/01/08 20:07:47
WINDOWS環境です。
CLISPのバイトコードをJAVAとかVC++から呼ぶことは出来ますか?
またCLISPからC++やJAVAを呼ぶことは出来ますか?

JYTHONみたいにJAVAのクラスをぞのまま呼べるCLの環境とか
ありますか?(これは流石にないか)

205:デフォルトの名無しさん
05/01/08 20:34:26
できません(バイトコードのフォーマットが違います)
できません(exeにすれば実行はできるかもしれません)
できません


206:デフォルトの名無しさん
05/01/09 01:36:21
ACL

207:デフォルトの名無しさん
05/01/09 02:06:49
>>204
Java と連携したいなら ABCL とか。
URLリンク(armedbear-j.sourceforge.net)
URLリンク(www.cliki.net)

JFLI が LispWorks 以外で動くのを気長に待つとか。
URLリンク(jfli.sourceforge.net)

;; どっちも使ったこと無いけど。

208:デフォルトの名無しさん
05/01/09 10:10:14
>>207
サンクス~~

つかjfliは凄くないかい?
ぱっと見はJYTHONを超えてるよ。
ま、見た目なんだが。

209:デフォルトの名無しさん
05/01/09 11:15:28
>>204
> またCLISPからC++やJAVAを呼ぶことは出来ますか?

これは,c++ のヘッダファイルを読んで defclass するってことですか?
c++ で作った共有ライブラリを clisp で呼ぶことはできますね (って知ってるかorz).

210:デフォルトの名無しさん
05/01/09 11:17:36
>c++ で作った共有ライブラリを clisp で呼ぶことはできますね (って知ってるかorz).

・・・・・・・・・知らないです。
CLISP歴2時間なんで.....orz

211:デフォルトの名無しさん
05/01/09 11:35:09
Java との連携なら、Bill Clementson の Blog にまとまってるよ。

URLリンク(lwn.net)
URLリンク(home.comcast.net)

Rich Hickey って素敵な名前だな。あやかりたい・・・。

212:デフォルトの名無しさん
05/01/09 14:07:07
Lispマシンについて興味あります。
ちょっとづつ調べているんですが、質問させてください。

1.Lispマシンは現在販売されているのでしょうか?

2.LispマシンはOSもLisp実装なのでしょうか?

3.趣味で作ってみたい(FPGL+VHDL)と思ってますが、
  同様に挑戦された方の記録をご存知でしたら教えて
  ください。




213:デフォルトの名無しさん
05/01/09 14:25:05
>>212
似た事をしている人なら居るよ。
URLリンク(common-lisp.net)

本物の Lisp マシンは GC を H/W でやってたらしいね。

214:デフォルトの名無しさん
05/01/09 16:36:56
URLリンク(pocket.free.fr)

これもある意味 LispM かな。ちょっと欲しいかも。

215:デフォルトの名無しさん
05/01/09 17:54:01
>>213,214
さっそくのレスありがとう。

>>213
GCもハードですか・・・
さすがLispマシンですね。

教えていただいたページを読んでみます。
英語・・・なので、読むの時間がかかりそうですが・・・(^ ^;

>>214
HPを見たのですが、Lispという記述がみつからなかった
のですが、ソフトはLispで実装されているのですか?


216:デフォルトの名無しさん
05/01/09 18:25:59
>>215
AI-1000 についてはここら辺を見て下さい。
URLリンク(www2b.biglobe.ne.jp)
URLリンク(www6.plala.or.jp)
URLリンク(jp.franz.com)

以前 Lisp スレで話題に上がっていた LispM エミュレータ。
URLリンク(www2.parc.com)
URLリンク(www.heeltoe.com)
(medley は Solaris で動きました。
URL はここ経由です。 URLリンク(lambda.s55.xrea.com))

217:デフォルトの名無しさん
05/01/10 11:22:37
>>216
わざわざありがとうございます。

2年位かけて自分だけのLispマシンを作るつもりです。
最終的にはハードも自作できたらいいなと思っています。

なにぶん初心者なので、まずは教えていただいたMovitzを
いじって簡単なOSをつくるところから始めたいと思います。

では、なにか成果がありましたらご報告します。


218:デフォルトの名無しさん
05/01/10 19:26:21
>>217
なんか、往年のX68000ユーザみたいなこと言うね。その姿勢は好きなんで頑張ってね。

219:デフォルトの名無しさん
05/01/11 23:17:57
MorphyOneの二の前になりそうな悪寒

220:デフォルトの名無しさん
05/01/12 00:39:53
失敗しても誰にも迷惑かからないんだからいいんじゃないの?

221:デフォルトの名無しさん
05/01/12 00:45:56
>>219
懐かしい…


222:デフォルトの名無しさん
05/01/13 12:29:28
>>187 ちゃんと括弧閉じろよ

223:デフォルトの名無しさん
05/01/13 18:31:13
>>219
>MorphyOneの二の前になりそうな悪寒

二の前は一?


224:デフォルトの名無しさん
05/01/15 19:36:40
lispでservletみたいなことってできないの?

225:デフォルトの名無しさん
05/01/20 06:38:16
>>224
余裕でできる。 aserve でググれ。

226:デフォルトの名無しさん
05/01/20 21:16:56
aserver落としてきた
でもコンパイルできない
faslが作れん
何故だ?

227:デフォルトの名無しさん
05/01/21 01:33:31
ぼうや(rya

228:デフォルトの名無しさん
05/01/21 07:01:25
>>226
aclはデモ版か?
(sys:update-allegro)とかちゃんとやっとけや(゚Д゚)ゴルァ!

229:デフォルトの名無しさん
05/01/21 22:42:08
updateしてんだけどなぁ。。。
何故かコンパイル中に強制終了する
やり方間違っていんのかなぁ?

230:デフォルトの名無しさん
05/01/22 00:39:16
226はaserverって書いてるけどAllegroServe(aserve)のことか?
「落としてきた」って書くからにはACL突っ込むと勝手にインストールされる奴じゃ
なくてPortable AllegroAserveをコンパイルしようとしてるってこと?
いずれにしても、処理系のバージョンとかプラットフォームとかどんな症状なのかとか
もちっと詳しく書けや。エスパー募集中ならそれも書いとけ。

231:デフォルトの名無しさん
05/01/22 04:32:22
>>230
環境はWinXPにACL6.2TrialでaserverはAllegroServeを落としてきた。
んで、faslがないからコンパイルしたら途中で異常終了する。

こんなところ。

232:デフォルトの名無しさん
05/01/22 06:58:02
型書いたらちゃんと最適化してくれる?
関数の入り口に型書いたらちゃんとその型以外はブロックしてくれる?
気になって夜も練れません

233:デフォルトの名無しさん
05/01/22 06:59:28
関数の戻り型ってどう書くの?
つーか書けるの?
こうして朝を迎えました

234:デフォルトの名無しさん
05/01/22 07:12:55
JAVAみたいにpackageってあるの?
ありそうなんだけど、書き方がわからない
自分で定義した関数や変数を自前のpackageに入れるってできますか?

235:デフォルトの名無しさん
05/01/22 08:46:33
>>232
> 型書いたらちゃんと最適化してくれる?
言語仕様上は要求されていないが、最適化してくれる処理系は存在する。

> 関数の入り口に型書いたらちゃんとその型以外はブロックしてくれる?
当て推量だが、あなたが意図しているようなのは通常の関数にはないかも。

ジェネリック関数は、引数の型による自動エラー報知機能を持っていると
考えてもいいかな。

普通にコーディングしていれば、型宣言をしなくても、予想外の型に対して
変なことをしようとすれば実行時にエラーとなり、コード上でそれを捕捉可能。
型宣言をしておくと、賢いコンパイラは、型やぶりな関数呼び出しだと推論
できたときは警告やエラーを発するものもある。たとえば(car 1)などね。



236:デフォルトの名無しさん
05/01/22 08:51:19
>>233 関数の戻り型ってどう書くの?
URLリンク(www.lispworks.com)
(declare (ftype (function (number) float) sine))


237:デフォルトの名無しさん
05/01/22 08:55:23
>> 234
> JAVAみたいにpackageってあるの?
Javaと同等なものかは分からないけど、パッケージはある。

> ありそうなんだけど、書き方がわからない
> 自分で定義した関数や変数を自前のpackageに入れるってできますか?
できる。英語が読めるんなら、最近はネットで入門書がごろごろしていると思うよ。


238:デフォルトの名無しさん
05/01/22 09:03:51
>>234
たとえば、「Practical Common Lisp」の
21. Programming in the Large: Packages and Symbols
URLリンク(www.gigamonkeys.com)
とかね。俺は読んで無いんで内容の保証はできんけど。

239:デフォルトの名無しさん
05/01/22 10:28:26
>>234
Lispのインタラクティブな環境でパッケージを移動して作業してみると、
パッケージってのが単なる名前空間って事が感覚として良くわかる。

240:デフォルトの名無しさん
05/01/22 17:37:47
>>231
acl 起動して
(require :aserve)
して、
c:\Program Files\acl62-trial\examples\aserve\examples.cl
をロードして、
(net.aserve:start :port 7777)
して、
URLリンク(localhost:7777)
を開く。

241:デフォルトの名無しさん
05/01/22 18:44:27
$599のACL7ってどの程度のものなんでしょうか?

個人でちょっと勉強がてらに使うことを考えているのですが?

めちゃくちゃ制限があるのでしょうか?


242:デフォルトの名無しさん
05/01/22 19:25:39
このスレの住人は、LISPでどんな「問題」を解いているんですか?
つーか、みんな院生?

243:デフォルトの名無しさん
05/01/22 19:26:46
Lispでお洗濯物問題とお夕飯問題を解決しました!

244:デフォルトの名無しさん
05/01/23 01:48:12
>>240
動いたよ~ありがとう♪
しかし、なぜfaslが作れなかったのか・・・

245:デフォルトの名無しさん
05/01/23 02:26:31
(defun func()(* 12 12))
func
(defpackage "my-package"
(:export "FUNC"))

funcという関数をmy-packageにexportしたいんですが、defpackageでエラー
になります。何が間違ってるんでしょうか??

246:デフォルトの名無しさん
05/01/23 09:21:45
>>245

CL-USER> (defpackage "MY-PACKAGE" (:export "FUNC")) => #<PACKAGE MY-PACKAGE>
CL-USER> (in-package "MY-PACKAGE") => #<PACKAGE MY-PACKAGE>
MY-PACKAGE> (defun func () (* 12 12)) => func
MY-PACKAGE> (in-package "CL-USER") => #<PACKAGE COMMON-LISP-USER>
CL-USER> (my-package:func) => 144
CL-USER> (func) -> undefined function FUNC [Condition of type SYSTEM::SIMPLE-UNDEFINED-FUNCTION]

247:デフォルトの名無しさん
05/01/23 09:23:55
246の続き。
CL-USER> (shadowing-import 'my-package:func) => T
CL-USER> (func) => 144


248:デフォルトの名無しさん
05/01/23 09:36:56
>>245 あっと、意図を汲み間違えた。cl-user::funcをmy-package内へimportしたいのね。
CL-USER> (defun func()(* 12 12)) => FUNC
CL-USER> (defpackage "MY-PACKAGE" (:import-from "CL-USER" "FUNC")) => #<PACKAGE MY-PACKAGE>
CL-USER> (my-package::func) => 144
CL-USER> (my-package:func) -> #<PACKAGE MY-PACKAGE> has no external symbol with name "FUNC"
[Condition of type SYSTEM::SIMPLE-PACKAGE-ERROR]
CL-USER> (export '(my-package::func) "MY-PACKAGE") => T
CL-USER> (my-package:func) => 144


249:デフォルトの名無しさん
05/01/24 03:32:45
>>248
ありがとうございます。出来ました。
これってC++とかのnamespaceと似たようなものと考えていいんでしょうか?
C++だと自作のutilityとかを

namespace my_util{.....}

とかしてるんですが、LISPでは作法的にどうなんでしょうか?

250:デフォルトの名無しさん
05/01/24 04:12:25
なんか初心者用に問題でも出してやればいいんじゃない?
一日一問でさ

251:デフォルトの名無しさん
05/01/24 06:42:26
lispのVMって無いの?
apatchでlispとか使えないのかな

(個人的にはACLとか大規模なもんじゃなくてclispやxyzzyとapatchが
連携できればいいのになぁ、と思っている)

252:デフォルトの名無しさん
05/01/24 07:47:09
>>249
C++のnamespaceと似た役割をします。
たとえば、mail.lispというライブラリを次のように書いたりします。
;;; file mail.lisp starts here
(defpackage "MAIL" (:export "SEND" "RECEIVE"))
(in-package "MAIL")
(defun send () ...)
(defun receive () ...)
;;; file mail.lisp ends here

mail.lispを使う側のパッケージでは特に何も宣言せずに、
mail:send、mail:recieveと書いてアクセスするか、
(use-package "MAIL")と最初に書いておく事で、単にsend, mailとして
アクセスできるようにします。もしくは (defpackage "FOO" (:use "MAIL")))など
としても、その後はパッケージFOO内ではsendとmailと書けます。

253:デフォルトの名無しさん
05/01/24 07:56:02
>>251 Unix系のOSなら、mod_lispというapatchモジュールが存在して、
CGIプログラムをLisp(cmucl, clispなど)で書いたりということが簡単にできるらしい。

Windowsに関しても、Windows用のバイナリがmod_lispの開発もとにあったから、
できるでしょう。たぶん。

254:デフォルトの名無しさん
05/01/24 10:32:14
JAVA初心者です
swingを使用して、clispを使用した開発環境を
作りたいと思っているのですが、swing側で入力したs式をclispに渡すには
どうすればよいのでしょうか?
また、clisp側での評価結果をswing側に返すには
どうすればよいのでしょうか?

ご存知の方いらっしゃたら教えてください
お願いします

255:デフォルトの名無しさん
05/01/24 12:37:12
Jabberwocky: javaで書かれたlisp IDE
URLリンク(jabberwocky.sourceforge.net)
Jabberwocky is a integrated development environment for the LISP programming language. The following components are available :
* A editor with syntax coloring and code completion.
* A interaction pane with the LISP process.
* A browser of the sources,functions,macros etc..
* A source level debugger (the successor of Lisp Debug).

JACOL: URLリンク(jacol.sourceforge.net)
JACOL is a framework for allowing Java and Common Lisp to interoperate. It's intended use is to enable Common Lisp to function as an extension language for Java. But, it can also be used to expose Java APIs (such as Swing and DOM) to Lisp applications.

256:デフォルトの名無しさん
05/01/24 15:07:03
>>253
mod_lispは外部のプロセスと通信する単なるスタブみたいなもん。
プロトコルを守れば、好きなLisp実装が使えるし、別にLispで無くたっていい。



257:デフォルトの名無しさん
05/01/25 02:26:20
>>250
ほい
スレリンク(tech板)l50

258:デフォルトの名無しさん
05/01/25 08:48:52
(ノ∀`)アチャー
自作自演乙

259:デフォルトの名無しさん
05/01/26 09:48:40
(defun func()
(setq a 0)(setq a(+ a 2)))
という関数を定義すると、
(func)->2
となります。ここまではいいんですが、次に
(func)->4
になります。
関数の中で定義した変数はstaticなんでしょうか?
関数ローカルな変数が初期化されないのが不思議です。

260:デフォルトの名無しさん
05/01/26 10:20:15
ククク・・・
どっか外のaが潰れてるだけだよ

261:デフォルトの名無しさん
05/01/26 10:58:51
>>259
Rubyかなんかと間違えてるのではなかろうか。
aは関数ローカルな変数なんかにならないよ。
そういうものが欲しければletを使って束縛しろ。

それはそれとして、2回目が4になるって変じゃないか?
何回やろうが0+2=2になるはずだが。


262:デフォルトの名無しさん
05/01/26 15:43:38
mapcanの選別収集以外の使い途があるとでもいうのですか?

263:デフォルトの名無しさん
05/01/26 19:28:14
複数リストの統合とか。

264:デフォルトの名無しさん
05/01/26 19:36:10
(mapcan #'list '(key0 key1 key2) '(value0 value1 value2))
=> (KEY0 VALUE0 KEY1 VALUE1 KEY2 VALUE2)


265:デフォルトの名無しさん
05/01/26 23:06:52
mapc ってマップクって呼んでOK

266:デフォルトの名無しさん
05/01/27 03:13:58
lispでプログラムを書けという課題がでました。
ωを自然数のリストとする。
MAX(ω)=0(ωがNILのとき) ωに含まれる最大の数
例ω=(8,13、25、10)のときMAX(ω)=25
組み込み関数
LESSTHAN(n,m)=T(n<m) NIL(n≧m)を使用すること。

もしよろしければ教えていただけないでしょうか?
どーも基礎がよくわかってないみたいで・・・

267:デフォルトの名無しさん
05/01/27 05:04:48
2chではなくて、学内のお友達と相談しながら
解決するのがよろしいかと。

268:デフォルトの名無しさん
05/01/27 09:16:18
(defun MAX (ω)
(if (null ω) 0
((lambda (n m) (if (LESSTHAN n m) m n))
(car ω) (MAX (cdr ω)))))

269:デフォルトの名無しさん
05/01/27 12:59:45
マクロって関数みたいに変数に代入できないの?

(defmacro macro()())
(setq m 'macro)
(a)->error

呼べないのかな

270:デフォルトの名無しさん
05/01/27 13:15:32
(a)->error 間違い×
(m)->error

271:デフォルトの名無しさん
05/01/27 13:17:39
(defmacro foo (x) `(car ,x))
(setq a (macro-function 'foo))
(funcall a '(foo a) nil) => (CAR A)

272:デフォルトの名無しさん
05/01/27 16:11:34
windowsで動くcmuclが完成したら、ソフトウェア業界は
変わる、と思っていますが正しいですか?

273:デフォルトの名無しさん
05/01/27 16:14:28
>272
実現可能性とシナリオは?
市場アクションは?

274:デフォルトの名無しさん
05/01/27 16:32:14
age

275:デフォルトの名無しさん
05/01/28 07:58:09
Clisp使ってます。
Clispってパイプありますか?

276:デフォルトの名無しさん
05/01/28 09:07:27
>>275
30.8.2. Pipes
URLリンク(clisp.cons.org)

277:デフォルトの名無しさん
05/01/28 10:27:48
>>273
ごめんなさい

278:デフォルトの名無しさん
05/01/29 19:30:21
(setq data '(1 2(3 4(5))))
(length 'data)->error
(length '(1 2(3 4(5))) )->3

なぜ・・・?データとしてはまったく同じリストだと思うんですが

279:デフォルトの名無しさん
05/01/29 19:49:12
(length 'data)のquoteが余分ですだ。だんなさま。

280:デフォルトの名無しさん
05/01/29 19:56:15
サンクスです
ということはlengthってマクロですか

281:デフォルトの名無しさん
05/01/29 20:26:28
>>280
ハァ?
シンボルにlengthを適用しようとしたからエラーになってるんだぞ?


282:デフォルトの名無しさん
05/01/29 20:42:35
そうか・・・勉強してくる

283:デフォルトの名無しさん
05/01/29 21:20:19
次の患者さんどぞ~

284:ウエシマ
05/01/30 08:23:10
毛が抜けるんですが・・・

285:デフォルトの名無しさん
05/01/30 10:13:31
抜けるだけの毛があったことに感謝なさい。

286:デフォルトの名無しさん
05/01/30 15:51:35
・おなにーを控える(多くても週一ぐらい)
・タバコをやめる(ただしやめることでストレス増加なら逆効果)
・2日に一回は頭を洗ってマッサージし頭皮を清潔にする
・生活リズムを整える(徹夜しない)
・風の強い場所に長くいない(そゆときは帽子着用)
・暑い場所に長くいない(タオルで小まめに汗をふき取る)
・ストレスを溜めず、感情的にならない
・水泳するときは帽子着用(プールの水は髪にあまりよくない)

287:デフォルトの名無しさん
05/01/31 10:50:36
コンパイルしたらJAVAのクラスになるようなCLの処理系って
ありませんか?

288:デフォルトの名無しさん
05/01/31 22:54:47
Allegro JILとLinjくらいしか知らない。他にもあるんだろなぁ、Lisperは何でも作っちゃうから。

289:デフォルトの名無しさん
05/02/01 11:26:22
>>288
ありがとございます
Allegro JILとか機能的に便利だけど、金かかるのか。。。
買うしかないかなぁ


290:デフォルトの名無しさん
05/02/01 20:54:30
そろそろでつね。行く人れぽよろ
URLリンク(jp.franz.com)

291:デフォルトの名無しさん
05/02/02 20:10:19
xyzzyでLispモードを使用する時、Lispの予約語の
インテリセンスってどうやればよいのでしょうか?


292:デフォルトの名無しさん
05/02/02 20:11:27
誰かtuareg-modeをxyzzyに移植してください

293:デフォルトの名無しさん
05/02/02 20:31:44
>>291
Lispには予約語はありません。


294:デフォルトの名無しさん
05/02/02 20:45:30
(defun foo()())
<foo>
(undefun 'foo)
<undefun-foo>

のような一度defunしたものをリリースするundefunのような
関数ってCLにありますか?

295:デフォルトの名無しさん
05/02/02 20:51:48
intern
unintern

296:デフォルトの名無しさん
05/02/03 00:02:20
>>293
()は予約記号。

297:デフォルトの名無しさん
05/02/03 01:00:32
ちゃんとした処理系なら括弧もリーダーマクロで変えられるんじゃなかったか
m4みたいに

298:デフォルトの名無しさん
05/02/03 22:13:49
CLにはJAVAのHashMapみたいなものはありますか?

(hashmap obj "KEY" "OBJECT")

みたいな

299:デフォルトの名無しさん
05/02/03 22:35:42
JAVAのHashMapとやらの機能を教えちくり。

300:デフォルトの名無しさん
05/02/03 23:09:12
HashMap hobj = new HashMap();
String key "KEY";
String object = "OBJECT";
hobj.put(key,object);
System.out.println( hobj.get(key) );//"OBJECT"が表示される

こんなんです

301:デフォルトの名無しさん
05/02/04 00:14:26
ハッシュテーブルあるよ。
データ構造でなくJavaのHashMapが質問に出てくるところがなんだかなー。


302:デフォルトの名無しさん
05/02/04 00:46:59
一旦定義したメソッドに引数を追加して定義しなおそうと思ったら
Attempt to add the method
#<STANDARD-METHOD ほげほげ> to the generic function
#<STANDARD-GENERIC-FUNCTION ほげほげ>, but the method has
"more" optional arguments than the generic function.
と怒られてしまいます。開発中にいちいち処理系を起動しなおすのはかったるいので
なんとかならないかと思うんですが、どうすりゃいいんでしょ。


303:デフォルトの名無しさん
05/02/04 08:30:38
>>302 ANSI CLのdefgenericの説明では、defgenericの:methodオプションで定義した
メソッドと、defmethodで定義したメソッドは区別されるみたい。
defgenericの場合はラムダリストを変更して再定義することが許されている様子。
GNU CLISPではエラーになったけど。CMUCLでは可能。

(defgeneric foo (a b) (:method (a b) (list a b))) => #<GENERIC-FUNCTION FOO>
(foo 1 2) => (1 2)
(defgeneric foo (a b &optional c) (:method (a b &optional c) (list a b c))) => #<GENERIC-FUNCTION FOO>
(foo 1 2 3) => (1 2 3)

あとは、find-methodとremove-methodでメソッドを削除してからdefgenericとか。

304:デフォルトの名無しさん
05/02/04 14:09:51
ふむふむ。
今度はfind-method/remove-methodでやってみます。
今まではシンボルごとuninternしちゃってました。
どうもありがとうございました。


305:デフォルトの名無しさん
05/02/04 16:10:05
継続って何ですか?

306:デフォルトの名無しさん
05/02/04 16:11:50
>>305
テンプレ嫁
スレリンク(tech板)

307:デフォルトの名無しさん
05/02/05 22:42:02
lispで簡単(テキストファイルの送受信程度)なネットワークプログラム作りたいのですが、
その辺の情報の載ったサイトとか本ありませんか?

308:デフォルトの名無しさん
05/02/05 22:56:09
perlでも使えよ

309:デフォルトの名無しさん
05/02/05 23:06:09
まずは処理系のマニュアルを眺めてみるのがよろしいのでは。


310:デフォルトの名無しさん
05/02/06 17:36:15
CLISPでMOPがサポートされtらしいのですが、
どうやって使うものなんでしょうか?

311:デフォルトの名無しさん
05/02/06 18:48:22
MOPってMeta Object Protocolのこと?
もしそうなら使い方がわからない時点で貴方には必要のないものだと思うのですが。
AMOPは読破・理解されましたか?

312:デフォルトの名無しさん
05/02/06 21:10:14
>>310 MOPはオブジェクトシステム(CLOS)をカスタマイズするときに使います。
CLOSを実装するのに必要となる、ある程度の動作が規定された一連のジェネリック関数が存在し、
それらのメソッドを独自に定義することにより、カスタマイズを行います。
たとえば、永続化をサポートしたオブジェクトをシステムに組み込むなんて
ときに使うこともあれば、CLOSに標準化される前の古いオブジェクトシステムを
エミュレートしたりするときに使うこともあるでしょう。

MOPの仕様は公開されているので読んでみてはいかが?
URLリンク(www.lisp.org)

313:デフォルトの名無しさん
05/02/07 20:28:56
dylanという言語は素晴らしい。
Lispより素晴らしい。
何よりIDEが素晴らしい。

と、言語マニアな友人が言っていた。
マジかぁ?

314:デフォルトの名無しさん
05/02/07 23:04:49
>>313
>dylanという言語は素晴らしい

dylanって何?

315:デフォルトの名無しさん
05/02/07 23:44:28
まあマカの言う事だし

316:デフォルトの名無しさん
05/02/07 23:58:42
ぬるぽぅ?

317:デフォルトの名無しさん
05/02/08 21:35:26
>>314

dylan
スレリンク(tech板)

318:デフォルトの名無しさん
05/02/13 16:57:45
append という関数について質問なのですが、
(append '(1 2) '(3 4)) => (1 2 3 4)
仕様では前半の '(1 2) は新しいセルを作って内容を
コピーするらしいのですが、なんで前半の最後を後半の
最初に繋げるだけじゃ駄目なんですか?


319:デフォルトの名無しさん
05/02/13 17:37:26
CL-USER> (setf x (list 1 2))
(1 2)
CL-USER> x
(1 2)
CL-USER> (append x (list 3 4))
(1 2 3 4)
CL-USER> x
(1 2)
CL-USER> (nconc x (list 3 4))
(1 2 3 4)
CL-USER> x
(1 2 3 4)
CL-USER>

320:デフォルトの名無しさん
05/02/13 18:26:58
319を見て318はダメな理由が思いつくかしらね、と。

321:デフォルトの名無しさん
05/02/14 08:40:44
>>318
> なんで前半の最後を後半の最初に繋げるだけじゃ駄目なんですか?
それにはnconcという別の関数が用意されている(「駄目」とかじゃなく
別々の使い方に対応するためにappendとnconcが用意されている)。

なぜappendが現在の仕様になっているかというと、
あるリストを参照している変数や自分の一部として参照しているLisp objectは
複数存在する可能性があって、そういうリストを1つの参照元が勝手に変更すると、
そのリストが変更されるとは想定していない別の参照元で混乱が生じるときがあるため。

(setq x (list 1 2)) => (1 2)
(setq y (cons 0 x)) => (0 1 2)
;; yが参照しているリストは勝手に変更されないとプログラマーは想定しているとする。
(setq z (nconc x '(3))) => (1 2 3)
y => (0 1 2 3) ;; えっ! (0 1 2)と変わっとるやないけ!

なぜnconcが用意されているかといえば、appendより速度、空間的なコストが安くあがる
可能性が高いため。

こんなんでどうでしょう?

322:デフォルトの名無しさん
05/02/14 08:44:13
上の例での動作がプログラマが望むものであるときもnconcを使うよね。

323:デフォルトの名無しさん
05/02/14 11:20:10
>>318
> (append '(1 2) '(3 4)) => (1 2 3 4)

'(1 2), '(3 4)は定数なのでテキストセグメントなど変更できないメモリ領域に
とられる可能性がある。そうするとappendの代わりにnconcを使って前半のリストを
変更すると、bus errorで落ちる。


324:デフォルトの名無しさん
05/02/14 23:28:54
気味が悪いくらい皆親切だな。何かあったのか?

325:デフォルトの名無しさん
05/02/14 23:30:05
>>324
実は童貞だけどチョコレートもらえたんだ。

326:デフォルトの名無しさん
05/02/24 23:09:02
ML使いの香具師いる?

327:デフォルトの名無しさん
05/02/25 00:41:40
MultiLanguage

328:デフォルトの名無しさん
05/02/27 13:28:46
>>326 Ocaml ならちょくちょく使うよ.

329:デフォルトの名無しさん
05/02/27 16:41:12
(setq n '(func foo))
n
(defmacro macro(x)
`(defun ,(car x) (y)
(print y)
)
)
このマクロがエラーになるのですがどうしてでしょうか?
`(defun ,(car n) (y) (print y))
これと同じ事をしているつもりなんですが・・・

330:デフォルトの名無しさん
05/02/27 17:35:58
自己解決しました
お騒がせしました

331:デフォルトの名無しさん
05/03/01 20:56:04
引数がアトム型なら"atom"、そうでなければ"false"と表示するマクロを
作成したいんですが、

(defmacro macro(x)
`(if,(atom ,x)
(print "atom")
(print "false")
)
上のようなマクロで動くんですが、
展開したときに
(macroexpand-1 '(macro 'a)) -> (print "atom")
となるようしするにはどうすればいいんでしょうか??

332:デフォルトの名無しさん
05/03/01 22:23:19
ifを外側に出せばいいのでは。
`(print ,(if (atom x) "atom" "false"))

333:デフォルトの名無しさん
05/03/01 22:32:27
(if (atom x) '(print "atom") '(print "false"))

334:デフォルトの名無しさん
05/03/02 01:15:22
>>332>>333
ありがとうございます。

マクロは凄い機能ですね、昔C++でどうしてもできなくて挫折した
機能をわずか数行で実現できました。

335:デフォルトの名無しさん
05/03/02 03:02:22
scheme と common lisp ってどのくらい違うのでしょうか?
なにが決定的に異なるかでもいいですが。

schemeを覚えたからといってcommon lisp のプログラムがかけるとか、そういうことは無いのですか?

336:デフォルトの名無しさん
05/03/02 03:30:08
|← これくらい →|

337:デフォルトの名無しさん
05/03/02 04:14:03
>>355
個人的には、最初にぶつかる大きな違いは
define-syntax と defmacro の違いかなあと思います。

call/cc は……scheme で call/cc 使いこなせるくらいになったら、
common lisp の特殊形式諸々で何とかできない……のかなあ。
私は call/cc 使いこなしてるわけじゃないので何とも。
clos も plt やら gauche を使えば、まあ、それなりに、て気もするし。

名前空間辺りは、好みはあっても、基本的にはすぐに慣れるでしょう。
たまにうっかり #' 付けたり付け忘れたりしますけど。あと funcall とか。

まあ、scheme やってればすぐ common lisp で書けるようなるかっていうと、
やっぱり慣れるのに時間は必要でしょうけれど、やってないよりは遥かに楽に入れるとは思います。

338:デフォルトの名無しさん
05/03/02 05:25:45
call/ccなんて使わない奴は全く使わないでしょ

339:デフォルトの名無しさん
05/03/04 17:44:07
lispで正規表現ってできますか?
Clispでうありたいんですけど。。。

340:デフォルトの名無しさん
05/03/04 18:57:18
>>339
はいな。
URLリンク(clisp.cons.org)

341:デフォルトの名無しさん
05/03/04 19:01:02
>340
さんくすです

342:デフォルトの名無しさん
05/03/05 12:43:02
>>337
schemeな人が「Lisp?(プゲラ」みたいなことよく言ってるけど、
こうしてみると、別にそれほどLispが劣ってるようには見えないなあ。
大して違わないじゃん。

343:デフォルトの名無しさん
05/03/05 13:31:47
趣味でいやなことやんなくていいときはScheme
仕事で泥臭いことも泣く泣くやらなきゃいけないときはCommon Lisp
フリーソフト作ってみんなに自慢したいときはEmacs Lisp

344:デフォルトの名無しさん
05/03/05 14:56:15
別に泣く泣くとか泥臭いとか言うほど違わないじゃん。
ちっとも泥臭くない。

345:デフォルトの名無しさん
05/03/05 16:46:25
>>343
仕事で泣く泣くCommonLispなんて選択する奴いるのかね。

346:デフォルトの名無しさん
05/03/05 17:31:16
こんなこと言うと怒られるかも知れんが、
lispとschemeで相違点あるのか?
ほとんど同じようなもんじゃないのか?

347:デフォルトの名無しさん
05/03/05 19:10:12
それ以上はスレ違い
このスレ、なんのために立てたんだ?

348:デフォルトの名無しさん
05/03/05 19:11:19
>schemeな人が「Lisp?(プゲラ」みたいなことよく言ってるけど、
どこで言ってたのか教えてくれよ(プゲラ

349:デフォルトの名無しさん
05/03/05 20:39:24
正直言って Scheme の define-syntax はいまいち馴染めん。
call/cc も catch/throw で代用できるケースしかあまり使わない。
(そうでないケースで使うと極端に効率の悪い処理系もある)
srfi の実装も結構まちまちで、ポータビリティを考えると結構めんどくさい。

ってなわけで、最近は Scheme より Common Lisp を使うことが多いね。

350:デフォルトの名無しさん
05/03/05 23:32:23
Lisp と Scheme を比較って、意味がわからんぞ。

Lisp
 +- Common Lisp
 +- Scheme
 +- Emacs Lisp
 +- その他の Lisp 方言
 :

351:デフォルトの名無しさん
05/03/05 23:48:15
LOOPマクロが嫌いな奴はみなSchemeに流れたよ

352:デフォルトの名無しさん
05/03/06 00:01:58
>>350
このスレの流れは >>335 から派生しているのだよ。

353:デフォルトの名無しさん
05/03/06 00:40:06
>>351
あぁ、あれか。あれは Common Lisp 派の漏れでも醜いなと思う。
CLtL2 を読んだとき目を疑ったよ。Common Lisp の汚点だ。w
漏れ的にはループは do がデフォかな。loop は無条件繰り返しのときだけ使う。

354:デフォルトの名無しさん
05/03/06 00:44:47
>>349
CommonLispにだってperlやrubyみたいな単一の実装があるわけじゃないんでしょ?
だったらポータビリティの問題はschemeとかわらないんじゃない?


355:デフォルトの名無しさん
05/03/06 00:54:25
んなこたあない

356:デフォルトの名無しさん
05/03/06 00:57:40
>>354
Common Lisp なら言語で定義されている範囲で済むことでも、Scheme の場合は
ちょっとした便利関数でも R5RS では定義されてないから結局 SRFI のお世話に
なってしまう。そのときの処理系間のばらつきが割と大きいように思えるということ。
別に Scheme が嫌いなわけじゃないよ。念のため。

357:デフォルトの名無しさん
05/03/06 01:26:26
Schemeってモジュールやオブジェクト指向といった、現代のプログラミングでは
欠かせない重要なことすら処理系依存じゃん。
そういうのは嫌なとこだよね。

358:デフォルトの名無しさん
05/03/06 06:10:36
SRFIでライブラリの標準化を進めるのはいいが、
定義された関数仕様が気に入らない
マクロ覚えたて厨が考えたみたいなマクロとか、
どこぞの処理系の実装そのまんまとか

ところで、ここはCommonLispスレじゃなかったのか

359:デフォルトの名無しさん
05/03/06 11:49:49
まぁ対比することで Common Lisp の良さが見えてくることもあるからいーじゃない。

360:デフォルトの名無しさん
05/03/06 20:03:24
ところでおまいらどの処理系使ってる?
ちなみに漏れは CLISP だが。

361:デフォルトの名無しさん
05/03/06 20:27:09
ACL trial

362:デフォルトの名無しさん
05/03/06 22:20:39
やっぱりemacsかな
日本語とデバッガと独自関数の便利さから。
しかしcommon lispと結構違うのが痛い。
日本語と環境(デバッガ)とフリーという三つの条件入れるとこれしか選択肢ないんだよな。
Schemeは全滅。

363:デフォルトの名無しさん
05/03/06 22:51:10
>>362
最近の CLISP は GNU libiconv 使ってて国際化は結構充実しているっぽいよ。
URLリンク(clisp.cons.org)

364:デフォルトの名無しさん
05/03/07 05:40:28
clispいい。
eclipseみたいな環境があればもっといい。
エディタは飽きた。

365:デフォルトの名無しさん
05/03/07 09:20:21
CommonLispではまともなのはCLISPしか選択肢ないよな。
環境が多少悪いかもしれないけどこれしかないんだから
我慢するしかない。

366:デフォルトの名無しさん
05/03/08 06:21:06
そうか、CLISPはIDEがないのか。
JAVAでさくっと作ってみるかな。。。

367:デフォルトの名無しさん
05/03/08 12:36:51
こんなのどーだ。使ったことないけど。
URLリンク(ciapek.uci.agh.edu.pl)

368:デフォルトの名無しさん
05/03/08 20:00:20
>>367
使ってみたけど、なんか意味あるのかこれ?
デバッガと言ってもインタプリタがそのまま出てきただけだったぞ。

369:デフォルトの名無しさん
05/03/08 20:10:19
SLIME じゃダメですかね

370:デフォルトの名無しさん
05/03/08 20:31:32
Lispがそんなに生産性高いならIDEくらいさっさと作れるはずだな。

371:デフォルトの名無しさん
05/03/08 20:41:17
slimeってclispで動いたっけ??

372:デフォルトの名無しさん
05/03/08 20:53:58
>370
ACLはACLで出来ている

373:デフォルトの名無しさん
05/03/08 21:16:10
>>371
% ls swank*.lisp
swank-abcl.lisp swank-lispworks.lisp
swank-allegro.lisp swank-loader.lisp
swank-backend.lisp swank-openmcl.lisp
swank-clisp.lisp swank-sbcl.lisp
swank-cmucl.lisp swank-source-path-parser.lisp
swank-gray.lisp swank.lisp


374:デフォルトの名無しさん
05/03/08 21:56:04
clisp 使えても iso-8859-1 決めうちじゃなあ。

375:デフォルトの名無しさん
05/03/09 02:21:04
emacs系が統合環境なんじゃないの?

376:デフォルトの名無しさん
05/03/09 16:07:21
>>371
サポートするってかいてあるけど。URLリンク(common-lisp.net)

377:デフォルトの名無しさん
05/03/09 22:41:11
>>367のエディタで改行して自動でインデントが付かないのは
俺だけか・・・?
微妙に使いづらいな。

378:デフォルトの名無しさん
05/03/09 22:46:23
忘れたころにLOOPマクロマンセー、と書いてみる。漏れは結構好きで使いまくりだ。

379:353
05/03/09 22:59:16
>>378
そうか。醜いとか汚点とか書いて悪かった。許してくれ。

380:デフォルトの名無しさん
05/03/09 23:25:15
loopも典型的で簡単な使い方をする分にはいいんじゃないの。

381:378
05/03/09 23:52:10
そうくるとは思わなかったな。何でLOOPなんか使うんだゴルァと叩かれると思ってた。
Common Lisp使ってる時点で異端扱いなので変な目で見られるのは慣れてるのだ(w
でもあのレベルのマクロを皆が好き勝手に作り始めたらポータビリティどころの騒ぎじゃ
なくなるような気はする。

382:デフォルトの名無しさん
05/03/10 06:13:09
emacsのlisp-modeのインデントが

(if predict
□□a
□b)

こうなるんだけど、scheme-modeみたく

(if predict
□□a
□□b)

のように出来ないんディスカー?

383:デフォルトの名無しさん
05/03/10 07:05:10
できる。というかわざわざ前者のようになってるわけだが……。
(put 'if 'lisp-indent-function nil)


384:デフォルトの名無しさん
05/03/10 07:09:41
>>383
ありがとう。
前者のようになっている理由は?

385:デフォルトの名無しさん
05/03/10 08:25:07
>>381
何でLOOPなんか使うんだゴルァ


LOOPみたいな独り善がりマクロがある限り
CommonLispに発展はない

386:353
05/03/10 11:20:48
>>381
マイナな中でさらに細かい流派を作って、いがみあってもしょうがないからね。
なるべく寛容になるようにしている。w
複雑なLOOPマクロを書けと言われたらちょと困るけど、読むくらいならなんとかなるし。
(たぶん、、、)

387:デフォルトの名無しさん
05/03/10 16:19:01
>>384

lisp: (if COND THEN ELSE ...)
scheme: (if COND THEN ELSE)

388:デフォルトの名無しさん
05/03/10 21:50:33
え、それって理由になってるの?

389:デフォルトの名無しさん
05/03/10 23:04:31
おそらく、理由なんだろうな。
elseが複数あるからってことでしょ?

まあ、だからってなんでaだけ下げるんだという疑問はまだ残るが。

390:378
05/03/10 23:13:10
>> 385
前半の前提と後半の帰結の関係がさ~っぱりわからん。理論立てて説明してみ。

LOOPマクロが繰り返し構造に特化したDSLの様相を呈しているという点で独り善がり
という感想を持つのは理解できなくもないが(しかし委員会で承認され規格化されて
いるという点で独善ではありえない)、その存在とCommonLispの発展とに何の関係が?

391:デフォルトの名無しさん
05/03/10 23:35:25
>>389
>elseが複数あるからってことでしょ?

ええー
述語ひとつに対してTHEN節とELSE節の他に、
ELSE1…ELSEn節があるって論理的におかしくないか?

392:デフォルトの名無しさん
05/03/10 23:48:24
Scheme での (if COND THEN (begin ELSE1 ELSE2 ...)) を伝統的 Lisp では
(if COND THEN ELSE1 ELSE2 ...) と書けるってこと。

393:353
05/03/10 23:52:58
>>387
ええーーーっと思って確かめたけど、Common Lisp は複数の else 句を取れないよね。
初めて知ったが emacs lisp は確かに複数の else 句が取れるんだな。
別に論理的におかしいとまでは思わないけど変わった仕様だね。

394:デフォルトの名無しさん
05/03/10 23:54:48
2個目以降がもったいないから利用しちゃおうという感じか?
わざわざprognとかでネスト深くする必要がないように。

395:デフォルトの名無しさん
05/03/11 01:20:22
>>394
それって、括弧の存在、如いてはS式そのものを否定することにならないか?
Lisperは、括弧を惜しみなくばら撒くもんだとばかり思ってたよ。

396:デフォルトの名無しさん
05/03/11 01:36:07
そんなおおげさな
(+ 3 (+ 1 (+ 4 (+ 1 5))))
だって
(+ 3 1 4 1 5)
と書けるじゃないか

だからといってどうといったことはない



397:デフォルトの名無しさん
05/03/11 04:09:39
括弧の帆を広げて
順風満帆といきたいねえ

398:デフォルトの名無しさん
05/03/11 04:29:34
実益と実害を全く無視して括弧を好むのは本末転倒。

399:デフォルトの名無しさん
05/03/11 04:39:32
((i))

400:デフォルトの名無しさん
05/03/11 12:40:30
>>387
ちなみに Common Lisp は scheme と同じ (if COND THEN [ELSE]) なわけだが、
ELSE を複数書ける Lisp って Emacs Lisp 以外にあるの?

401:デフォルトの名無しさん
05/03/11 12:50:25
よくわからんが、>>392によると、伝統的Lispでは大体そうなんじゃないの。
つまり、MacLispとか?なんか昔はいろいろなLispがあったらしいし。

CommonLispはSchemeの影響もかなり受けてるしな。
最近のLispがELSE一つなんじゃないかと。

402:デフォルトの名無しさん
05/03/11 13:17:30
>>401
MacLisp には if は無かったみたい。
URLリンク(zane.brouhaha.com)
Common Lisp 以前の「伝統的なLisp」では if よりも cond が基本だったし、ELSEが複数
書けるというのは Emacs Lisp のローカルルールではないかと思うのだが。

403:デフォルトの名無しさん
05/03/11 16:11:16
MIT Lisp Machine では ELSE を複数書けたよ。
URLリンク(www.bitsavers.org)
Symbolics でも同様だったと思う。

404:デフォルトの名無しさん
05/03/12 02:27:01
On Lispを読んでてクロージャの説明のところで

(let ((counter 0))
 (defun inc ()
  (setq counter (+ counter 1)))
 (defun reset ()
  (setq counter 0)))

こういう内部状態を持つ関数の話が出てきて、Schemeに書き換えようと思ったんだけど
defineはlet式の内部で使っても外から見えないから、
上のCommon Lispの例のdefunをdefineに書き換えただけじゃうまくいかない。
Common Lispの例みたいに共通の環境情報にアクセスできる複数の関数の上手い書き方ってないかな。

(define count
 (let ((counter 0))
  (lambda (option)
   (if option
       (lambda ()
        (set! counter (+ counter 1)))
       (lambda ()
        (set! counter 0))))))

(define inc (count #t))
(define reset (count #f))

これじゃちょっと格好悪いよね…

405:デフォルトの名無しさん
05/03/12 03:12:31
(define inc #f)
(define reset #f)
(let ((counter 0))
(set! inc (lambda () (set! counter (+ counter 1))))
(set! reset (lambda () (set! counter 0))))

406:デフォルトの名無しさん
05/03/12 05:31:54
(define-values (inc reset)
(let ((counter 0))
(values (lambda () (set! counter (+ counter 1)))
(lambda () (set! counter 0)))))


407:デフォルトの名無しさん
05/03/17 09:14:18
本スレではLISPの普及に腐心してるようだ(主にドキュメントみたいだけど)
で、このスレ的にはLISPで何が出来ればいいのだろう?
サーバサイド、DB、XMLや、環境としてWindowsで、こんなところなのだろうか?

408:デフォルトの名無しさん
05/03/17 13:09:54
LISPと言えば人工知能に決まってるじゃないか

409:デフォルトの名無しさん
05/03/17 14:41:00
>408
ワロタw
人工知能にすら使えるほどの高級言語なら、業務システムを記述する
ことは易い。

410:デフォルトの名無しさん
05/03/17 20:22:18
>>409読んで、最高に頭悪そうな発言してくださいスレ
かと思った。

411:デフォルトの名無しさん
05/03/17 23:55:46
Lispで人工知能を作って、それに業務システムを作らせるのが真のLisperだ。

412:デフォルトの名無しさん
05/03/17 23:59:03
>>411
それだ!

413:デフォルトの名無しさん
05/03/18 01:44:25
ASDFの記述でLisp以外のコードの扱いをどう書いたらいいかとか分かるようなサンプル
誰か持ってない? ただアーカイブぶちまけてconfigure, make, make installする
だけなんだけも。ASDF慣れちゃうとmakeが面倒になってきくるけど、Lispオンリーで済む
状態でなくなったときにふとどうしたものかと悩んでしまう今日この頃。

414:デフォルトの名無しさん
05/03/18 05:40:36
ASDFの中でmakeするやつっていくつかあるよ。
でも中のmakefileがLinuxに依存したものになってる場合があって
辟易するんだよなー。Makefileの書式とかコマンドのパスとかさ。
署名前提だから適当に手元で改変して食わせるというのもちょっと手間がいるし。

というわけで例としてはUFFIがあるけど上記の点をよろしくおながいしますm(_ _)m

415:413
05/03/20 00:34:40
>>414
サンクス。uffi-tests.asd非常に参考になりました。
ってか自分でASDFのソース読みながらこんな使い方でいいのかな思いながら書いてた
ところに上の情報もらったんで、結果的に他の人の使い方も見てダブルチェック。
自分で好きなようにカスタマイズできてASDFって実にイィ!!ですね。

署名前提ってのはasdf-installのことだよね。cCLan最近見てないけど変化あった?

416:デフォルトの名無しさん
05/03/20 00:49:04
Gauche 0.8 + FreeBSD4.9だが日本語を受け付けてくれないyo!!

gosh> "日本語"
*** ERROR: unhandled signal 2 (SIGINT)
Stack Trace:
_______________________________________

417:デフォルトの名無しさん
05/03/20 00:53:03
ところでここSchemeの話題っていいの?

418:デフォルトの名無しさん
05/03/20 00:54:04
>>416
受け付けてくれるyo!!
% gosh -V
Gauche scheme interpreter, version 0.8.3 [euc-jp]
% gosh
gosh> (string-length "はげ")
2

419:デフォルトの名無しさん
05/03/20 17:52:38
>>407
common lisp emacs

# 需要は、それなりにあるんじゃないかな。
# hemlockは、あまり、うまくいってないようだし。

420:デフォルトの名無しさん
05/03/25 01:36:49
xyzzyでXMLを扱えるコンポーネントって何かあります?

421:デフォルトの名無しさん
05/03/25 09:22:09
> lispを使用してC#やJAVAの代替にするための方法(おまけ)

どうやんだよ?

422:デフォルトの名無しさん
05/03/25 09:24:05
gosh> (string-length ">>418 氏ね")
8

423:デフォルトの名無しさん
05/04/09 13:53:42
clispで定義された
(defun func()(print "func"))->func
という適当な関数を定義してバイトコンパイルしたものを
VC++から呼び出すとか出来ます?パイプでもなんでもいいんですが、
出来ますか?


424:デフォルトの名無しさん
05/04/09 18:12:46
できますよ。

425:デフォルトの名無しさん
05/04/09 18:28:35
clispって住み心地いいですよね。


426:デフォルトの名無しさん
05/04/09 18:29:23
住むところを間違えてます

427:デフォルトの名無しさん
05/04/09 20:48:02
>>424
やり方を教えておくれ、詳しく、たのむ

428:デフォルトの名無しさん
05/04/09 21:26:49
clispのマニュアルに詳しくかいてあるよ

429:デフォルトの名無しさん
05/04/10 00:43:55
LispからCの関数を呼ぶ例しか書いてない・・・

430:デフォルトの名無しさん
05/04/10 02:35:07
おんなじことだろ

431:デフォルトの名無しさん
05/04/10 12:30:06
同じか?
いまいちわからんな~

432:デフォルトの名無しさん
05/04/10 14:52:56
文字列で渡す方法とかあるんじゃないの?

clisp_eval_string("(eval '(hello world))");

みたいなやつ。

433:デフォルトの名無しさん
05/04/10 15:35:00
system("clisp < tmp_in > tmp_out");
みたいにやればいいじゃん。pipe使えばさらにかっこいいぞ。

434:デフォルトの名無しさん
05/04/10 15:41:28
ちょいと、C++からCLISP関数を呼ぶコードを見せておくれでないかい。
リファレンス参照したが、どうにも解らん。たのむよ~

435:デフォルトの名無しさん
05/04/10 17:18:43
>>433

436:デフォルトの名無しさん
05/04/10 19:16:55
いわれてみれば、そうだな。
ありがとう、ちょっとやってみるよ。

目標はJAVAから呼ぶこと。

437:デフォルトの名無しさん
05/04/10 23:55:31
String command = "lisp.exe";
Process process = Runtime.getRuntime().exec(command);
InputStream is = process.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(is));


String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
clispを呼び出すまではできたんだけどね、出力する方法が分からん。
(当初の目的は、単純にclispの関数を呼び出すだけだったんだけどな~)

438:デフォルトの名無しさん
05/04/11 00:05:10
>>437
(ちょっとスレ違いになるが)
process.getOutputStream() して取得したストリームに書き込めば、それがlisp.exeの
標準入力になる。やはりBufferedWriterをかぶせるのが良いがflushを忘れぬようにな。

439:デフォルトの名無しさん
05/04/18 19:31:51
テストフレームワークって何使ったる?
ptester が手軽でいいなと思うんだけど。

440:デフォルトの名無しさん
05/04/18 21:56:48
自前のもの。



441:デフォルトの名無しさん
05/04/18 22:05:51
Lispだと5分くらいで作れちゃうから、ついつい自前のを作ってしまうのでした。

442:デフォルトの名無しさん
05/04/18 22:33:32
やっぱ自前ですか。
最近出版された Practical Common Lisp の中でも数十行で作ってたからな。
でも、 Common なテストフレームワークが欲しくないですか?


443:デフォルトの名無しさん
05/04/19 20:25:56
これ以上Commonを大きくするのは嫌です

444:デフォルトの名無しさん
05/04/24 20:53:29
jlinkerってjavaからLispを呼ぶときってどうやるの?
いまいち使い方が分からん。

445:デフォルトの名無しさん
05/04/25 06:56:03
jlinkerもjilもサンプル通りにやっても動きゃしない。
疲れた。寝る。

446:デフォルトの名無しさん
05/04/25 20:30:59
Soft Bank Common Lisp 0.9.0リリースあげ。
ちょっと古いけどslime 1.2あげ。

447:デフォルトの名無しさん
05/04/25 21:49:16
>>446
こらこらこら。捏造イクナイ。ところで、あがってないよ。



448:デフォルトの名無しさん
05/04/25 23:01:36
>>447
URLリンク(sourceforge.net)

URLリンク(common-lisp.net)

449:デフォルトの名無しさん
05/04/25 23:29:47
>>448
よく見れ。


450:デフォルトの名無しさん
05/04/25 23:34:04
jlinkerってそんなにハマるようなところあったっけか。
Javaのクラス名との対応さえとれてしまえば後は楽勝だった記憶があるんだが。

451:デフォルトの名無しさん
05/04/25 23:40:20
>>449
いいじゃん。
日本ではSBCLはSoft Bank Common Lispと読むんだよ。

452:デフォルトの名無しさん
05/04/25 23:53:00
>>451
Oh! SBCL っつー月刊誌を出したら認めてやる


453:デフォルトの名無しさん
05/04/26 07:13:44
>>450
いや使い方がまったくのってないんで、さっぱりわからん。
Lispからjavaを呼びのはなんとかなってんだが、javaからLispを
呼ぶ方法が情報皆無。

こうなったらACL買ってサポートで情報吐かせるしかないなぁ~~。

454:デフォルトの名無しさん
05/04/26 11:14:09
TryJavaToLisp.java
tryjtol.cl
ってのが./examples/jlinker/basicにあるけど・・・(ACL7 Enterprise)

455:デフォルトの名無しさん
05/04/26 14:01:53
>>454
うむ。それを試そうとしてはまっている。
jlinker-initがないといわれる。
jlinker.faslの中で定義されてないのか、と思案中。

ちなみに、ACL7 Enterpriseって幾ら位するの?
10万ていどなら茄子で買う。

456:デフォルトの名無しさん
05/04/26 22:32:17
そのサンプル問題なく動いたけど。jlinker-initってLispからJava呼ぶ準備にも
使うハズだから、JavaからLisp呼ぶときだけうまく行かないって何かが変だと思う。

価格は過去スレにあった気がする。とても個人じゃ買えない。

457:デフォルトの名無しさん
05/04/26 23:40:05
なんつーかサンプルのreadmeに書いてある手順でやると、
(jlinker-init)でエラーになるんだよな~。所詮Trialということかな。

>価格は過去スレにあった気がする。とても個人じゃ買えない。
マジで?
そうか、普通に7のProfessionalでも買うかな。まぁ10万強ぐらいだろう、多分。
これってProfessionalってネイティブコンパイルできたっけ??

458:デフォルトの名無しさん
05/04/27 00:23:16
ACL7のTrialって出てないですよね。ってことは6.2?
微妙に違うんでしょうね。6.2持ってないので確認できないですが。

Professionalでもネイティブコードにコンパイルはできます。ってTrialでもできて
ますよね?作成したアプリケーションの配布とかMySQL/Oracle Directが付いてないとか
いう点が異なってたと記憶してますが詳細はFranz Inc.に直接確認してください。
頼めばProfessionalで十分かどうか確認するために評価ライセンスも発行してもらえると思います。

459:デフォルトの名無しさん
05/04/27 00:32:47
>Professionalでもネイティブコードにコンパイルはできます。ってTrialでもできて
ますよね?

勇気を持って言おう!!
・・・知らなかった。マジで知らなかったorz
試しに適当なプロジェクトをコンパイルしたらなんかEXEが出来てた。
いや~なんつーか奥が深いねACLは。ちょっと首つってくるわ。

460:デフォルトの名無しさん
05/04/27 22:51:13
EXEってGUIでなければ作れないのかな?
VCみたいにDOS窓で動作するEXEは無理みたいだな~。
生成されたDLLからLispの関数名を抜き出して使おうかと思ったが、
dependencywalkerでも関数名もなにも出てこない。

きついのう。

461:デフォルトの名無しさん
05/06/02 01:21:34
#'hoshu

462:デフォルトの名無しさん
05/06/02 17:05:34
gclでcに変換してコンパイル汁

463:デフォルトの名無しさん
05/06/05 01:03:21
>>462
そんなことは出来ん

464:デフォルトの名無しさん
05/06/05 01:05:39
GCL は知らんけど、ECL はスタンドアローンなバイナリ作れるから GCL でも
出来んじゃないの?
Win で出来るかは知らん

465:デフォルトの名無しさん
05/06/05 01:14:29
>>464
スマン、出来た

466:デフォルトの名無しさん
05/06/05 01:16:38
オメデ�ォ

467:デフォルトの名無しさん
05/06/05 06:55:37
スキームのマクロについて丁寧に説明しているドキュメントない?
できれば日本語、ないなら英語でもいいや。

468:デフォルトの名無しさん
05/06/05 10:25:27
Schemeの話はスレ違い

469:デフォルトの名無しさん
05/06/05 11:19:23
>>468 なんだかしらないけど、病院行ったほうがいいよ。

470:デフォルトの名無しさん
05/06/05 14:06:22
ここはCommonLispのスレ
CommonLisp/Schemeスレは別に存在する

471:デフォルトの名無しさん
05/06/05 14:08:28
人少ないしSchemeネタもいいんじゃね?

マクロのことは入門Schemeとかにのってないのかな?

472:デフォルトの名無しさん
05/06/05 14:26:42
元々このスレはアンチschemerが立てたという経緯がある
そういう変な人の相手をしたくなかったら本スレでやったほうが良いかも
それでもここで続けるというのなら別に止めはしない

473:デフォルトの名無しさん
05/06/05 14:46:39
つーか、明らかに Common Lisp とは関係ない話題だし Scheme のスレもあるのに
このスレでやる理由は何もない。やめてほしい。

474:デフォルトの名無しさん
05/06/05 16:22:36
>>471
このスレだったか、もう一個のスレだったか忘れたけど、
本スレで Common Lisp の質問をしても、Scheme で返事が
返って来る事が多いのは S/N 比が悪いってことで立てられた
経緯があるから、Scheme ネタは宜しくないだろう。
わざわざ波風立てたい理由が分からん。

475:デフォルトの名無しさん
05/06/05 20:15:45
>>474
S/N比とかいってるアフォは、>>6だろ
しかしこのスレもあんまCommonLisp特有の話って続かないな
ちらほらSchemeの話にそれたりする

ところで、

【一日】CommonLisp【一門】
スレリンク(tech板)

こっちは放置か?


476:デフォルトの名無しさん
05/06/05 20:30:41
本スレは元々「Lisp Scheme」スレの筈で、
CommonLispはただのLisp属の1つという扱いだったんだが、
いつかの馬鹿がLisp->CommonLispに勝手に限定しやがった。
これはPart9か10辺りの出来事。
まあ、それでもCommonLispの話はほとんどされた覚えはないが。
相変わらずScheme寄りな本スレを見切ったのか、結局は
CommonLisp専用スレいくつか立って去っていったな。

そろそろ本スレは「Lisp Scheme」に戻そうかw

477:デフォルトの名無しさん
05/06/05 20:40:40
>>476
わざわざ波風立てたい理由が分からん。

478:デフォルトの名無しさん
05/06/05 20:56:55
>>477
Lispよりも波風が好きなんだろう

479:デフォルトの名無しさん
05/06/05 21:10:55
>>476
その辺の話は本スレの次スレ立てるときにでもまたしてもらえるとありがたい。
CommonLisp専用スレがあるんだから、もうどっちでもいいと言えばいいよ。

480:デフォルトの名無しさん
05/06/05 21:12:39
早期にEmacsLispと分離したのは正解だと思う。
CommonLispも同じ道を辿れればいいね。

481:デフォルトの名無しさん
05/06/05 21:21:27
やっぱ Lisper と Schemer は仲悪いんだな
大した違いは無いのに、何がこうさせるんだろう…

482:デフォルトの名無しさん
05/06/05 21:27:30
JavaとC++くらいには違うかもな。w
漏れは本スレも読んでいるが、ここはCommon Lispのスレなのだから
Schemeのマクロ(Common Lispのマクロとは大きく思想が異なる)の
話題はよそでやるのが当然だと思う。
これは仲悪いとかの問題ではない。

483:デフォルトの名無しさん
05/06/05 23:26:35
小さい人間


484:デフォルトの名無しさん
05/06/06 16:02:41
さて、ネタも溜まったしそろそろコードジンに発表していい?

485:デフォルトの名無しさん
05/06/06 21:28:37
>>484
出典:2chってちゃんと書けよw

486:デフォルトの名無しさん
05/06/07 08:04:05
向こうのスレでみんなで仲良くタライを舞わしていたらC++君が乱入の模様。

487:デフォルトの名無しさん
05/06/07 18:52:10
>>467
URLリンク(www.scheme.com)

が英語だけど、比較的詳しい。 あと、MzSchemeかDrSchemeの真乳有るあたりかな。。

488:デフォルトの名無しさん
05/06/12 21:10:08
こっちでいいかな。
Practical Common Lispの24章、25章あたりをざっくり読んでこうやってマクロは組み立てて
行くものなのかと感心しているところなのですが、ちょっと応用しようと思ったらすぐに方法が
わからなくてハマりましたので助けていただきたく。

やりたいことはdefine-binary-classとかのマクロでビットフィールドを持つ構造を扱いたいの
ですが・・・どの辺から発展させていったらいいんですかね?
一回のI/Oで複数個のスロットに値を配るのはできそうなんですが、その為の構文をどう設計する
べきかで悩んでます。無理にマクロにしないで泥臭く書いて行けばできるのは間違いないんですけど。

489:デフォルトの名無しさん
05/06/12 21:30:59
>>488
何に悩んでるかよくわからないけど、構文としては :bytes で指定するバイト数
の代わりに :bits でビット数を指定するみたいな具合にすればいいんじゃない?

490:488
05/06/12 21:54:40
スロット単位でreadしたものが流れて行っちゃう(こんな表現で伝わるかな)のは
マクロ側でいまストリームの何バイト目の何ビット目まで読んだ、みたいに自前で管理すれば
いいんですかね。

身近にLisp使いがいないんで、この本に出会うまで実際のコーディング上のノウハウみたいなの
知る機会がなかなか無くて随分と損した気がします。

491:デフォルトの名無しさん
05/06/12 21:59:26
>>490
まずビット単位でI/Oできるストリームみたいなのを構築(当然この中でバッファリング
する必要があるだろう)して、その上に作るのがいいんじゃないかな。
マクロにするかどうかというのは本質ではない気がする。

492:488=490
05/06/12 22:11:23
> マクロにするかどうかというのは本質ではない気がする。
本質ではないという意見も理解できるのですが、この章を読んでいてPaul Grahamが書いてる
ような「ミニ言語を作ってその言語を使ってプログラミングする」っていうのはこういうことかと
何となくわかったような気がしたのですよ。

逆に、いままでLispで自分流に書いて来たコードって全部「マクロ展開後」の結果をひたすら
書いて来たように感じました。それでもEmacsの中でちょいちょい変更してはテストしながら
やっていたのでC/C++/Javaよりは気楽に書いてましたけど(主観ですが)。

493:デフォルトの名無しさん
05/06/12 22:16:13
「マクロにするかどうかというのは本質ではない」と書いたのは、あくまで
バイト単位とかビット単位とかという議論に対しては、という話ね。
ま、気楽にやりましょ。w

494:488=490=492
05/06/12 22:32:46
> ま、気楽にやりましょ。w
ですね。

で、こっちなんですが >>まずビット単位でI/Oできるストリームみたいなのを構築
参考になりそうなドキュメントとかご存知ないですか?何でもかんでも自分で作っちゃうのが
Lisp屋さんの流儀みたいですが全然技量的に到達できそうもない今日この頃・・・

495:デフォルトの名無しさん
05/06/20 06:57:40
LispってCの#ifとかないの?

496:デフォルトの名無しさん
05/06/20 07:16:07
CL なら #+ #-

497:デフォルトの名無しさん
05/06/20 07:19:17
勿論あるよ。

URLリンク(www.lisp.org)
URLリンク(www.lisp.org)
URLリンク(www.lisp.org)

498:デフォルトの名無しさん
05/06/20 20:40:22
やっぱCLはこういうとこちゃんと考えてあるなあ。


499:デフォルトの名無しさん
05/06/21 07:10:59
Planet Lisp 見たら、SBCL で EUC-JP 使える様になったみたいでビクーリした

500:デフォルトの名無しさん
05/06/22 02:59:25
SBCL、いつになったらWindows portは出来上がるんだ……。


501:デフォルトの名無しさん
05/06/22 03:06:21
UTF-8は?


502:デフォルトの名無しさん
05/06/22 03:10:51
>>501
SBCLならかなり前からサポートされている

503:デフォルトの名無しさん
05/06/27 12:49:24
すみません、本スレを見ていて分からないんですが、
既存の関数名に別名をつけたい場合(nreverse に my-nreverse とつけるなど)、
Common Lisp ではどう書くのが良いんでしょうか?


504:デフォルトの名無しさん
05/06/27 14:02:55
(setf (symbol-function 'my-nreverse) #'nreverse)

505:デフォルトの名無しさん
05/06/27 14:20:09
いや、自分もそれでいいと思ってたんですが、本スレで「無知」と言われてたので、
何かもっと良い書き方があるのかなと。


506:デフォルトの名無しさん
05/06/28 00:18:10
(setf (fdefinition 'my-nreverse) #'nreverse)

507:デフォルトの名無しさん
05/06/29 00:16:54
変わんないじゃん。つうか、xyzzy には fdefinition はなかった。

508:デフォルトの名無しさん
05/06/30 10:20:04
俺は、本スレで煽ってた奴は、Common Lisp に fset があると勘違いしていた
んではないかと疑ってるのだが。


509:デフォルトの名無しさん
05/07/02 16:20:12
lispって配列は参照渡しですか?

510:デフォルトの名無しさん
05/07/02 18:20:15
>>509
うん

511:デフォルトの名無しさん
05/07/02 19:15:29
>>510
どうもです

512:デフォルトの名無しさん
05/07/02 21:51:40
…………… く ず れ す ……………

513:デフォルトの名無しさん
05/07/03 17:35:10
すいません、質問なのですが
(al-reverse'(a(b c)(d(e f))))
と与えたら((((f e)d)(c b)a)となり
中身が全て反転するような関数al-reverse
を定義するにはどうすれば良いのでしょうか?


514:513
05/07/03 18:23:18
自己解決しますた。失礼。

515:デフォルトの名無しさん
05/07/12 05:17:03
質問です。

普段使っている、lispアプリhogeがあって、
そのhogeをロードした後、必ず実行する関数(hoge-init)があるとします。

で、
(defun hoge-starter ()
(load "hoge")
(hoge-init))
の様な関数を、lispの起動時に読み込まれる初期化ファイル(.init.lisp)に
定義したいのですが、この定義をしてlispを起動すると、
`undefined function: hoge-init'
と、警告がでてしまいます。

この警告を消したいのですが、どのようにすれば良いでしょうか?

eval-when を使うのかと思って試したのですが、うまくいきませんでした。

516:デフォルトの名無しさん
05/07/12 09:42:48
>>515
まず使っている処理系や環境を書くように。


517:デフォルトの名無しさん
05/07/12 11:17:36
reverseを下記のようにプログラミングしました.
(defun my-reverse (l)
(cond ((null l) nil)
(t (append (my-reverse (cdr l)) (list (car l))))))

リスト内にもreverseをかけるべく再起処理を施したいのですが,
なかなか出来ません,お願いします.


518:デフォルトの名無しさん
05/07/12 12:24:49
(my-reverse (car l))

519:デフォルトの名無しさん
05/07/12 13:08:00
やれやれうちの大学の奴多いな。

520:デフォルトの名無しさん
05/07/12 13:31:40
>>519
おまいの大学の奴らだったのかw

521:デフォルトの名無しさん
05/07/12 13:44:40
>>519
お前もこのスレッド見ている時点でやれやれだなぁ.

522:515
05/07/12 14:44:44
>>516
失礼しました。

linux上で、cmuclとsbclを使っています。

523:デフォルトの名無しさん
05/07/12 15:26:05
>>521
見ているだけならいいんじゃね?
宿題を代わりにやってもらうってのはダメだが

524:デフォルトの名無しさん
05/07/12 16:29:19
2ch はおまいらの学校の校則には縛られません

525:デフォルトの名無しさん
05/07/12 16:44:22
宿題はさっさと教えてやった方が本人のタメにならなくていいな

526:デフォルトの名無しさん
05/07/14 11:59:58
なるほど!Common Lisp と Scheme のスレを分離したいという意見が多い理由
がわからなかったのだけど、やっと分かった。宿題を丸写しするためだったの
か!Common Lisp と Scheme の違いが分からないのなら、そりゃ混ざってちゃ
困るよなあ。了解しました。

◆「Lispに関する次の問いに答えよ」m(__)m
URLリンク(mentai.2ch.net)

↑のスレの1はさらに上を行く勇者で、Lisp と Ruby の違いも分からない。

まあ、別に悪いことだとは思わないけれど。私も興味のない科目はそんな風だっ
たし。


527:デフォルトの名無しさん
05/07/14 13:54:12
>>525
わらた。

528:デフォルトの名無しさん
05/07/21 05:48:46
ハッカーと画家 読んだことある香具師いる?

529:デフォルトの名無しさん
05/07/21 09:08:55
>>528
ノシ

530:デフォルトの名無しさん
05/07/21 23:47:57
>>528
ノシ

531:デフォルトの名無しさん
05/07/23 03:57:57
誰かCL-HTTPでhelloworld書いてくれ
俺のACLではloadできない

532:デフォルトの名無しさん
05/07/24 21:42:19
関数内で任意のz(関数内で使われていない変数)を定義して、それを値として使いたいのですが、どのようにしたらよいでしょうか?

533:デフォルトの名無しさん
05/07/24 21:42:53
期待age

534:デフォルトの名無しさん
05/07/24 22:35:57
>>532
よく質問の意味がわからんが、関数内で任意のz(関数内で使われていない変数)を
定義して、それを値として使えは良いのではないのか?w

535:デフォルトの名無しさん
05/07/25 16:35:07
>>534
説明が下手でサマソ。
なんというか、例えば全部のアルファベットを受け取ったときにも
まだ未使用のアルファベットとして定義して、そいつを値にしたいんだ
そんなことって可能なのか?



536:デフォルトの名無しさん
05/07/25 18:33:08
とことん説明の下手な香具師だな。


537:デフォルトの名無しさん
05/07/25 18:42:19
gensymでいいんじゃない?

538:デフォルトの名無しさん
05/07/25 23:54:43
二つのリストから最大値と最小値を1個づつ取り出し、この二数を割る
プログラムはどうつくればいいですか?


539:デフォルトの名無しさん
05/07/26 00:03:56
最大値を求めるプログラムと
最小値を求めるプログラムを書く。

二回走査するのがいやだったら
走査は一回にして最大値と最小値をリストにしてapply

540:デフォルトの名無しさん
05/07/26 02:35:34
おー久しぶりにのぞきにきたが,Lisp 関連スレが増えてる.

>>538 いいか,若いの.問題の定義がよくわからんが,考え方をおしえてやろう.
お前さんは
(欲しい関数 リスト1 リスト2) => (/ リスト1の最大値 リスト2 の最小値)
としたいわけだ?ならそう書けばよい.
(defun 欲しい関数 (リスト1 リスト2)
(/ リスト1の最大値 リスト2の最小値))
一度に考えるな.すぐにわからんものは関数にしてしまえ.
(defun 欲しい関数 (リスト1 リスト2)
(flet ((リスト1の最大値 ()
...)
(リスト2の最小値 ()
...))
(/ (リスト1の最大値) (リスト2の最小値))))
さて,こうすると,除算の問題はもう解けた.あとは
リスト1の最大値, リスト2の最小値という小さな問題を解くだけだ.
さて,日本語だと通らない処理系もあるから,↓のようにしよう.
(defun answer (list1 list2)
(flet ((max-of-list1 ()
...) ;; list1 の最大値を求める
(min-of-list2 ()
...)) ;; list2 の最大値を求める
(/ (max-of-list1) (min-of-list2))))
なに?授業を聞いてないしやる気もないから最大値も最小値も求められない?
そうだね, (apply #'max list1) や (apply #'min list2) でいいんじゃないか?


541:デフォルトの名無しさん
05/07/26 03:14:00
テキストには#ついてねーよ
progは習ったがfletはやってねー
ま、8クイーン頑張れよw

542:デフォルトの名無しさん
05/07/26 05:47:40
>>535
何か具体的にやりたいことがあるんでしょうから、
具体例を出しちゃった方が話が早いと思いますよ。

>>541
prog って使ったことないや。
tagbody つきの let みたいなんでしたっけ。

543:535
05/07/26 18:02:54
>>542
その通りです。
では、具体的な話。

λ計算中に現れる[lexp1/x]lexp2を表現する関数
(defun substitution (x lexp1 lexp2))の中で

x≠yかつφ(E)∋x、φ(Q)∋yをどちらも満たすなら
任意のλ式E、任意のz(ただしzはx≠z≠yかつ
(E)Qの自由変数でも束縛変数でもない)に対して
[Q/x]Ly.E → Lz.[Q/x]{z/y}E

って書き換えたいんです。
ここで、Lx.Ly.(y)xは(L x L y (y) x)と表現します。

544:535
05/07/26 18:04:30
あ、ここでっていうのは単なる表現の例です。あしからず。

545:デフォルトの名無しさん
05/07/26 18:10:14
>>543
相変わらず説明は下手だなぁ。gensymじゃ駄目なのか?

546:535
05/07/26 18:27:20
>>545
鬼 才 現 る !

すいませんでした。
>>537でも書き込んでいただいていたみたいなのにスルーしてましたorz
そんな関数が存在していたとは・・・知りませんでした。
ありがとうございました!

547:538
05/07/26 20:39:51
>>540 539
説明ありがとうございますm(_ _)m
やってみます。

548:デフォルトの名無しさん
05/08/07 00:16:00
このスレって、やっぱCommonLisp専用スレ?
EmacsLispやSchemeの初心者レスはすれ違いでしょうか?

549:デフォルトの名無しさん
05/08/07 00:20:37
>>548
うん。スレ違い。
このあたりかな。
スレリンク(tech板)

550:デフォルトの名無しさん
05/08/08 01:12:30
質問です。

(defun func (x)
(setq x 2))

(setq a 1)

(func a)

などとして、グローバルな変数をfuncの引数にして呼び出した時に
そのグローバル変数自体が書き換えられるような、
C言語で例えるならポインタ引数のような使い方をするには
どうすればいいのでしょうか?

551:デフォルトの名無しさん
05/08/08 01:20:58
トップレベルで変数を定義して、関数内でsetqなりsetfなりを呼び出せばOK

552:デフォルトの名無しさん
05/08/08 01:28:25
(set x 2) とか (setf (symbol-value x) 2) とか。お好きな方で。
関数に渡すのはシンボルね。

553:デフォルトの名無しさん
05/08/08 01:52:21
call by name にしたいならマクロ
(defmacro macro (x)
`(setq ,x 2))
(setq a 1)
(macro a)
a
=> 2

554:550
05/08/08 04:02:54
ということは、550で書いたコードをそのまま実行すると
(func a) の後はaの値は2になっているはずですよね?
でもトップレベルでsetqした値、つまり1になっています…
ここでどうにかaを2にしたいんですが…
質問の仕方が悪いのかもしれません、すみません

555:550
05/08/08 04:04:46
あああすみませんわかりました!!
seqじゃなくてsetを使うとできました。お騒がせしました…
とても助かりました。命の恩人です。

556:デフォルトの名無しさん
05/08/08 04:39:29
嬉しさは伝わるが、すごい表現。出来なかったら首でも吊ってたんだろうかw


557:デフォルトの名無しさん
05/08/08 11:44:30
>>556
わろす

558:デフォルトの名無しさん
05/08/19 04:41:05
すいません、LISPで画像処理をしたいのですが、
JPEGを扱うにはどうしたらいいのでしょうか。
いいライブラリがあったら紹介ください。

559: 
05/08/19 09:05:28
gcl で substring が呼べないのはなぜでしょうか

560:559
05/08/19 09:20:57
ごめ。
(subseq "hoge" 0 2)
"ho"
で出来た。色々変わったのかね

561:デフォルトの名無しさん
05/08/25 04:45:03
選別収集ってどんなだったっけ
(mapcan #'(lambda (x)
(cond
ここまでおもいだした

562:デフォルトの名無しさん
05/08/25 06:02:14
選別収集ってなんだったっけ。
srfi-1 でいう filter-map?

563:デフォルトの名無しさん
05/08/26 01:30:58
(mapcan #'(lambda (x)
(cond ((predicate x) (list x))
(t nil))
list)

predicateがoddpでlistが'(0 1 2 3 4 5) なら '(1 3 5)が返る

564:デフォルトの名無しさん
05/08/26 02:09:00
(remove-if-not #'oddp '(0 1 2 3 4 5))
=> (1 3 5)

565:デフォルトの名無しさん
05/08/26 02:26:56
remove-if-not や delete-if-not やらは deprecated らしいよ。
URLリンク(www.google.co.jp)

(remove-if (complement #'oddp) '(0 1 2 3 4 5))

と書くそうだ。

566:デフォルトの名無しさん
05/08/27 03:33:37
deprecatedって推奨されてないってこと?

remove-ifはなんだか収集という感じがしない
mapcanにできてremove-ifにできなさそうなものを考えてみる

567:デフォルトの名無しさん
05/08/29 12:07:23
別にやってることの本質は同じじゃない?
選別収集を言い換えればつまりはいらないものを捨てるってことだろうし。
remove-ifでもlambdaつかえば結局同じことだと思うけれど。

568:デフォルトの名無しさん
05/08/30 02:11:36
mapcan でなら複数のリストを取って選別収集するようなことができるかな。
(mapcan #'(lambda (&rest x) (if (every pred x) x nil)) list) みたいに。
つか、実装の詳細は措いて、mapcan で書き下したもの(の限定版)に
名前をつけたもんがremove-if(-not) なんじゃないかいな。

569:名無しさん@そうだ選挙に行こう
05/09/11 21:38:55
lispでCGI組みたいんですけど、
Apacheから直接PHPとかPerlみたいにはできないんでしょうか?
mod_lispとかlispachとかgocheとかはネットで調べたんですが、
なんとなくすっきりしません。
やっぱ自分で作るしかないのかな?


570:名無しさん@そうだ選挙に行こう
05/09/11 23:01:59
>>569
> なんとなくすっきりしません。

詳しく

571:デフォルトの名無しさん
05/09/12 12:46:48
Portable AllegroServeは?
表にApache建てたいならmod_proxyで。


572:デフォルトの名無しさん
05/09/12 23:20:06
>>570 えーと、つまりPerlやPHPのようにApacheのModuleとして組み込んで
直接ApacheのAPIを操作できるようにならないかということです。

>>571さん、なんとなくすっきりしないといったのは、
こういったApacheから何かを介してLispへアクセスするというのが、
私にとっては違和感がありまして…。

最近になってプログラミングをやりだしたものですので、
変なこと言ってるかもですが、
Apacheを使ってsoapとかのWebserviceのxmlを読み込み、
Routerのようにできないかなと思ってまして。
もちろん他の言語でもできるのですが。。。

こんなLisp初心者にご解答ありがとうございます。

573:デフォルトの名無しさん
05/09/26 03:17:10
Cで書くLISP処理系の本で今手に入るものはあるんでしょうか
大学近くの古本屋を回ってもあんまり理工書がないんですが

574:デフォルトの名無しさん
05/09/26 12:07:11
LISPでGoogle検索すればゴロゴロ転がってる気が
昔のアスキーのCプログラムブックIIIは独自LISP処理系扱ってるけど
今風の実装じゃないし
個人的には末尾再帰できない独自LISPはあんま魅力ないな
自分で作るならSchemeの方がいい

575:デフォルトの名無しさん
05/09/26 12:11:52
>>574
末尾再帰の実装なんて普通のLispでもさほど難しくはない。Schemeは
full continuationの実装など悩む割に報われない部分で苦労する。
まぁ作ってみるだけなら面白いけど、実用的な処理系は結構大変。

576:デフォルトの名無しさん
05/09/26 12:14:50
難しいかどかじゃなくて末尾再帰も標準的でない独自LISPには魅力感じないつってんの

577:デフォルトの名無しさん
05/09/26 12:17:57
>>576
おまえスレタイ読めるのか?
スキームの宣伝は他でやれよ。

578:デフォルトの名無しさん
05/09/26 12:20:35
ちなみにちゃんとしたSchemeでも継続はあんま使わないよ
別に無くてもなんとかなるレベルでしょ
ただし末尾再帰は無いとコーティングスタイルにまで影響する
最適化の余地があるCommonLispならともかく、
独自LISPにはもう期待できる事が何も無い

579:デフォルトの名無しさん
05/09/26 12:23:36
>>577
スキームの宣伝て何?
おまえこそちゃんとレス読めよダボが

580:デフォルトの名無しさん
05/09/26 12:28:57
>>578
はぁ?
> 最適化の余地があるCommonLispならともかく、
> 独自LISPにはもう期待できる事が何も無い

何か言ってる意味わかんねよ。
Common Lisp系の独自LISPとかイメージできないの?

581:デフォルトの名無しさん
05/09/26 14:26:44
>Common Lisp系の独自LISP
イミフメ

582:デフォルトの名無しさん
05/09/26 21:57:00
見事に話が噛み合ってないな(w
ちなみに漏れは580の言ってることは理解できる派ね。まぁただでさえマイナーな言語に
関わってる者同士マターリと行こうや。

583:デフォルトの名無しさん
05/09/27 01:25:11
末尾再帰の最適化をするのは Scheme だけじゃないしね。
俺も継続は無くても良いけど、末尾再帰の最適化は欲しいなぁ。

584:デフォルトの名無しさん
05/09/27 01:36:27
>>583
以前話題になった気がするけど、Common Lispにおける末尾再帰の最適化は、
・インタプリタはほとんどの処理系がやらない
・コンパイラはほとんどの処理系がやる
という結果だったと思う。Common Lisp的思想からすれば順当なところだろうね。

585:デフォルトの名無しさん
05/09/27 02:42:55
Scheme 勉強したてで毒されてるな.
末尾再帰の最適化はメリットばかりじゃねーんだぜ?
インタプリタ上では *常に* 最適化されちゃったらデバッグしにくいだろ?
Common Lisp 的思想なら,コンパイル時の最適化オプションで
制御できるほうが嬉しい.

末尾再帰の最適化を示すオプションが欲しいって話もあるけどな.事実上,
speed 3 とか debug 0 にしとけばほとんどのコンパイラがやってくれっからねぇ.


586:デフォルトの名無しさん
05/09/27 11:44:41
>>585
> インタプリタ上では *常に* 最適化されちゃったらデバッグしにくいだろ?

これはスタックトレースが取れないとかそういう意味?

587:デフォルトの名無しさん
05/09/28 02:18:03
常に最適化されちゃって選択できねーとかははやすぎる最適化の部類に感じる時がある.
CL 派としては c.l.l で出てた宣言的アプローチで解決してほしいなー.

「可能な限り最適化する」「自己呼び出しとローカル関数のみ最適化」「自己呼び出しのみ」「最適化なし」

とかが宣言できるみたいな.まぁ,現状はコンパイラのマニュアルを見る必要
があるわけだけど,それで不都合あるのかっつーはなし.Common Lisp におけ
る末尾再帰の最適化はだってほぼ標準だしね.


588:デフォルトの名無しさん
05/09/28 02:22:10
>>587
結局Common Lispの仕様の問題になるわけだよな。20年間にわたって仕様が安定
している(ANSIでわずかに変更されたところもあるが)のは利点でもあるわけだが、
そろそろ次期規格の話が出てきても良いように思う。

589:デフォルトの名無しさん
05/09/28 09:10:11
元々の話が>>573なわけで・・

590:デフォルトの名無しさん
05/09/28 14:17:11
Schemeばかり書いてると、関数呼び出しが関数呼び出しに
見えなくなるというか、全部継続へのジャンプに見えて来るんだよな。
それに関数とブロック(let)が頭の中でブレンドされて区別されなくなる。
そうすると自己末尾呼び出しだけ特別扱いしたりするのがとても不自然に
感じる。

まあ、Common Lispの空気に合わないってのはわかる。CLで書くときは
スタイルが変わるからな。


591:デフォルトの名無しさん
05/09/29 01:15:48
このスレこんなに人がいたのか(^_^ゝ)


592:デフォルトの名無しさん
05/09/29 03:42:33
>>588
仕様の問題ねぇ.改善の余地(個人的希望は >>587 な)があるとは思うが,
Scheme が The Right Thing だとは思わない.なぜなら,俺には区別したい
時があるからだ.最適化する,しないは選択したい.まぁ,その選択肢が
存在するのが不自然だと言われりゃしょうがねーけどなぁ.

ま,CL にも末尾再帰の最適化は実装依存だが,「ある」という事を言って
おきたかったわけ.

593:デフォルトの名無しさん
05/09/30 19:03:53
lispファイル用の良いアイコン知りませんか?

594:デフォルトの名無しさん
05/09/30 23:27:09
>>593
自作すれば。
↓雛型
(())

595:デフォルトの名無しさん
05/09/30 23:31:51
Planet Lisp のサイトアイコンは () だね

596:デフォルトの名無しさん
05/09/30 23:36:49
>>593
λ

597:デフォルトの名無しさん
05/10/01 00:34:23
(car cdr)
なんてどうだ

598:デフォルトの名無しさん
05/10/01 01:19:05
>>592
CommonLispで以下の相互再帰がループになる保障があるってわけじゃないでしょ?
こういうとこで根本的にコーティンングスタイルに関わってくるわけ。

(defun f(a) (g a))
(defun g(a) (h a))
(defun h(a) (f a))

(f f)

Schemeでトレースしたけりゃ末尾再帰の最後に適当な置石すりゃいいだけだし。
既存の処理系にも普通にバックトレースぐらい存在してるでしょ。

599:デフォルトの名無しさん
05/10/01 01:28:56
>>598
言いたいことはわかるけど、だからCommon Lispは駄目、Schemeが良い
という話をしたいのであればスレ違い。そもそもここはCommon Lispのスレ
なので、もうちょっと建設的に考えてほしい。

例えばCommon Lispで末尾再帰を強制するようなdeclareを提案するとか。

あと、念のために言っておくと相互再帰をループ化する最適化はさほど
難しくはないので多くの処理系がやっているはず。

600:デフォルトの名無しさん
05/10/01 01:51:26
>>599
あのな、CommonLispをどうこうしようってんじゃなくて、>>573の回答として
独自LISP勉強して作るぐらいならScheme作っとけって話。
CommonLispがどこまで最適化できるとか云々は別に興味ない。

601:デフォルトの名無しさん
05/10/01 01:55:45
>>598
そりゃ環境を問わずあらゆるCL処理系で動く必要のあるコードとかいうなら
仕方がないけど。元々の方向性が違うんだから仕様の問題というよりは
そういうスタイルでCLを選択する方が間違ってるんでは。

ちゃんと末尾再帰を最適化する処理系を使えばいい話でしょ?
相互再帰だろうが末尾再帰だろうが基本的に違いはないよ。
cmuclでも、declareも何もせずにreplからそのままdefunして直ぐにdisassemble
しても、ちゃんとジャンプになってるよ。


602:デフォルトの名無しさん
05/10/01 02:10:36
>>600
別に>>573氏はおまえが使う処理系を作ろうというんじゃないと思うぞ。w
おまえの好むScheme的スタイルをCommon LispスレでLISPの処理系でも
作ってみようかという奴にしつこく言う必要はあるまい。

603:デフォルトの名無しさん
05/10/01 11:21:07
>>598
すると,あなたは R5RS にないものは使わないのですか?
事実上標準だと主張しているのだが.メインストリームの商用
コンパイラで末尾再帰の最適化機能を持たないコンパイラがある
のかと.Scheme ではコンパイルについての規格がないから,
安心してコンパイルできない!! というくらいの心配症の人なら
まぁ,止めないけどね.

> Schemeでトレースしたけりゃ末尾再帰の最後に適当な置石すりゃいいだけだし。
残念な結末ですね.大規模なプログラムでそれが簡単な事だお思いますか?
末尾再帰の最適化を OFF にしたら Scheme じゃないんでしょ?
Scheme の処理系依存機能はよくて,CL の処理系依存機能はだめなんですか.

そんな事言うなら,CLOS 相当の機能がなく,したがって安全にオブジェクトの
定義を更新できないほうが嫌だ.

再帰というトンカチを手にすると他の全てが再帰に見えてくる.ループは
再帰の特殊系だけど,本来並列動作とかもあるから
(map fn lst)
を見て,再帰的な実装がまず第一に頭に浮ぶならもう一度良く考えたほう
がいい.


604:デフォルトの名無しさん
05/10/01 11:36:24
つうか,>>600 からしておかしい。

俺なんか既存の概念をくつがえすようなトンデモない
処理系を期待しちまうけどな。がんばって勉強しろーよ。
最初はショボくても独自 Lisp 上等。Lisp の進化の歴史を
学ぶもの一興。

まず自分で作ってみれば?ショボショボインタプリタとかでいいから。
つうか 573 を応援してやりたいが,情報がないな。
Lisp/Scheme の腕前と C の腕前はどーなんだろう。


605:デフォルトの名無しさん
05/10/01 12:02:37
馬鹿だなおめーらは

606:教えて厨
05/10/01 16:54:07
質問。
(-1 3 2 5 3 -3 -4)
というようなリストがあるとしますよね。
これを
((-1 -3 -4) (3 2 5 3))というように負数と正数で別々のリストに分類したい。
これ、負数だけとりだす関数と正数だけ取り出す関数を作って、
それをlistすれば簡単にできるけど、
再帰関数ひとつだけで作る方法もあるんだよね??
それってどうやるの?
letやlet*なんかでnilとかに初期化した変数って、再帰で呼び出すと
再帰呼び出し先でもまたnilとかになるの?
再帰呼び出し先で再帰呼び出し元での変数の値が引き継がれるような方法
があればうまくやれそうなんだけどなあ。
みなさんなら、どうやって再帰関数一つだけで、上のような処理を実装できますか

607:デフォルトの名無しさん
05/10/01 17:31:36
LOOPマクロ
(defun plus-minus (list)
(loop for x in list
if (>= x 0) collect x into plus
else collect x into minus
finally (return (list minus plus))))

再帰
(defun plus-minus (list)
(labels ((iter (l plus minus)
(if (null l)
(list (nreverse minus) (nreverse plus))
(let ((x (car l)))
(if (>= x 0)
(iter (cdr l) (cons x plus) minus)
(iter (cdr l) plus (cons x minus)))))))
(iter list '() '())))

608:デフォルトの名無しさん
05/10/01 19:49:26
質問させてください。
(setq a t)
とした変数aの真偽を連想リストに入れてやりたいのですがうまくいきません。
(setq b '((res . a) (res2 . ....)))
みたいにすると(cdr (assoc 'res b))はtではなくaを返すし
(setq b '((res . (eval a)) (res2 . ....)))などとしても同様です。
環境はxyzzyです。どうかお願いします。

609:デフォルトの名無しさん
05/10/01 20:16:30
(cdr (assoc 'res `((res . ,a))))


610:デフォルトの名無しさん
05/10/01 20:29:24
そんな説明なしで得意げに書かれてもな・・

611:& ◆6g4XpN.URU
05/10/01 20:35:27
>607

どうもありがとう。
ちなみにiterって初めてみるんだけど、どういう関数なの?

612:608
05/10/01 20:53:15
>>609
ありがとうございます。backquoteを使ってなんとかするということですね。
確かにまだよくわからないですが勉強します。

613:デフォルトの名無しさん
05/10/01 20:57:32
>>611
labelsの行をじっと見つめてみろ。

614:デフォルトの名無しさん
05/10/01 23:13:06
>>612
quoteしたら評価されないって言うことです。
quoteしないようにこんな感じで書けばOK

(setq a t)
(cdr (assoc 'res (list (cons 'res a))))

いちいちこう書くのは面倒だからbackquote構文が用意されてる
って感じかな。

615:デフォルトの名無しさん
05/10/01 23:15:33
言っとくけど、backquoteもマクロなんだぜ?
マクロって偉大だよなあ・・・

616:デフォルトの名無しさん
05/10/02 04:39:29
>>606
宿題だとすると labels の内部関数はつかっちゃだめかも?ということで
親切にも別解だっ.

;; 再帰関数一つ
(defun plus-minus (lst &optional plus minus &aux (x (car lst)) (xs (cdr lst)))
(cond ((null x)
(values plus minus))
((>= x 0)
(plus-minus xs (cons x plus) minus))
(t
(plus-minus xs plus (cons x minus)))))

;; メソッド一つ
(defmethod plus-minus-2 ((lst null) &optional plus minus)
(values plus minus))
(defmethod plus-minus-2 ((lst cons) &optional plus minus)
(if (>= (car lst) 0)
(plus-minus-2 (cdr lst) (cons (car lst) plus) minus)
(plus-minus-2 (cdr lst) plus (cons (car lst) minus))))


617:デフォルトの名無しさん
05/10/02 09:38:28
(defun partition (test lis)
(labels ((recur (lis in out)
(cond ((null lis) (values (nreverse in) (nreverse out)))
((funcall test (car lis))
(recur (cdr lis) (cons (car lis) in) out))
(t
(recur (cdr lis) in (cons (car lis) out))))))
(recur lis '() '())))

CL-USER> (partition #'(lambda (x) (>= x 0)) (list 1 -3 0 -2 9 -8))
(1 0 9)
(-3 -2 -8)


618:デフォルトの名無しさん
05/10/02 10:59:40
(defun partition (test list)
(let ((in (cons nil nil)) (out (cons nil nil)))
(let ((i-tail in) (o-tail out))
(dolist (x list (values (cdr in) (cdr out)))
(if (funcall test x)
(setf i-tail (setf (cdr i-tail) (cons x nil)))
(setf o-tail (setf (cdr o-tail) (cons x nil))))))))

619:デフォルトの名無しさん
05/10/02 11:40:15
(defun partition (pred lis)
(do ((lis lis (cdr lis))
(in '())
(out '()))
((null lis) (values (nreverse in) (nreverse out)))
(if (funcall pred (car lis))
(push (car lis) in)
(push (car lis) out))))


620:おしえて厨
05/10/02 23:47:39
clispをwinで使ってるんだけど、lispでウィンドウやダイアログボックスを
だすようなGUI作ることってできないの?できるとしたら
そういう情報はどこにある?

621:デフォルトの名無しさん
05/10/03 00:01:59
>>620
例えば URLリンク(www.wxcl-project.org)

622:デフォルトの名無しさん
05/10/03 01:27:27
できるよ.(621 は試したことないの別のネタで)
自分で Windows の API を呼べばいい.

A) FFI で必要な API をラップする (URLリンク(hocwp.free.fr) とか)
B) Lisp 向けの API を実装したライブラリを作る

ただし,どっちもある程度 C の知識がないと難しいかもね.

Corman Lisp とか AllegroCL や LispWorks といった処理系を使う手もある.
AllegroCL や LispWorks はどっちも GUI ライブラリを持ってるよ.

623:デフォルトの名無しさん
05/10/03 16:43:37
CommonLispにはpartitionがなかったのか…

624:デフォルトの名無しさん
05/10/03 17:56:31
R5RS には remove-if すらないけどね

625:デフォルトの名無しさん
05/10/05 15:05:45
質問です。
(my-reverse '(1 (2 3) (4 (5 6))))
を与えたら(((6 5) 4) (3 2) 1) と、
中身が全て反転するような関数my-reverseを定義するやり方を教えてください。
お願いします。

626:デフォルトの名無しさん
05/10/05 15:14:34
>>625
>>513-525

627:デフォルトの名無しさん
05/10/05 17:33:39
>>626
すいません。>>513-525を読んでもわかりませんでした。。


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