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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2014/09/21(日) 22:49:21.73ID:FJokPHUt
Lisp Schemeスレでは恥ずかしくて聞けないようなことを質問したり、
Lisp Schemeスレの話題は高度すぎて気後れする人が話しあったり。
それ以外でもCommon Lispについての話題なら歓迎します。

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

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

■前スレ
【入門】Common Lisp その10【質問よろず】
http://peace.2ch.net/test/read.cgi/tech/1361341876/

■Wiki
http://wiki.fdiary.net/lisp/ (id:guest pass:cl)
http://cl.cddddr.org/
http://tips.lisp-users.org/common-lisp/
2014/11/18(火) 05:43:54.14ID:6/OvObTG
>>116
再現コードがないからどこがおかしいのかわからない明日も会社なのに眠れないし最低の気分だよ
2014/11/18(火) 13:54:56.29ID:TO5hAplY
今起きて確認したら
(let ((x y))
(declare (special x)))
とするところを
(declare (special x))
(let ((x y))
)
としてただけだった

安心して寝てくれ>>117
2014/11/18(火) 16:00:38.09ID:fmsMXjf6
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
2014/11/19(水) 23:38:38.23ID:074lLX1H
マクロのマクロのデバッグ辛すぎ
なんで同じ式を生成してるのに片方だけエラー出るんだ
2014/11/20(木) 00:49:56.68ID:OJJlSD0q
順序
2014/11/20(木) 13:58:27.72ID:o6KEcfS7
マクロを生成するマクロのデバッグがむずいのはだいたい下のどれか
・展開で副作用がある糞マクロだから
・100行以上ある糞マクロだから
・分割できるのに1passでなんでもやろうとする糞マクロだから
・`(, ,@)式の扱い方を知らない糞野郎だから
・リスト操作のいろはを知らない糞野郎だから
・マクロのデバッグ方法を知らない糞野郎だから
2014/11/20(木) 14:32:28.25ID:BES29AhP
その一番下は展開されて122全文になるのか?
2014/11/20(木) 16:50:36.53ID:BES29AhP
>>120の原因は結局マクロを使ってる部分の式が間違ってただけだったんだけどね
2014/11/20(木) 17:57:21.80ID:OJJlSD0q
・使用箇所で意味が変わる不衛生な糞マクロだから ← New!
2014/11/20(木) 18:07:48.22ID:BES29AhP
もうこのネタつまらないからいいです
2014/11/20(木) 22:59:19.78ID:hiR3RK0/
eval-whenの使い方がいまいちわからない
てかマクロの展開とコンパイル・実行の関わりがいまいちわからない
2014/11/21(金) 00:18:26.19ID:cycGFVEO
Lispの闇の一端。
2014/11/21(金) 00:21:39.70ID:XZg95LLm
>>127
本よめば? 実践CommonLispにもかいてある
http://www.gigamonkeys.com/book/the-special-operators.html
随分とあかるい闇だな
2014/11/21(金) 00:29:52.03ID:RgbwwAKP
>>127
割と理詰めで、必要性を理解できるところだよ
2014/11/23(日) 15:41:55.61ID:QSlTVfZV
なんかC++の闇みたいだな
C言語をマルチパラダイムに使えるようにいろいろ突っ込んだのがC++で、
lisp族に同様に色々突っ込んだのがCommon Lispみたいな
2014/11/23(日) 15:53:17.70ID:meGdP6rU
そうだよ。
133デフォルトの名無しさん
垢版 |
2014/11/23(日) 16:59:14.19ID:GIFgmbRX
じゃあそろそろ新しい規格が欲しいな
2014/11/23(日) 17:20:06.94ID:fhpYLSa9
そういう声はたまに聞くけどなんで誰も行動しないの?
2014/11/23(日) 17:39:25.60ID:P0o96etQ
スクラッチでCommonLispを書けるやつがある程度いないと駄目だから。
改善案とか出すだけのやつやちょっとカスタマイズするようなやつが沢山いても根本的な変化は起きない。
変化してる言語は言語好きの処理系屋が集まって年中議論したり機能追加してる。
ユーザーが高度にカスタマイズできるせいで大抵の要求は実現できるから局所最適解にはまって進化がとまるのはあるかもな。
2014/11/23(日) 17:47:32.22ID:fhpYLSa9
> スクラッチでCommonLispを書けるやつがある程度いないと駄目だから。
common lisp処理系作れるっていうこと?
Cで挑戦したことはあるけどパッケージ一通り実装したりリードマクロ付けたあたりまでは
やったんだけどCLOSやコンディションの実装はあまりの大きさに挫折したわ
2014/11/23(日) 23:17:38.64ID:c42CBMgb
>>136
おいらはformatだけで挫折する自信あるぜ
2014/11/23(日) 23:32:32.89ID:3bQdEAIa
formatはlispで書けるからいいとしてその下のwriteが大きすぎる
2014/11/24(月) 06:08:09.05ID:hJdg5lTu
3imp 読んで継続実装したところで諦めた。CLじゃないけど。
面白かったので Lisp in Small Pieces 買おうか迷ってるんだけど持ってる人いる?内容どうか聞きたい。
2014/11/24(月) 06:09:29.38ID:hJdg5lTu
3imp 読んで継続実装したところで諦めた。CLじゃないけど。
面白かったので Lisp in Small Pieces 買おうか迷ってるんだけど持ってる人いる?内容どうか聞きたい。
2014/11/24(月) 12:58:51.41ID:utSDrll/
On Lispを読んでいるのですが、関数型インターフェースのところで

各関数の呼び出しは、その呼び出し自身が支配するオブジェクトを
安全に書き換えることができる

という記述がああります

この、呼び出し自身が支配するオブジェクトとはどのようなことなのでしょうか?

続く文章で、関数呼び出しの返り値として受けとるオブジェクトは支配する
-> 書き換えても良い(安全に)

引数として渡されるオブジェクトは支配しない
->書き換えてはいけない(でも既に渡しちゃっているんでは?)

ということなのでしょうか?
2014/11/24(月) 23:22:30.44ID:n8voiuRi
静的に狭い場所で管理された副作用は速度の為に許容するって意味じゃね

ところでブートスクラップでlisp to cコンパイラを作ろうとしてるんだけど
compile関数を実装するときに渡されたシンボルか関数からCのコードを生成するときに
function-lambda-expressionで関数の本体部分を取得すればいいのかな
kclのコード見てもcompile-fileとかはあったけどcompile関数は見つからなかったのはなんでだろう
2014/11/24(月) 23:34:37.59ID:Ig3vRg1v
ブートスクラップ…
2014/11/24(月) 23:38:40.09ID:n8voiuRi
横文字には弱いみたい
要約するとcompileに渡された値からどうやって関数の引数やら本体部分を得るかを知りたいわけです
2014/11/24(月) 23:56:03.83ID:sHaIAKeh
>>141
http://www.asahi-net.or.jp/~kc7k-nd/onlispjhtml/functionalProgramming.html
他の誰のものでもないオブジェクトという表現からいえば、まさに安全に書き換えることができるという意味で言ってるのだと思う
つまり、関数呼び出し自身が支配するオブジェクト⇔関数呼び出し時に安全に書き換えられるオブジェクト

なので、後段の部分の理解もそういうことで大体いいのでは
既に渡してるというところで引っかかってるみたいだけど、ここの話は読む限り関数的な書き方のLispの慣習なので、
要は受け取った引数を関数内部で勝手に書き換えるのはLispの関数的な書き方の慣習上よくないとされてるからやめろってだけの話なぜ慣習の話が出てくるのかといえば、どのオブジェクトが支配的であるか、つまり安全に書き換えられるかというのは書く人間が決めることだから
で、一般的なLispの慣習では引数は支配的でないけど、呼び出しの返り値は支配的とされているよ、という話
この慣習を守れば多くの場合純粋関数的な書き方と同等のローカル性を得られるけど、その節の後半部分はそうでない場合もあることを解説してる
146デフォルトの名無しさん
垢版 |
2014/12/02(火) 00:48:14.88ID:oMH805i/
教えてくれ
Emacs23.3 (On windows) に slime 入れたんだ
.emacs にはこんな感じで書いた

(setq inferior-lisp-program "sbcl")
(add-to-list 'load-path "~/.emacs.d/site-lisp/slime")
(require 'slime-autoloads)
(slime-setup)

で、まあ動くことには動く
でもなんでか以前clispで使ったときはあった起動時アニメーションがないんだ
なんで?
2014/12/02(火) 00:57:02.84ID:nnpj2kBC
slime-setupをhelpで見ればわかるよ
148デフォルトの名無しさん
垢版 |
2014/12/03(水) 11:35:40.26ID:c/4+MUqf
This `cl-labels' requires `lexical-binding' to be non-nil
ntemacs23で出たエラーですが
原因は何でどうすれば解決しますか?
2014/12/03(水) 14:14:49.31ID:ReckfAN/
146 = 148なのか?
エスパーだけどslimeのことならemacs24にすれば良いじゃね?
しかし質問のしかた最悪だな
150148
垢版 |
2014/12/03(水) 20:17:25.25ID:Wu/dN4SR
>146 = 148なのか?
ちがいますよ

>エスパーだけどslimeのことならemacs24にすれば良いじゃね?
ありがとうございます

>しかし質問のしかた最悪だな
ごめんなさい
2014/12/04(木) 17:51:59.64ID:mQjd1sH/
質問です
素人知識ながらコードの高速化を行っているのですが、例えば次のコードをdisassembleします(sbclを使ってます)
(defun my-eq (a b)
(declare (optimize (speed 3) (safety 0)))
(eq a b))

; disassembly for MY-EQ
; Size: 21 bytes
; 0CAE251A: 39FA CMP EDX, EDI ; no-arg-parsing entry point
; 1C: 740A JEQ L1
; 1E: BA0B001001 MOV EDX, 17825803
; 23: L0: 8BE5 MOV ESP, EBP
; 25: F8 CLC
; 26: 5D POP EBP
; 27: C3 RET
; 28: L1: BA27001001 MOV EDX, 17825831
; 2D: EBF4 JMP L0
すると高速化においてよろしくないとされる条件分岐命令(JEQ)が出力されます
このようなJEQは本当に高速化の脅威になりますか?
また、取り除くことはできますか?
2014/12/05(金) 02:59:30.47ID:EEY9XvTS
>>151
eq速くして全体が速くなったというのを寡聞にして聞かない
何作ってるの?
2014/12/05(金) 18:35:21.48ID:0LF1tZEz
>>152
将棋のAIを作ってます
インライン展開してない状態でプロファイルを取ったとき
eqを使う単純な関数で時間がかかっており、>>151のような状態に気づきました
単なる比較で分岐命令が生成されることに違和感があり質問しました

ちなみに今プロファイルを取りなおしたところそんなに時間もかかっておらず、なんだったのかって感じです
2014/12/06(土) 01:41:19.85ID:17surw1A
インライン展開すると関数コールが省略できるってのもあるし、
大きなジャンプを避ければメモリローカリティが維持されてデータ (プログラム) がキャッシュに乗って速度に貢献することもある。
キャッシュってのは侮れない要素なんだけど、正直言って実際に試してみないとどう効いてくるのかさっぱりわからない。
プロファイラでもそういう差は見え難いしな。 予想にこだわらずに色々と試してみるのが吉。 その内に勘が働くようになるよ。
2014/12/06(土) 20:52:17.44ID:Nd/Kweiq
>>139
http://athos.hatenablog.com/entry/20100504/lisp_in_small_pieces
156151
垢版 |
2014/12/06(土) 21:57:29.75ID:lLsVvdEd
>>154
もうちょっと苦しんでみます
2014/12/11(木) 20:00:12.67ID:URNWWvBk
gcl使ってたらhandler-case,ignore-errosが無いことに気付いた
やっぱりansi準拠じゃないとansin出来んな
2014/12/16(火) 16:07:51.10ID:/bfoimZs
define-hogeマクロを定義するマクロはどういう名前にすればいいんだろ
define-define-hogeとかしか思い付かないけど不恰好だし
2014/12/16(火) 16:11:37.96ID:CudKiy/r
defmacro-hoge でいいだろ
2014/12/16(火) 16:13:21.14ID:/bfoimZs
そういえばそうか
2014/12/22(月) 20:51:38.71ID:ghZKV2ZQ
allegro clの無償版って普段のlispプログラミングにどれくらい使えるかな
制限はヒープ領域だけみたいだけどヒープ領域が60Mbってどれくらいの制限がいまいちわからんな
2014/12/22(月) 21:56:16.19ID:36o3vILg
>>161
正直、あまり常用したいとは思わない
何をするにも、試用版かなんかのダイアログが出てきたと思う

allegro購入予定でなければ、cclとかsbclとか使った方がいいと思う
2014/12/22(月) 22:35:05.70ID:18uotQck
やっぱりただで使わせる気は無いのか
気分転換に環境変えてみようと思ったけど残念
2014/12/26(金) 14:55:55.44ID:ivhZ4+Q3
loopマクロのトークンはキーワードにするのはどういう意味があるんだ
2014/12/27(土) 06:45:42.86ID:BPfLluBn
>>164
パッケージの名前空間を汚さないため、だと思う。キーワードを使わないと、thenとかuptoとかのシンボルがそのパッケージに作られちゃう。
lispのプログラムってホントにデータなんだ、と驚いた記憶がある。
2014/12/27(土) 07:44:44.77ID:PhaXTdWk
なにがインターンされるかなんて気にして書いてる人なんかいないよ、お兄ちゃん!
:then :upto だとエディタのハイライトで読みやすくなるからだよ。
それが読みやすくなければ、then uptoと書けば良いよ!
2014/12/27(土) 15:12:23.12ID:Z5TU2mXJ
ライブラリ書いてる人は気にしてるとおもうけど
2014/12/27(土) 15:12:55.73ID:8eya4d4I
補完のときにノイズになるかな
2014/12/28(日) 01:28:27.48ID:Sd6FVmJh
外部から参照されるシンボルでもない限りファイルをコンパイルしたファイルからはシンボルは勝手に消えるからライブラリ作るやつはそんな細かいこと気にしてないだろ…
無用のシンボルをインターンしたくなくてdefpackageで#:hogeって書くやつはいるがキーワードパッケージとcl-userのシンボルは消しにくいからまあ理解もできるが、それもコンパイルすれば消えるし
2014/12/30(火) 09:14:33.10ID:O6VRzwmF
loopマクロのuptoとかがキーワードでも動く、ってのは
ちゃんと仕様になってるのかな。
おれはへえキーワードでもいいんだ、と知ってからはずっとキーワード派。
無駄なシンボルがインターンされているなんて、おれの美意識としては嫌。
他人に強要はしない。
2014/12/30(火) 14:08:08.62ID:27cBYY6U
仕様で規定されてるかどうかはloopの項目に記載があるから違法か合法かは読めばわかるな。
無駄なシンボルがインターンされるという意味では、キーワードパッケージにインターンされる方が
グローバルに汚染される分、ローカルパッケージ汚染より質が悪い筈。
矛盾したこだわり…。
2014/12/30(火) 14:27:00.81ID:vs+COFUK
CLHSより引用。
loop keyword n. Trad. a symbol that is a specially recognized part of the syntax of an extended loop form.
Such symbols are recognized by their name (using string=), not by their identity;
as such, they may be in any package. A loop keyword is not a keyword.
2014/12/30(火) 19:08:08.10ID:vs+COFUK
>>171
矛盾はしてなくない?
皆が:uptoを使えば、キーワードパッケージだけにそのシンボルができるんだから。
キーワードパッケージはloopに限らずぐちゃぐちゃと変なシンボルが登録されるけどそれは仕方ないこと。
世界の汚さを一手に引き受ける、それがキーワードパッケージの役割だと思ってる。
2015/01/13(火) 17:41:40.78ID:n8FCO54L
構造体やクラスの名前からスロットを取得する方法ってある?
2015/01/14(水) 20:45:49.59ID:Wha2sJr8
class-slots てメソッドがあるよ。構造体に使えたかは忘れた
2015/01/14(水) 21:08:24.00ID:1rDSBA79
>>175
ありがとう
検索して見つけたこれが参考になった
ttp://stackoverflow.com/questions/3086561/make-clos-objects-printable-in-lisp
2015/01/15(木) 02:26:41.38ID:3CJhIHgr
guiとかweb系のライブラリないの
2015/01/16(金) 01:42:21.96ID:dM6MW5TX
あるよ
2015/01/17(土) 18:34:52.38ID:CWvWtJ6X
evalとapplyの違いは何ですか?
2015/01/17(土) 19:00:09.58ID:P4fG3Fn9
carとfuncallの違いはなんですか?
と聞いてるようなものなんだが
2015/01/17(土) 19:12:25.44ID:73qLESVw
>>179
ええとね
単語のスペルと長さがちがうかなぁ
それとevalはevaluateの省略だね
eval is short for evaluate
2015/01/17(土) 19:40:12.57ID:CWvWtJ6X
http://qiita.com/mandel59/items/8f9111143aea94e7b363
ここで同じだと言っている人がいて気になったので
2015/01/17(土) 19:49:45.85ID:P4fG3Fn9
この板のいくつかの場所で言われてるけど
その人ちょっとおかしいんだよ
真に受けない方がいい
2015/01/17(土) 20:03:49.61ID:CWvWtJ6X
いえこの人がおかしいのは知ってますし真に受けるつもりもありません
ただ思えばそれらの違いを言葉にできるほどの認識がなかったので
2015/01/17(土) 20:30:19.29ID:P4fG3Fn9
http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_apply.html
http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_eval.html
2015/01/17(土) 21:08:56.14ID:CWvWtJ6X
適用は評価の前段階みたいな感じでいいんでしょうか
2015/01/17(土) 21:14:39.87ID:X3AOWrxV
あのう、きちっとしたテキストを一冊読んだほうがいいよ
2015/01/18(日) 02:14:00.68ID:m7MxJZlS
(eval `(funcall ,f ,@args))と(apply f args)が同じっていいたいのかね?
ようわからんけど…
2015/01/18(日) 07:43:52.27ID:FaVyQjad
evalはシンボルのリストを読み込んでその内容を実行する。
applyは既に評価されて定義された関数を適用すること。
2015/01/18(日) 07:49:09.26ID:oexYoD6M
eval だけでいいのに何でapplyが重視されてるんだ?、と思ったら、SICPを読もう
2015/01/18(日) 09:28:02.82ID:8C45mKK2
>>179
commonLispの板でeval applyといえば特定の実装の話になるから
lisp scheme板に話をふった方が良いよ
そういう話好きなやついるから
192デフォルトの名無しさん
垢版 |
2015/01/19(月) 01:45:04.66ID:wgUa3gjO
emacsのslimeについて質問です
slime-autodoc-mode
slime-autodoc-space
うざいので無効にしたいのですが
どうにかならないですか
2015/01/23(金) 08:44:20.17ID:EcShhbHE
adw-chartingって(ql:quickload :adw-charting)しただけじゃ
使えないんでしょうか
2015/01/23(金) 12:42:39.31ID:iqBUzDAo
>>193
エスパーだけど、サブシステムに分かれてるから
(ql:quickload :adw-charting-vecto)
しないとサンプルが動かないという意味ではそうなのでは
試した手順とマニュアル読んで分からなかった箇所を具体的に書いたら?
(adw-charting:with-pie-chart (300 200)
(adw-charting:add-slice "A" 5.0d0)
(adw-charting:add-slice "B" 2.0d0)
(adw-charting:save-file "minimal-pie-chart.png"))
は配布状態で動いたよ
2015/01/23(金) 13:23:05.37ID:EcShhbHE
>>194
動きましたありがとうございます
quicklispの使い方をわかってなかったので
exampleをコピペしただけでadw-charting:をつけてませんでした
2015/01/23(金) 21:36:01.97ID:F+B+etzd
嬉しいのでチラシの裏書きます
The Little Schemer二回読了!!
勉強になった

次は「初めての人のためのLisp」を読もうと思い購入済みでもあるのだけれども予定変更
The Seasoned SchemerというThe Little Scemerの続編でthe natures of
computingの理解を目ざすものがあったのでそれにした。
それ終えたら「初めての」かLand of LispかOn Lispやろ
本来の目的ClusureでAndroid用の好みのワンベインOutlineプロセッサつくるためにLisp系はじめたけど楽しいからそれはさておき基礎の基礎に深く分け入っていきます
2015/01/23(金) 22:50:04.93ID:NpwsZqSV
再帰で考えてしまって動的計画法が使いこなせない!
全マス埋めていく感覚が、全ノード探索と分かってはいるんだが…
2015/02/07(土) 08:01:14.41ID:tz9pe5xW
http://anime.scripts.mit.edu/images/mitinanime_lain3.jpg

Serial Experiments LainではLispのコードのシーンがあるらしい
2015/02/07(土) 08:39:22.93ID:R2/oFkGJ
Lain か…懐かしいなぁ
2015/02/07(土) 09:32:47.61ID:FOHLYtkF
Life Gameのソースっぽい
201デフォルトの名無しさん
垢版 |
2015/02/07(土) 09:52:15.98ID:OMRZtff8
D-WaveのOSがCommonLispってマジ?
2015/02/07(土) 10:43:02.43ID:Ei/z8not
>>198
>>201
知らないけど有り得そう
2015/02/07(土) 10:51:45.09ID:FOHLYtkF
>>198
wikiペディアでソースみつけた
ttp://en.wikipedia.org/wiki/Serial_Experiments_Lain

>>201
マジみたい、APIのみ公開だって。
アプリ開発はPython推しだね。
2015/02/07(土) 12:02:20.85ID:saCOOwny
>>198
このソースを書き写した覚えがあるなと思って、
ハードディスクを漁ったら見つかった。

この部分の前後のソースも写してあったけど、
前の部分のソースが明らかにライフゲームの生死判定だった。
2015/02/07(土) 13:26:07.79ID:yKpU9aut
その書き写したソース見たい
2015/02/07(土) 13:32:26.38ID:FOHLYtkF
>>205
>>203のリンクから元本のソース見れるよ。
2015/02/07(土) 15:06:09.69ID:yKpU9aut
見れた
配列をbit単位で操作するのは効果あるのかな
2015/02/07(土) 15:20:36.83ID:9qdU9S5T
>>207
1991年だからメモリ贅沢に使うのに躊躇したんじゃなかろか?
2015/02/07(土) 15:36:59.11ID:6rQaurxf
一バイトは金のひとすくい
しません、させません、ビットの無駄使い

おかげでビルも立ちました
210デフォルトの名無しさん
垢版 |
2015/02/08(日) 23:41:38.36ID:C4tJwi8l
Common Lisp特殊すぎワロタ

http://photos.appleinsider.com/gallery/11591-4649-150115-Swift-l.jpg
http://iphone.appleinsider.com/articles/15/02/07/apples-new-swift-programming-language-takes-flight-with-getty-images-american-airlines-linkedin-and-duolingo
2015/02/09(月) 11:04:57.10ID:inFNj6Hs
>>210
stackoverflowに質問を書く前に問題を解決でき
オープンソースにせずとも問題を解決出来る高い生産性が
有るって事だなw
言語も人も。
2015/02/09(月) 11:50:04.98ID:wTON1hpK
設定ミスでそうなっただけってどっかで見た気がする
2015/02/09(月) 11:55:17.59ID:gnp8i06N
オープンソースにせずとも問題を解決出来る、って意味分らないね
2015/02/09(月) 18:29:24.33ID:Ysp4l3Zv
ttp://sogrady-media.redmonk.com/sogrady/files/2015/01/lang.rank_.plot_.q1152.png
ttp://redmonk.com/sogrady/2015/01/14/language-rankings-1-15/
2015/02/09(月) 18:35:56.82ID:yftdnQui
うぉー!
FORTLANと同席かい!!
216デフォルトの名無しさん
垢版 |
2015/02/09(月) 22:47:33.62ID:JzEtMJoP
FORTRANじゃあーい!!
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況