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


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

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



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

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

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

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


□テンプレート置き場□
ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)


276 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:19:57.98 ]
common lisp 入門
www.geocities.jp/m_hiroi/xyzzy_lisp.html#abclisp
このぐらいの分量でちょうど良い

277 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:23:37.47 ]
>>275
まえがきの「対象読者」から引用

> 本書は、GaucheやSchemeについてはよく知らないけれど、他の
> プログラミング言語でなら開発経験があるという読者を
> 主な対象にします。

ずぶの素人に独習で読ませたらEmacs導入のところで放りなげるよ

278 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:28:07.94 ]
そう言う意味じゃemacs Lispの入門書がプログラミング自体が初心者という人には良いのかもな


279 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:46:15.74 ]
>>272
エラーメッセージ詳しく。


280 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:47:09.38 ]
そうなるのか

281 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:50:52.09 ]
>>279
CL-USER 1 > (require "win-header")

Error: Unknown module "win-header".
1 (abort) Return to level 0.
2 Return to top loop level 0.

Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.

これです

282 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 00:59:15.38 ]
俺はグレアムのansi common lispで勉強したけど。あれで十分だった。
ただ、anti-loopistだからそのへんは理解しておいていいかも。
俺はいまだにloopは嫌いなくらい。

283 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 01:24:00.78 ]
>>281
LispWorks自体にはwin-headerなるモジュールは付属してない。
だから、"Unknown module"って言われてる。LispWorksのドキュメントにも、
Windows APIはサポートしてないから、自分でFLI使って定義してね、って書いてるし。

多分、そこのページにある、Appendix Aをwin-header.lispとか名付けてrequireして、
さらにdefpackageでwhを定義する必要がある。不完全なコードなので、即投げ捨てて良い。

こっちを読むべき。

www.lispworks.com/documentation/lw60/FLI/html/fli.htm

284 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 01:29:34.27 ]
>>283
なるほど、そういうことですか。
紹介して下さったfliのページを読んでみます
ありがとうございます



285 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 01:40:38.22 ]
Windows APIを直叩きしたいなら、Clozure CLが楽だと思う。
examplesのmswin.lispにウィンドウを表示するサンプルがある。

あとは、Doorsっていうライブラリが複数の処理系に対応してるけど、
ドキュメントないし、Quicklispにも収録されてないので、
ASDF知らないとインストールで引っ掛かるかも。

https://github.com/Lovesan/doors

286 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 01:56:11.75 ]
>>273
ごめん^^; 手習いシリーズは 詰将棋や 一人チェスの入門問題集みたいだったな。

287 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 07:50:41.67 ]
Little Schemer に一票 >> 初心者向け

しかも和訳でなく、原書の方。

英語版で読むと幼稚園児でも出来そうに見えるのに、
日本語版で読むと同じ内容でも小難しく感じる不思議。

288 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 10:49:20.43 ]
>>267>>268
そうかありがとう
どうしよっかな、買っちゃおうかな

289 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 12:40:20.45 ]
>>288
8章のサンプルは公開されてるから、それを読んでみて理解できるか確認すればよい。
平素な英語で書かれているので、初めての洋書としても向いてると思うけどね。

290 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 13:33:19.95 ]
英語でのある人のおすすめってこうらしい
carcaddar.blogspot.com/2011/10/common-lisp-is-best-language-to-learn.html
Between Land of Lisp, David Touretzky's Common Lisp: A Gentle Introduction to
Symbolic Computation (really great book for people new to programming,
available for free) and The Little LISPer (3rd edition, editions four and up
use Scheme) you have three really great resources to get started.

David Touretzkyの本はすでに絶版になっててオンラインでPDFで著者が公開してるくらい
しかない。金がなくて始めたいという人ならいいかもしれない。

291 名前:ミサワ mailto:sage [2011/11/01(火) 14:34:15.10 ]
つれー 日本語訳が小難しいからつれーわー 日本語訳が小難しいからなー

292 名前:デフォルトの名無しさん mailto:sage [2011/11/01(火) 19:11:45.82 ]
金がない場合は知恵がいる
知恵がない場合は金がいる

293 名前:初心者 mailto:sage [2011/11/02(水) 02:28:47.09 ]
レスさんくすです。

CLスレだけど、プログラミング初心者向けはschemeがいいみたいですね。

LispSchemeスレの過去ログみたらSCHEME餃子さんが、Gauche本、プログラミング言語 SCHEMEの後に
手習いシリーズ勧めてたみたいだけど、これはscheme初心者向けであってプログラミング初心者向け
の場合は逆になるって事ですね。

まずは>>276のサイトでCL勉強してみます。ありがとうございました。

294 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 19:54:50.09 ]
schemeならSICPは外せないだろ
英語版はWebで無料公開されてるし



295 名前:デフォルトの名無しさん mailto:sage [2011/11/02(水) 20:13:37.48 ]
SICPはSchmeの勉強のためには書かれていない

たいして勉強しないでもSchemeを使えるような奴のために書かれている

296 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 02:26:32.03 ]
windowsでecl-11.1.1を使っています。
Unicodeが使えるそうなので、ためしに"あ"を表示するスタンドアロンのプログラムを作っています。
REPLでは以下の通り実行することで、"あ"を表示することができました。

> (setf (stream-external-format *standard-output*) :cp932)
> (write-char #\U3042)

しかし、これをそのままコンパイルしてもうまく動きません。
どうすればできるか教えてください。
あと、"#\U3042"ではなく"#\あ"と書いても動かせる方法があればそれも教えてください。

297 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 04:18:23.74 ]
どのように上手く動かないか、情報が足りないから何とも言えない。
多分、コンパイル後コンソールで実行したら文字化け、ってパターンだと思うけど。

ECLってexternal formatのサポートが不完全だったと思うんだけど、それは直ったの?
リファレンスマニュアルの"13.2. Input/Output model"の部分。

> - No support for external formats. Reading and writing is performed using the 8-bit code of the character.
> - No support for Unicode characters. The code of large characters is simply truncated.

これが直ってないなら、利用するエンコーディングのバイト列に自分で変換して、
write-sequenceとかで出力しないといけないけど。

とりあえず、コンソールで動かしたときのexternal formatの値をprintするとか、
出力されたデータを16進表示してどのエンコーディングか判断したりとか、
問題の切り分けから始めてみるのを勧める。

298 名前:296 mailto:sage [2011/11/03(木) 15:57:48.85 ]
external formatのサポートについては知りませんでした。
気長にやってみます。
ありがとうございました。

299 名前:デフォルトの名無しさん mailto:sage [2011/11/03(木) 23:30:38.58 ]
ECLを使ってるのがコンパクトな実行形式を作るためなら、
SBCLに移行して、圧縮したコアイメージで実行形式を作るっていう手もあるよ。
SBCLならその辺りのサポートはきちんとしてるし、圧縮率も割と良いみたい。

300 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 09:40:41.36 ]
ポールグラハムの話で時折出てくるロバートモリスって、
sendmailワームの人?

301 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 09:57:12.99 ]
そうだよ。

モリスがその事故起こした時に相談受けていろいろ動いたりした「友人」ってのがポールグレアム。

302 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 11:45:26.42 ]
そうなんだ
ありがとう

303 名前:デフォルトの名無しさん mailto:sage [2011/11/05(土) 15:12:25.63 ]
うちのVAX11感染したの思い出した


304 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 12:47:58.86 ]
>>303
おっさん乙



305 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 13:10:18.71 ]
マクロをapplyするにはどうしたらいいんでしょうか
こんな感じのことがしたいんですが。
(let((a '(true 1 2)))(apply if a))


306 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 13:33:18.66 ]
(let ((a '(true 1 2))) (eval `(if ,@a)))

307 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 19:24:21.74 ]
そういう風にevalを使うのは、某文書の言う所のレッドフラッグってヤツだと思う。
実行時にメタプログラミングをしてたりするなら話は別だけど。

質問自体が最初に結論ありきな感じだけど、>>305は本当にifをapplyしないといけないの?
実はifの上に単純なマクロを構築すれば良い話だったりしないかな。

308 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 21:39:17.26 ]
>>305
CLHSみるとifはoperatorであって、どんな実装になってるか規定されてないわけだが
なぜifがマクロだって思ったんだ?


309 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 18:13:10.80 ]
まさにこの話だと思う

apply-macroの話
ttp://e-arrows.sakura.ne.jp/2010/12/common-lisp-apply-macro.html

310 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 18:34:52.87 ]
関数とマクロとスペシャルフォーム
Lisp で一番ややこしい部分だと個人的に思っている。

311 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 18:37:18.98 ]
マクロあるいは特殊形式のapplyてどういときに嬉しいんだろ

312 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 22:45:04.56 ]
関数・マクロ・special operator の区別がついてないときに嬉しい

…と、昔の自分を思い出してそう思った。
ややこしい部分ではないんだけど落とし穴になりそうな概念だとは思う。


313 名前:デフォルトの名無しさん [2011/11/14(月) 08:17:17.68 ]
Lisp中級ぐらいになるには
だいたいどの位の期間が必要ですか?

314 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 08:41:17.56 ]
計算機科学の素養があれば一ヶ月もあれば中級Lisperになれると思うけど、
プログラミング経験ゼロからのスタートなら数年はかかると思う。



315 名前:デフォルトの名無しさん mailto:sage [2011/11/14(月) 11:14:44.24 ]
>>313のいう初級中級上級の定義はわからないけど、shiroさんところに”ネタ”として
10段階に分けたページがあったな。

316 名前:デフォルトの名無しさん mailto:sage [2011/11/17(木) 22:47:48.09 ]
普段大学でcommon lispを習っていて、emacsでslimeを起動して勉強しています。
自宅でもやりたいなと思い、ubuntu11.10を導入してemacs23とslimeをインストールして
起動まではできました。

そこで大学で書いたプログラムをロードしようとしたら、
The value 1985828 is not of type (MOD 1114112).
[Condition of type TYPE-ERROR]
このようなエラーが出たのですがどういうことでしょうか?
大学では何も問題なく、動いてたプログラムです。
色々調べて見たのですが解決法がわかりません。
どなたか回答よろしくお願いします。

317 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 00:01:03.56 ]
>>316
大学の処理系は64ビットで、自宅の処理系が32ビットだったりしない?

www.lispworks.com/documentation/HyperSpec/Body/t_mod.htm

を読んでもらうと分かると思うけど、1114112より小さい正の整数しか許されない型に、
1985828を値として渡してエラーになってる。コードが変わっていないなら、
処理系やOSなどが原因で、リミットに引っかかっている可能性が高い。

とりあえず、SLIMEなら下にスタックトレースが出ると思うんだけど、
上から10個くらいはどうなってる? どっかで見た数なんだけど、思い出せない。

318 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 00:04:47.80 ]
ああ、分かった。Unicodeだ。#x110000。

ファイルやネットワーク通信のデータとかに、適切じゃないデータが入ってるとか、
code-charに変なデータ渡してるとか、external formatの設定が適正じゃないとか、
その変はどう?

319 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 00:13:08.90 ]
>>317
大学も自宅も32bitマシンです。

適切じゃないデータは入ってない・・・と思います。
code-charやexternal formatについてはよく分かりません。
すみません・・・。

320 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 00:21:06.60 ]
>>319
とりあえず、処理系の名前は?

それと、エラーが出たとき、「Restarts:」の下に「Backtrace:」ってのがあって、
そこに番号振ったS式が出て来るよね? それの0〜10くらいまで晒してくれない?
それによって、どういうコードでエラーが発生してるのか分かる。

10まで表示されてないよ、って場合は「--more--」までカーソル持ってくと、
次のが出て来る。

321 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 00:24:04.98 ]
>>320

処理系はどちらもSBCLです。

Backtrace:
0: (SB-KERNEL::OBJECT-NOT-TYPE-ERROR-HANDLER ..)
Locals:
SB-DEBUG::ARG-0 = :<NOT-AVAILABLE>
SB-DEBUG::ARG-1 = #.(SB-SYS:INT-SAP #XB5E0E470)
SB-DEBUG::ARG-2 = #<SB-ALIEN-INTERNALS:ALIEN-VALUE :SAP #XB5E0E12C :TYPE (* ..)>
SB-DEBUG::ARG-3 = (399 16)
1: (SB-KERNEL:INTERNAL-ERROR #.(SB-SYS:INT-SAP #XB5E0E12C) #<unavailable argument>)
Locals:
SB-DEBUG::ARG-0 = #.(SB-SYS:INT-SAP #XB5E0E12C)
SB-DEBUG::ARG-1 = :<NOT-AVAILABLE>
2: ("foreign function: call_into_lisp")
[No Locals]

Backtraceにはこれしか書いていません。


322 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 00:29:01.94 ]
SBCLのFFI APIでエラーが起きてる。FFI使ってる?
Cのライブラリのバインディングか何か?
コードを晒すことって可能? エラーが起きる場所が把握できてるなら、
そこだけでも良い。

323 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 00:35:36.75 ]
>>322

FFIとはなんでしょうか?
コードは800行あるので全部は晒せません。
またエラーが起きてる場所も自分では把握できてないです。
何もわかってなくてすみません。

324 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 00:47:26.79 ]
>>323
Foreign Function Interface。LispからCの関数を呼んだりする仕組み。
分からないのは最初はみんなそうだから気にせんで良いよー。

単にコードの大きさが問題で貼れないなら、

paste.lisp.org/

とかGist(https://gist.github.com/)でも大丈夫。

エラーが起きてる場所は普通バックトレース(スタックトレース)とかで把握するけど、
それで分からないなら、(print "function-xx: in")みたいなのを関数の最初に追加しても良い。

実行はどういう風にしてるの? C-c C-c? C-c C-e? それとも*slime-repl sbcl*から?



325 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 00:56:05.59 ]
FFIというは多分使ってないと思います。
コードはこれで見れるでしょうか?
https://gist.github.com/1373494

実行は
emacs開く
M-x slimeでslime起動
C-c C-lで上のコードをロードする。
するとロード中に当初のエラーが起きます。

326 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 01:03:32.25 ]
>>325
こっち(Windows XP SP3、SBCL 1.0.52)で評価したけど、普通に通るコード。

原因が分かった気がする。保存したファイルの文字コードがEUC-JPじゃない?
EmacsでC-x RET fして、utf-8-unix指定した後で保存して、再度ロードするとどうなる?

327 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 01:10:33.26 ]
>>326
できました!!
ありがとうございます!
ファイルの文字コードが大学と自宅じゃ違ったということでしょうか?
これは自動で変換してくれたりはしないのでしょうか?
毎回指定して保存しなければならないのでしょうか?

328 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 01:15:38.92 ]
>>327
おめでとう。お疲れ様。

ファイル自体のエンコーディングが大学と自宅で違ったか、
処理系の標準のエンコーディングの設定が大学と自宅で違ったかだと思う。

sb-impl::*default-external-format*を.sbclrcで設定したり、
slime-net-coding-systemを.emacsで設定したりすることで、
自分の普段使ってるエンコーディングを標準で使うことができるよー。
これらのキーワードでグーグル先生に尋ねれば、色々出てくると思う。


329 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 01:21:37.56 ]
>>327
本当にありがとうございました。

エンコーディングについては自分で調べて努力してみます。

330 名前:デフォルトの名無しさん mailto:sage [2011/11/18(金) 17:23:12.67 ]
dig 2ch.net | grep 2ch | tail -n 1 > get.dat
cat get.dat
2ch.net. 8 IN A 206.223.154.230

このget.datを読み込んでリスト化ってどうやりますか?

331 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 00:10:57.50 ]
>>329
ソースの一行目に";; -*- coding:utf-8-unix -*-"とかコメント行を入れるといいかも。

332 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 00:27:26.94 ]
SBCLもそれ解釈してくれるの?


333 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 00:40:17.53 ]
>>330
(with-open-file (s "get.dat")
(mapcar (lambda (x)
(ppcre:split "\\s+" x))
(loop for l = (read-line s nil) while l collect l)))
;=> (("2ch.net." "8" "IN" "A" "206.223.154.230"))


334 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 01:36:27.02 ]
>>333
ありがとうございます。lambdaとmapcarってこうやって使うんですね。



335 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 02:12:07.73 ]
(cadddr (with-open-file (s "get.dat")
(mapcar (lambda (x)
(ppcre:split "\\s+" x))
(loop for l = (read-line s nil) while l collect l))))
引き出せないのはなんで?
(cadddr (loop for x from 1 to 10
collect (loop for y from 1 to x
collect y) ))
;;=> (1 2 3 4)

336 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 06:48:52.64 ]
おはよう。1要素しかないのにcdrのcdrのcdrのcarを参照してるから。
(("2ch.net." "8" "IN" "A" "206.223.154.230"))のcdrはnil。
nilのcdrはnilで、そのcdrもnil。nilのcarはnil。

(defparameter *lines*
(with-open-file (s "get.dat")
(loop for l = (read-line s nil)
while l collect (ppcre:split "\\s+" l))))

(caar *lines*)
;=> "2ch.net."
(cadar *lines*)
;=> "8"

普通は頭が混乱するので、firstやsecond、eltなどを使う。

(let ((first-line (car *lines*)))
(values (first first-line) (second first-line)))
;=> "2ch.net.", "8"

(let ((first-line (car *lines*)))
(values (elt first-line 0) (elt first-line 1)))
;=> "2ch.net.", "8"

337 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 06:55:42.53 ]
個人的な好みとしては、最初から要素の数が分かってるときは、構造化代入。

(let ((first-line (car *lines*)))
(destructuring-bind (a b c d e) first-line
(values a b c d e)))
;=> "2ch.net.", "8", "IN", "A", "206.223.154.230"


338 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 08:03:06.33 ]
>>336-338
おはようございます。詳しい解説ありかどうございます。
ボーっとしていたのか、二重被りだと気づきませんでした。listpでTが返って来たので頭の中が
混乱しました。一回carでむけばよかったんですね。first, second関数は知りませんでした。eltは
勉強した気がするけど忘れていました。
答えなくても良いんですが、多値を返す関数の多値をリスト化する方法ってどうやるんですか?
(list-fn
(let ((first-line (car *lines*)))
(destructuring-bind (a b c d e) first-line
(values a b c d e)))
)
==> ("2ch.net." "8" "IN" "A" "206.223.154.230") ;;という結果が欲しい
あと多値を返す関数を少ない or 多い多値にするのはどうやるんですか?
(low-values
(let ((first-line (car *lines*)))
(destructuring-bind (a b c d e) first-line
(values a b c d e)))
)
;=> "2ch.net.", "8", "206.223.154.230" ;;という結果が欲しい
(round 8 3)の二番目だけをformatで出力することもできるんでしょうか?
あとリストで弄った方が楽な気がするんですが、多値で返すのとリスト内で多値を返すのと違いって
なんかあるんですか?

339 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 08:31:19.07 ]
(multiple-value-list (values 0 1 2))
;=> (0 1 2)

;; 使わない部分は単に無視する
;; そのままだと警告が出るので、ignore宣言で使わないことを明示する
(multiple-value-bind (a b c d e) (values 0 1 2 3 4)
(declare (ignore b d))
(values a c e))
;=> 0, 2, 4

(multiple-value-bind (_ remainder) (round 8 3)
(declare (ignore _))
(format t "~a" remainder))
;-> -1

多値の利点は主に速度と最初の値以外を単に無視できること。
あるいは、足りない値を自動的にnilで埋めてくれること。
リストの方が多くの場合で柔軟だと感じるのは正しい。

;; リストだと一度分解しないといけない
(+ (truncate 1.5) 2) ;=> 3

;; 返ってきた値が足りない場合nilで束縛される
(multiple-value-bind (a b c) (values t)
(list a b c))
;=> (T NIL NIL)


340 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 08:44:51.16 ]
自己解決しました。
(multiple-value-bind
(i1 i2 i3 i4 i5)
(let ((first-line (car *lines*)))
(destructuring-bind (a b c d e) first-line
(values a b c d e)))
(list i1 i2 i3 i4 i5))
(multiple-value-bind
(i1 i2 i3 i4 i5)
(let ((first-line (car *lines*)))
(destructuring-bind (a b c d e) first-line
(values a b c d e)))
(values i1 i3 i5))
(multiple-value-bind
(q r)
(round 3)
(format nil "~s" r))
ttp://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp17.html

間に合いませんでしたか。さーせん。

341 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 09:10:25.20 ]
いや、自己解決してくれた方が良いから気にしないで。
こっちの復習にもなるし。

あと、使わない変数には警告が出ると思うんだけど、
(declare (ignore ...))とかで消しておいた方が良い。
そうしないと、本当に変数を使い忘れてるのを見落とす原因になるし、
コードを読む人への手助けになるという利点があるから。

そこのサイトは良い入門なので、参考にすると良いよー。


342 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 10:45:32.41 ]
>>341
スクリプトの使い捨てない度はピンキリですが、(declare (ignore ...))もそうですが、他の警告文もすぐに消していますか?
あとdocumentationも書き始めから積極的に書いてますか?

(defun f (x)
"compute f value"
...)
> (documentation 'f 'function)
"compute f value"

というか、(documentation 'documentation 'function)で引けばよかったのか。わざわざWebにアクセスしていたw

343 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 13:03:56.48 ]
>>342
人によりけりだと思うけど、再利用するコードなら自分は警告は可能な限り消す。
バグに発展したら嫌だし、重要な警告が埋もれるし。

docstringは仕様が固まるまでは書けない。最初のうちはどんどん構造も変わるし、
その都度書き直しとか面倒に思えて。ただ、目的が明確なものなら最初に書いてる。

(deftype octet ()
"An octet. An alias of (unsigned-byte 8)."
'(unsigned-byte 8))

みたいなのとか。

あと、SLIMEならC-c C-d dとかC-c C-d fとか、シンボルの上でやってみると幸せだと思う。

common-lisp.net/project/slime/doc/html/Documentation.html#Documentation


344 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 18:45:39.05 ]
>>343
回答、ありがとうございます。
今まで仕様が固まっていないという理由で警告文もないがしろしていました。今日まで警告文の消し方を
知りませんでしたが。職業プログラマでもないし、長い行のブログラムを書いたことがないので不遜なん
ですがdocstringはprovisional(y)という単語を独自略語でPRVと書いて0.5秒考えてざっくり書いていけば
良いんではないのかなとちょっと思いました。現実世界の法律文もそうですが形骸化しちゃうのは割り切る
しかないのかなと思います。PRVも10段階ぐらいのレベル機能つけてどの程度の完成度を明示する。あと
"Mon May 23 23:41:00 JST 2011"みたいなのを付加して、弄るごとに"Mon May 30 15:41:00 JST 2011"みたい
なのを追記して、弄った履歴と最終更新日時で昇順・降順で飛んでいける機能、最終更新日時で指定日時から
指定日時までを昇順・降順で飛べる機能、人に見せたくないメモドキュメント機能、ソースを人に渡す時は人に
見せたくないメモドキュメント・日時関連を除去できる機能があると10年後に読むハメになったときに便利で読む
コスト低減につながるのかなあ。
10年、20年単位で保守・管理する代替ツールってあるんでしょうかね。

ttp://ejje.weblio.jp/content/%E4%BB%AE



345 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 20:48:04.55 ]
頑張ってる所に水を差すようで悪いけど
どの行を誰がいつ編集したのかは最近のSCMを使っていれば(大抵はblameという名前のサブコマンドで)調べられる
あまり凝ったルールは時間が経つと守られなくなっていく
docstringに全ての情報を詰め込む必要もない、コメントで書けばいい
「これから変わるかもしれない」目印は英語だとTBD(to be doneなどの略。探せば他にも出てくるが、大抵は「まだ○○してない」の意味)とか
Subject to changeと書く場合が多いから、無意味に独自ルールを作らない方が良い

346 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 20:58:08.36 ]
docstringは、その関数、スロット、クラスを使う人のために書くもんで、
開発する人のためにあるわけじゃないから。

347 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 21:23:13.20 ]
>>346が大前提だねー。メタ情報とかの諸々は外部で管理した方が良いと思う。
docstringが長くなると、画面あたりの情報量が減って、可読性が大幅に下がるし。

10年、20年単位で保守・管理するためのツールがSCMやissue trackerとかで、
情報の管理もそちらで行うのが常識になってる。

最近はみんな、趣味のコードの管理にはGitHubかBitbucket使ってるよね。


348 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 21:30:20.61 ]
>>347
たいてい何変えたよだけで、結局「ソース読め!!!」じゃん


349 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 21:39:08.23 ]
ソースコード読んでない関数は使わない人キタ━(゚∀゚)━!

350 名前:デフォルトの名無しさん [2011/11/19(土) 22:13:01.27 ]
だれ?

351 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 22:18:29.20 ]
>>348
issue trackerやSCMを絡めて、変更の背景とか議論の経過とか、
付加的な情報も集約して管理しましょうよ、という流れがある。
今まで紙の書類とか、担当のコンセンサスで管理してたようなの。
CVSとかChangeLogの時代から運用もツールも大分前進したと思う。

そっち関連のスレとか見れば色々話してるんじゃないかな。


352 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 22:30:04.62 ]
>>351
「声のでかいやつが勝」的、要素も多分にあるけどな


353 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 16:53:43.60 ]
prin1みたいに奇妙な関数名の由来についてまとめたページはありませんか
と質問する前にぐぐってみたら

groups.google.com/group/comp.lang.lisp/msg/2cdc4d3323d979d4
cadr.g.hatena.ne.jp/g000001/20080116/1200413261

354 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 20:12:02.07 ]
>>345
所詮は文字なんて記号でしょ。容易に置換可能にしておけば用語変更は楽でしょ。
他人に渡すときに除去が容易でしょ。あとこれぐらいで凝ったルールとか言い出す
人は何も守れないでしょ。
個人開発のちょうど良い版管理システムってないのかね。git, subversionにも移行が容易な。
>>346
人に見せる予定がなかったら何ヶ月後、何年後かの自分しかみないし、docstringの
超変態的な使い方から新しいアイデアも生まれるんじゃないの。他人に迷惑かけて
いないんだからダイナミックなオナニーするのは自由だよ。
>>347
123/foo.lisp, 234/foo.lisp, foo/foo1.lispとかもGitHubを使っているの?
復数人開発前提みたいでシステムとして大きいし、ツールとして使い辛そうなんだけど。



355 名前:デフォルトの名無しさん mailto:sage [2011/11/20(日) 21:37:30.72 ]
>>353
直接は関係ないけど...

大昔はキャラクターの幅が6bitで, ワードマシンのワードサイズが6Nだった.
当時の大型機が採用していたワード=36bit[1]基準だと6キャラ以下のシンボル
なら1ワードに収まる.

ってな理由で, 古くからある関数は名前が短いんだそうだ

[1] IBM, ハネウェル, GE, DECのPDP6系列あたり


356 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 03:39:04.72 ]
>>354
実際にGitとかMercurial、Bazaarとかを使ってみたことはある?
使って問題を感じるなら良いけど、「使い辛そう」って思ってるだけなら、
試してからでも遅くないんじゃないかな。個人的な印象では、そう悪くない。

あと、単に管理が不要でad hocにディレクトリで分けて管理しているのか、
そういう手法しか知らないから、それが良い手法と信じてそうしているのか、
そういった違いは区別した方が、より良い判断ができると思う。

ついでに、これは余計なお世話かもしれないけど、先人の存在を忘れない方が良い。
Lispはこれまで多くの人に何十年も使われてきた言語で、数多くの研究がされてる。
そういう手法が定着してないという事実の意味を考えてみても良いかもしれない。

まあ、最終的には個人の趣味だから、好きな結論を選んで好きにすれば良いと思う。
>>345>>346も、興味があるようだったから、Lispなどの一般的な文化を紹介しただけで、
実際は君がどこで何をしてても何も言わないから、気にしないで大丈夫。

357 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 10:56:24.05 ]
CVSやSubversionは個人で使うには少しやり過ぎな印象が強いが
DVCSはpull/pushの時以外は元々自分のマシンに閉じたツール

GitHub・BitBucket・Launchpadなども個人で使って何か不都合があるわけじゃない
$HOME内の設定ファイルという、複数人でいじることは滅多にないデータを突っ込んでる人もあちこちにいる

変更の理由を変更点と関連付けてメモしておいて、後からログを参照して巻き戻せる
ちょっとしたバックアップツールくらいの気持ちで使ってみたらいい
無理強いはしないし、できないが

358 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 14:30:57.79 ]
.emacsや.vimrc/.vimの管理にかなり重宝してるけどな。git
hgも悪くはないけど。小回りはhgのほうが聞くかも。

359 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 20:32:21.09 ]
>>358
hg良いんだけどちょっとリポジトリがでかくなると重たい感じする(グラフィックとかも突っ込んでるからなんだけど)
gitが今のところ楽なんだが、Windowsで手も足も出なくなる事がある(多バイトコード含むファイル突っ込まれた時)
そういう所見でだとsvnはまだまだ行けると思ってる


360 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 22:00:38.42 ]
githubが使いやすそうなんだけど、OSSホスティングってこんなにあるんだな。急成長率で言うと
githubの伸びが良いの?
あと無料会員はソース等のムーディストビーチみたいなんだけど、こういうのが流行っているの?

ホスティングサービスを3つアカウント作ると思うんだけど、他におすすめありますか? BitBucket、Launchpad?
ttp://en.wikipedia.org/wiki/Comparison_of_open_source_software_hosting_facilities
ttp://ja.wikipedia.org/wiki/OSSホスティングサービスの比較

361 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 22:41:28.73 ]
lispのプログラムをどうやって保持というか管理すればいいかとは
確かに悩んでいる
といっても趣味でやっているプログラムだし、仰々しいことはできないけど
やっぱり分散システムなのかね

362 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 22:53:09.21 ]
>>361
gitはリポジトリを落としてインストール専門なんだけど、git自体で管理したことない
からわからないけど調べた感じだと、githubはローカルで管理してnfsマウントして
コピーするみたいな手軽にできるバージョン管理みたいだね。付加情報もつけられる
困ることはないようだ。Webにあげるとヌーディストビーチというのを意識していれば
それ以外は気にすることはないんじゃないかな。
自分はブログラムもそうだけどTeXで物書きもしたいから良いバージョン管理がないかなと
漠然と探していたけど、これがベストとは思わないけどかなりベターではあるのかな。

363 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 23:07:23.06 ]
>>362
>Webにあげるとヌーディストビーチ
そうか、完全にクローズドな環境ではないんだね
人様に見せるのは恥ずかしいから出来るだけ表に出したく無かったんだけど
利点の方が重要かも
利用する方向で考えてみます

364 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 23:12:26.53 ]
>>363
一番安いので5個のプライベートリポジトリ作れる
無料のはまぁヌーディスとビーチだけど




