[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 23:20 / Filesize : 244 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【入門】CommonLisp【質問よろず】



1 名前:デフォルトの名無しさん mailto:sage [04/11/25 21:48:56]
lispを触ってみたい入門者のQ&A
初心者のQ&A
本スレでは恥ずかしくて聞けない人のQ&A
本スレは高度すぎて割り込めない人のQ&A
linuxでなくてwindowsでやりたいんですが・・・Q&A
lispを使用してC#やJAVAの代替にするための方法(おまけ)

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

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

231 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/01/22 08:46:33 ]
>>232
> 型書いたらちゃんと最適化してくれる?
言語仕様上は要求されていないが、最適化してくれる処理系は存在する。

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

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

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



236 名前:デフォルトの名無しさん mailto:sage [05/01/22 08:51:19 ]
>>233 関数の戻り型ってどう書くの?
www.lispworks.com/documentation/HyperSpec/Body/d_ftype.htm
(declare (ftype (function (number) float) sine))


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

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


238 名前:デフォルトの名無しさん mailto:sage [05/01/22 09:03:51 ]
>>234
たとえば、「Practical Common Lisp」の
21. Programming in the Large: Packages and Symbols
www.gigamonkeys.com/book/programming-in-the-large-packages-and-symbols.html
とかね。俺は読んで無いんで内容の保証はできんけど。

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



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

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

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

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


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

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

244 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/01/23 09:23:55 ]
246の続き。
CL-USER> (shadowing-import 'my-package:func) => T
CL-USER> (func) => 144


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

namespace my_util{.....}

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



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

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

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

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

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

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

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

255 名前:デフォルトの名無しさん mailto:sage [05/01/24 12:37:12 ]
Jabberwocky: javaで書かれたlisp IDE
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: 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 名前:デフォルトの名無しさん mailto:sage [05/01/24 15:07:03 ]
>>253
mod_lispは外部のプロセスと通信する単なるスタブみたいなもん。
プロトコルを守れば、好きなLisp実装が使えるし、別にLispで無くたっていい。



257 名前:デフォルトの名無しさん mailto:sage [05/01/25 02:26:20 ]
>>250
ほい
pc5.2ch.net/test/read.cgi/tech/1106587515/l50

258 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/01/26 10:20:15 ]
ククク・・・
どっか外のaが潰れてるだけだよ

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

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


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

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

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


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

266 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/01/27 05:04:48 ]
2chではなくて、学内のお友達と相談しながら
解決するのがよろしいかと。

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

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

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

呼べないのかな



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

271 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:age [05/01/27 16:32:14 ]
age

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

276 名前:デフォルトの名無しさん mailto:sage [05/01/28 09:07:27 ]
>>275
30.8.2. Pipes
clisp.cons.org/impnotes.html#pipe

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

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

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

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



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

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


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

283 名前:デフォルトの名無しさん mailto:sage [05/01/29 21:20:19 ]
次の患者さんどぞ〜

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

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

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

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

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

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




290 名前:デフォルトの名無しさん mailto:sage [05/02/01 20:54:30 ]
そろそろでつね。行く人れぽよろ
jp.franz.com/base/seminar-2005-02-03.html

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


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

293 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/02/02 20:51:48 ]
intern
unintern

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

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

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

(hashmap obj "KEY" "OBJECT")

みたいな

299 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/02/04 00:14:26 ]
ハッシュテーブルあるよ。
データ構造でなくJavaのHashMapが質問に出てくるところがなんだかなー。


302 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/02/04 14:09:51 ]
ふむふむ。
今度はfind-method/remove-methodでやってみます。
今まではシンボルごとuninternしちゃってました。
どうもありがとうございました。


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

306 名前:デフォルトの名無しさん mailto:sage [05/02/04 16:11:50 ]
>>305
テンプレ嫁
pc5.2ch.net/test/read.cgi/tech/1100229366/

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

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

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




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

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

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

MOPの仕様は公開されているので読んでみてはいかが?
www.lisp.org/mop/index.html

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

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

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

dylanって何?

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

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

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

dylan
pc5.2ch.net/test/read.cgi/tech/1004242854/

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


319 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/02/13 18:26:58 ]
319を見て318はダメな理由が思いつくかしらね、と。

321 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/02/14 08:44:13 ]
上の例での動作がプログラマが望むものであるときもnconcを使うよね。

323 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [05/02/14 23:28:54 ]
気味が悪いくらい皆親切だな。何かあったのか?

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

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

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

328 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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")
となるようしするにはどうすればいいんでしょうか??






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef