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)
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とのつながりも深いしね。
377 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 09:22:13.33 ] >>372 独自仕様でemacs lispを組んでemacsの下の2行の所に半角20文字ぐらいコメントできるようにして文字数制限のないコメントを コマンド打つと出てくるようにするといいかもね。toggleで表示・非表示もできるようにすれば邪魔なときは非表示にすればいい。
378 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 19:31:53.16 ] コード例plz
379 名前:デフォルトの名無しさん mailto:sage [2011/11/22(火) 22:36:11.95 ] なんとかmodeみればあるよ。的な?
380 名前:デフォルトの名無しさん [2011/11/23(水) 07:45:48.63 ] 再帰処理てどう考えたら理解できますか?
381 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 08:09:41.10 ] >>380 深く考えずに、単なる関数呼び出しだと理解すれば良い。 (defun fact (n) (if (= n 1) 1 (* n (fact (- n 1))))) 単に呼んでる関数が自分自身だったっていうだけ。 イメージが掴みにくいなら、(trace fact)してから実行してみて。
382 名前:デフォルトの名無しさん [2011/11/23(水) 08:16:50.07 ] >>381 ありがとございました。
383 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 08:29:34.76 ] そして上のfactの定義は忘れるんだ。 (defun fact (n) (if (= n 0) 1 (* n (fact (- n 1))))) こっちで。 0! = 1とか素で知らなかったんだよ! 中学生以来の衝撃だよ! 何でみんな0まで回してんのwwwとか思ってたよ!
384 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 09:16:43.33 ] >>383 www
385 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 23:31:43.68 ] ふとしたことで積ん読してたPAIPを読み始めたんだけど、 なかなか面白い本だね。
386 名前:sage [2011/11/24(木) 00:02:26.88 ] 再帰は自分自身を呼び出しながら、終了条件になるまで深く潜っていくイメージかな? 終了条件になったら、呼び出した方の関数に値を渡しながら浮かびあがっていく感じ。 一直線に潜っていくのはいいけど、いくつかに枝分かれして潜っていくような式は 効率が悪いような気がする。
387 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 00:04:36.21 ] ああ、まちがった。
388 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 00:08:40.59 ] carとcdrに再帰するまではいいけど 相互再帰書ける人はエイリアンだと思う
389 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 00:20:59.31 ] >>388 何で? ただの関数呼び出しじゃん
390 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 00:34:43.86 ] loop表現では描けない再帰の表現ってあるのかな? みんな、実コードだったら可読性の高いloopで書いちゃうんでしょ?
391 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 00:50:29.14 ] 再帰下降パーサーとかループでかく気は起きない
392 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 00:58:31.93 ] グレアム教徒はloopを使わない。
393 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 01:29:37.18 ] Common lispとC on Linuxで食っていけないかな? 断れない仕事なら便宜上多言語も読めるようにするし、他のOSにも使えるように努力する。 ttp://cruel.org/freeware/hacker.html
394 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 02:05:30.95 ] >>388 書くことより,「それが相互再帰である」ということにどう気づくんだろう,とか思った. ループ内で条件分岐して,分岐ごと別の関数を呼ぶ,みたいな場合は相互再帰か.
395 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 02:31:04.41 ] >>393 仕事でLispを使うこと blog.practical-scheme.net/shiro?20100214-when-you-should-use-lisp
396 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 09:26:38.92 ] >>394 問題自体が相互再帰。
397 名前:デフォルトの名無しさん [2011/11/24(木) 10:40:35.04 ] do詳しく解りやすく説明お願いいたします。
398 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 14:19:54.26 ] なぜかLispのソースがAA扱いになってる 括弧が多すぎるからかな
399 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 18:19:47.73 ] Allegro CLの購入を考えたいんだけど、そんなに高いものなの?高い高いって書いてあるけど、20万とかするの? Windows向けのアプリ作ってフリーソフトとして配布したいと思ってるのだけど。
400 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 18:35:42.22 ] >>399 Runtimeパッケージの再配布にも金銭関係するからフリーソフトで使うのはムリじゃね?
401 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 18:49:18.58 ] エンタープライズ版だと7桁か
402 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 22:36:42.37 ] Windows向けのアプリをcommon lispで作ろうとは私も思っていろいろ調べてみたが、 英語でも情報があまりまとめられていない気がする ソフトのマニュアルに最低限記述してあるだけ わかりにくいのが残念 clispでもwindowsアプリを作れると思うよ
403 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 22:56:10.19 ] 実行ファイル形式にしたいだけならSBCLだかが出来たような?
404 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 22:58:53.60 ] (sb-ext:save-lisp-and-die "application.exe" :toplevel 'main-entry ; entry point function :executable t ) これでexe出来たはずだけど、SBCLからclojureに浮気中なのでダメだったらゴメン
405 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 23:36:14.06 ] 特に聞かれて無い気がするが、 cl.cddddr.org/index.cgi?%bd%e8%cd%fd%b7%cf%3a%bc%c2%b9%d4%a5%d5%a5%a1%a5%a4%a5%eb%a4%ce%ba%ee%a4%ea%ca%fd 商用はマニュアルにあるのかな。 あとは、ECLみたいにCコード吐き出すやつもあるが。
406 名前:デフォルトの名無しさん mailto:sage [2011/11/24(木) 23:57:01.61 ] >>405 このページは初見だった いいページを教えてくれてありがとう ってすごいurlだな
407 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 00:55:56.19 ] 強いメリットを主張できないClojureってなんなんだ。 ttp://hibari.2ch.net/test/read.cgi/tech/1318498898/175-177 From: [175] デフォルトの名無しさん <sage> Date: 2011/11/24(木) 23:43:11.28 質問です。 LinuxerのサンデープログラマLisperなんですがJava未学習者がclojureを 覚える強いメリットっありますか? あとOSごとにソフトを作り込んだ方がヘビーなエンドユーザーは使いやすいと 思うんですが、実際の所はどうなんでしょうか? _______________________________________ From: [176] デフォルトの名無しさん <sage> Date: 2011/11/25(金) 00:46:13.24 こういうメリット云々ぬかす奴は嫌い。 _______________________________________ From: [177] デフォルトの名無しさん <sage> Date: 2011/11/25(金) 00:47:09.55 JAVA嫌いなら出来ない おわり
408 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 01:13:29.57 ] アホか。
409 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 01:23:13.43 ] *Java未学習者に対して*強いメリットが主張できないだけだと思うんだ。
410 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 01:25:56.39 ] >>407 Java見習熟者がってのを見て見ぬふりは良くないと思うぞ。 Clojureの魅力の半分はJVM資産の活用でもあると思うし、その場合Javaしらない子にはClojureをやる意味が半分は無いと言う事だもの 自分はJava見習熟でもClojureはオススメするけどさ(他のLisp族は環境依存の部分を知るために苦労するから) RichがVM上にのせた理由を書いた文章とか一度は読むべきだとも思うし。
411 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 01:28:03.92 ] >>407 もしかしてClojureスレで聞いた本人か? もしそうなら回線切って以下略だわ
412 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 01:46:30.46 ] RacketやClojureなら どちらも不変データと関数型らしいが、 どちらもさらっとしかしらない立場からすると、 独学で初学のひとには日本語の資料やちょっとしたツールがすぐよよういできるClojureかなと思うよ。 例えば、compojureやnoirでWebやってみるとか、leiningen使ったりしてローカルで試したり、 VPSやクラウド環境にリリースするのも出来るし楽だし、 javaを意識しなくて出来るし、 DBも一応何とかなる。
413 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 02:28:32.13 ] >>412 DBはClojureqlがオススメ
414 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 03:26:09.06 ] 何でLisp Schemeスレでやらないでここでやるんだよw
415 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 06:41:33.57 ] >>410 各ディストリでそんなに環境依存ってあるもんなんですか? >>395 のリンクでもありますがCで触れるのは最後にチューニングできるのは強みのような気もするんですが。 Richちゃんのいつごろ書いた記事? >>411 朝、起きて気づいた。こっちの方が書き込み多いのは驚いた。Clojureスレのヤツはウンコだな。 >>412 それならGaucheで良くね? CLならsbcl, clisp。個人の日本語解説サイトもあるから日本語資料には困らんよ。 日本語資料では間に合わなくなったら辞書片手に読めば良い。以上。
416 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 07:35:47.49 ] そもそも,何ができたらお前にとって強いメリットで, 環境に合わせたチューニングで何がしたいというのか.
417 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 07:48:40.49 ] ディストリに依存する部分はパッケージメンテナじゃないから詳しくないが 処理系に依存する部分は少なからずある ラッパーはあるが、学び始めた頃はどれが処理系依存かなんてすぐには分からないし それにGauche/SBCL/CLISPって不変性(永続的なデータ構造)中心だったっけ? 「日本語資料の量」って部分だけに反応したのなら、>>412 がパラダイムの近いLisp方言を比較した点を読めてないし 辞書を使えばいいというのも的を外してる。それはどの方言・処理系でも同じ
418 名前:デフォルトの名無しさん [2011/11/25(金) 07:52:40.94 ] (let ((myData '(1 2 3)) (myResult '())) (do ((myList (rest myData) (rest myList)) (myI (first myData) (first myList))) ((null myI) myResult) (do ((myRest (rest myData) (rest myRest)) (myJ (first myData) (first myRest))) ((null myJ)) (setf myResult `((,myI ,myJ) ,@myResult))))) ((3 3) (3 2) (3 1) (2 3) (2 2) (2 1) (1 3) (1 2) (1 1)) が理解できません。どなたか簡単に説明をお願いいたします。
419 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 08:46:41.47 ] >>400 配布毎に金かかるのか。それだと厳しいってか無理だなぁ。 standard runtimeが付いてくるのがエンタープライスからみたいだけど、値段7桁? 高えな。
420 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 09:02:36.95 ] >>415 失礼なやつだな。 CL <-> Clojure : ライブラリの扱い方の違い。日本語の取り扱い。 仕様の枯れ方。 仕様に含まれてるconcurrentな部分。google app/heroku などweb系。 schemeは学習でしか使ってないから比較してないけど、正直いって、 この3つの言語のうち1つやってれば、あとの2つはいつでも、プ ログラミングはできると思うかな。 この辺は大きな違いがあるから。個人的には、Clojureは年1バージョン アップで仕様がまだ微妙に変更して行ってるから、web以外で使う場合、 慎重になってるところはあるけどな。CLの仕様の枯れ方は何かと安心できる 反面、仕様を決めた当時と今の時代の違いを埋めてくれと思うところはある。
421 名前:デフォルトの名無しさん mailto:sage [2011/11/25(金) 09:14:40.85 ] 410が言ってる、環境依存の問題は、Clojureは少ないというのは事実かもな。 CL/schemeに限らないけど、オープンソース系の多くの言語はWindowsで 取り扱うのは、何かと問題が出てくるし、作ってる本人達にもどうでもよい 問題だったりして、放置されがちだしな。俺だってMSを使ってるんだったら cygwinより仮想環境そろえてそこにubuntu入れて開発環境を揃えたほうが、 楽だろうにと思うもの。 俺も含めてここの人には余りメリットは感じないけど、IDEにこだわってる メンツでlispを触りたいという人も向いてるよ。でも、その手の連中は、 ここじゃなくて他のところに生息してそうだ。