365 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 23:13:24.05 ]
>>363
うん 個人情報が絡むgitなどでのバックアップはxreaやsakuraを使ったほうが
いいよ。お金を出してでもね。xreaでgitやhgを扱うのは少々トリッキーなこと
が必要だけどな。

366 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 23:14:56.25 ]
UBC(カナダの太平洋岸の大学)の近くにヌーディストビーチがあるのを思い出したわ。

367 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 23:32:04.87 ]
>>361 個人専用かつ大規模でない場合はrcsで十分だったりしないか?


368 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 23:46:07.10 ]
>>364
7ドル/月って高くない?
最低価格有料会員21ドル/年ぐらいでいいような気がする。
下で謳っている以外で有料会員と無料会員との差別化としてどういう機能があるの?
ttps://github.com/plans

369 名前:デフォルトの名無しさん mailto:sage [2011/11/21(月) 23:51:57.31 ]
>>367
gaucheの中の人もgitに移行したし、navi2chもgitだよね。slimeもgitだっけ?
まあ、せっかくだしアカウント作ってちょっと触っておいて損はないかなと思っている。
化石ツールでも全然個人レベルだと全然管理できるポテンシャルを持っているのはわかって
いるんだけど、世の中に一度流されるのもありかな。


370 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 00:10:59.88 ]
公開するものはgithub、非公開のものはbitbucketと使い分けている。

371 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 02:16:13.72 ]
>>360
勢いで言えば、GitHubが一番だと思う。次いでBitbucketかなー。
少なくともCommon Lispの世界では。CL-PPCREとかHunchentootも移ったし、
SBCLのWindows forkとかもこっちだし。

GitHubとBitbucketの二者とLaunchpadは性格違うので注意。
前者はあくまでも個人にフォーカスしてて、後者はプロジェクトにフォーカスしてる。
Launchpadはどちらかというと、Google CodeとかSFの競合。

GitHubとBitbucketなら、片方ミラーにしつつ、両方同時に使う手もある。
BitbucketはGitに対応してるし、MercurialでもHg-Git経由でGitHubを利用できるので、
リポジトリは共通のまま両方にpushするだけ。

372 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 02:28:58.29 ]
ただ、issue trackerはLaunchpadがかなり高機能なので、
人一倍きめ細かいタスク管理が好きなら合うかもしれない。
例えば、SBCLの公式はバグの管理だけLaunchpadを使ってる。

分散SCMをCLで使ってて思うのは、SLIMEとREPLどっぷりなので、
機能ブランチとかissueブランチを細かく作りまくって作業すると、
今現在どのコードを使って作業してるか本気で訳分からなくなる。
code.lisp、code.lisp<1>、code.lisp<2>、code.lisp<3>とか何がどれよ、
みたいな。結局バッファ切り替えにC-x bじゃなくてC-x C-f使ったり。
この辺はひと工夫要りそう。

373 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 02:59:43.45 ]
GitHub, Bitbucket, Launchpadで学習コストは基本的操作マスターレベルで各何時間なのか、
中級者的使い方で各何時間なのかを想像でいいので教えてください。そして、基本的操作
マスターレベル、中級者レベルで恩恵(効果)の違いを100点で評価を教えてください。
GitHub, Bitbucket, Launchpadのアカウントを作って3つとも触る予定ですが、そこまで
調査コストをかけられずにサービス比べをやめてしまうかもしれません。

Launchpadの「かなり高機能なので、人一倍きめ細かいタスク管理」できるのはうれしいん
ですが、学習コストが他のサービスよりかける必要がありそうですし、管理コストが膨れ
上がりそうで怖いです。でも、会員数が200万アカウントでしたっけ。1人平均2アカ作って
いるとしても100万人は優秀ですね。杞憂なのかな。

374 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 08:08:43.49 ]
こういうサービスで2垢作るかな?
それはともかく、どのサイトも機能の概要ページがあるんだから、一通り眺めて決めればいい

基本はGitを使ってるならGitHubかBitBucket、Mercurialを使ってるならBitBucket、Bazaarを使ってるならLaunchpadだが
上にもあるようにBTSだけ使うとか、複数サイトにミラーを置くこともできる
(ミラーは興味を持つ人がある程度存在するプロジェクトでやることが多いが、
一つのサイトがダウンしている間も大きな支障が出ないという側面もある)
確か、Bazaarにもbzr-gitとかbzr-hgがあったよな



375 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 08:16:05.70 ]
>>372
そのエディタはモードラインやステータス行にブランチ名を表示できないのか?

376 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 08:21:48.52 ]
LunchpadはUbuntuとのつながりも深いしね。






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

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

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