5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

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

1 :デフォルトの名無しさん:2014/09/21(日) 22:49:21.73 ID: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/

70 :デフォルトの名無しさん:2014/11/09(日) 17:30:33.39 ID:9cWBVjQF
アクセス禁止にされてしまいレスが遅くなって申し訳ありません。

実はland of lispとプログラミングClojureはとりあえず読んだことはあります。(内容は正直曖昧に理解しているところもありますが。)
みなさんのお話を聞いたうえで、今特定の仕事に追われているわけでもないですし、common lispを勉強していこうと思います。
何かをするために言語を学びたいというのももちろんありますが, それ以上にlispという概念についての理解を深めたかったことと, いわゆる`lisper`への憧れから, もっとも満足できそうなのはcommon lispかなと判断しました。
皆さんご意見いただき有難うございました。

71 :デフォルトの名無しさん:2014/11/09(日) 21:16:34.40 ID:LY/WWL8I
最近思うんだけど、Lispの利点で重要だけどあまり宣伝されてないのはrepl。
書いたコードを即時に動かして結果やデータを見つつ、徐々に大きくしていくスタイルは脳汁どばどば出る。
LispマシンやCLIM系のインスペクタやデバッガも、このスタイルのためにあるように思える。

72 :デフォルトの名無しさん:2014/11/09(日) 21:40:49.56 ID:OnT24YzJ
リスプの概念をスマートに認識できるのはスキームだけどな
ま、いいけど
バイバイ

73 :デフォルトの名無しさん:2014/11/09(日) 21:41:43.14 ID:OnT24YzJ
>>71
インタープリター共通の事じゃいのか

74 :デフォルトの名無しさん:2014/11/09(日) 21:44:22.51 ID:4nIud3Qa
>>71
REPL が重要なのは同意。でも、REPL はもっと進化していいと思う。SLIME でもまだ不満だ。
例えばだけど、プロファイリング結果をグラフでREPLとは別のウィンドウに表示し続けるとか。アレグロにはあったけどCLOSのクラス階層を表示してくれるとか。

75 :デフォルトの名無しさん:2014/11/09(日) 22:24:39.17 ID:WJCAde3H
>>74
LightTableってエディタでclojureいぢると少し近い感じになるかも
CLだとやっぱりFranzとか欲しくなる

小売りで買えないから学習用の奴しか触ったこと無いけどたしかに脳汁が出そう

76 :デフォルトの名無しさん:2014/11/09(日) 22:46:55.86 ID:HXAk+KxZ
slime使ってないの?

77 :デフォルトの名無しさん:2014/11/09(日) 23:45:42.55 ID:/Un9rwFK
昔の Lisp の開発環境って使ったことは無いんだけど、スクリーンショットだとか動画とか見ると、
今でいう JavaScript を Chrome の開発環境で使ってるみたいな感じで、かなりリッチなんだな。
slime なんてめじゃないぞ。 どうして退化してしまったのか…。

78 :デフォルトの名無しさん:2014/11/10(月) 11:24:29.22 ID:7fhrA1DH
>>74
現状ライブラリとして広く共有されてるかは別としてそれなら簡単に作れると思うけどね
クラスブラウザなら素朴なのがslimeにもあるよ(require 'slime-xref-browser) M-x slime-browse-classes これもCLOS入門で試しに作ることが多い

replが重要なんじゃなくて対話性が重要ってことなんじゃないのかな
そして他の言語にかなりキャッチアップされてるから,いまとなっては大した特長でもない

79 :デフォルトの名無しさん:2014/11/10(月) 12:13:10.95 ID:1g8XtIDd
柔軟性や透明性など、自由度が段違いでは

80 :デフォルトの名無しさん:2014/11/10(月) 13:13:00.20 ID:ELyMc5jq
slime-browse-classes初めて知った
クラスの継承関係を表示するだけでも便利だけどスロットとか出ないの?

81 :デフォルトの名無しさん:2014/11/10(月) 13:30:21.54 ID:7fhrA1DH
>>80
シンボルの上でC-c C-d dすれば良いんじゃねw
いずれにせよ柔軟性や透明性など、自由度が段違いですのでカスタマイズするのも自作するのも簡単だろう

82 :デフォルトの名無しさん:2014/11/10(月) 13:34:45.80 ID:1g8XtIDd
M-x Slime-Inspect

83 :デフォルトの名無しさん:2014/11/10(月) 14:24:04.72 ID:ELyMc5jq
>>81
その方法なんで気付かなかったんだろ
ありがとう

84 :デフォルトの名無しさん:2014/11/10(月) 15:06:49.35 ID:ELyMc5jq
slimeでさえ使い込なせてないのにそれより多機能な>>71があっても豚に真珠だな
早く豚から海豚くらいになりたい

85 :デフォルトの名無しさん:2014/11/10(月) 21:56:18.97 ID:9fx5sy2R
うぉー、LightTable かっけー!サンクス!
いろいろいじってみる。

>>78
すまん、おれの説明が悪かった。
クラスブラウザは単なる例で、もっとLispの特徴を活かした開発支援のアイディアはあると思っているんだよ。
それがあることで生産性がぐっと上がるような。
具体例が出せないが、多分一つの方向は、コードから得られる統計的データを生かすものだと思う。

86 :デフォルトの名無しさん:2014/11/10(月) 22:52:31.46 ID:MlKubg7v
みんな そんなにreplとクラスブラウザが好きなら
Smalltalkにしちゃいなよ

87 :デフォルトの名無しさん:2014/11/11(火) 12:06:59.77 ID:VkGqc8ov
Smalltalkと同程度に、インタラクティブに、イテレーティブに、アジャイルに、GUIを含めて開発できるということだな

88 :デフォルトの名無しさん:2014/11/11(火) 22:45:43.16 ID:2Fik2SFv
Smalltalk はもう何年も前に死んでるじゃないか

89 :デフォルトの名無しさん:2014/11/12(水) 00:49:21.53 ID:6Jeysito
clojureから流れてきたものだけど、CLer的にはloopってどういうものだと認識されてる?

同じlispではあるけど、CommonLispは関数型であろうとしてるように感じないんだよね
効率のためなのかわかりやすさのためなのか、ローカルでさえあれば再代入まみれの副作用まみれっていうように感じる

loopも結局使い方によっては関数型の繰り返しっぽいっちゃぽいんだけど、どう使うにしろlispっぽくはないよね?
そのへんどう思われてるのか気になる。気軽に使っていいものなの?

90 :デフォルトの名無しさん:2014/11/12(水) 00:52:40.52 ID:fuf0dhj5
CLはマルチパラダイム言語。 そう書いてある。

91 :デフォルトの名無しさん:2014/11/12(水) 00:58:18.03 ID:bYyH4m5K
CommonLispはマルチパラダイム言語であって、別に関数型であろうとしているわけではない
Lispは歴史的な理由で関数型と勘違いされているが、手続的にもかけるし関数的にも書けるしOO的にも書ける
状態が増えると保守性もろもろが落ちるのは真なので、そこらへん意識しつつ、適材適所で書けばいい

92 :デフォルトの名無しさん:2014/11/12(水) 01:25:54.24 ID:6Jeysito
>>90>>91
マルチパラダイムってのは確かに書いてあったけど、利用者側はなるべく関数型っぽく書こうとするべきなのかなと思っていた
Scalaとかだとマルチパラダイムだけどなるべく関数型でかくことが推奨されてるイメージがある
なんでも関数型っぽく書くのではなく、わかりやすく書きやすく目的にあったように書きましょうというのがCLの正しいスタイルなのかな?

つまり状況に適していると判断できればloopをつかうことをためらう正当な理由はないってことか。
性能もdo系統や末尾再帰と比べて申し分ないようだし

93 :デフォルトの名無しさん:2014/11/12(水) 01:37:55.86 ID:/4vNcbkH
出来るだけ関数型で書くかはコーディングスタイルの話じゃないの

94 :デフォルトの名無しさん:2014/11/12(水) 01:42:46.23 ID:bYyH4m5K
概ねそんな感じでいいと思うけど、結局はどんな書き方も許されているので利用者が適宜判断する以外ないってだけかなあ
CommonLispとしての正しいスタイルというものはたぶんない

95 :デフォルトの名無しさん:2014/11/12(水) 03:37:37.47 ID:lROmcFul
Lisp族は利用者が対象に最適と考える記述を書きやすくしている
他の言語は言語作成者が最適と考える記述を書きやすくしている

96 :デフォルトの名無しさん:2014/11/12(水) 07:03:56.02 ID:1phNlnMj
mapcarは知ってるけど他のmap系は知らないので
hyperspecを眺めていたら疑問に思ったので質問します。

結果を返さないし反映もされないmapcは
どんな有用性があるのでしょうか。
おそらく私の無知なのでしょうが
mapcの存在する意味、使いどころが解りません。
どなたか説明出来ませんか。

97 :デフォルトの名無しさん:2014/11/12(水) 12:30:36.42 ID:imZE8AUt
副作用

98 :デフォルトの名無しさん:2014/11/12(水) 16:34:38.00 ID:l7WlF7lN
>>96
97のとおり副作用目的で使う
用途としてはdolistと同じだがmapcはそれより昔からある
他の言語でいうとRubyのmapとeach、Schemeのmapとfor-eachのような関係
dolistがあるので存在意義が薄れた

99 :デフォルトの名無しさん:2014/11/12(水) 17:21:10.90 ID:PsXMXR/P
(dolist (obj lst) (f obj))
の場合は
(mapc #'f lst)
に出来て簡潔

100 :デフォルトの名無しさん:2014/11/12(水) 22:04:39.40 ID:6H3fSFab
CL はマルチパラダイムなのは認めるけど、最近のパラダイムを取り込めてなくないか?
誰か haskell の型システムを完璧にCLに取り込むべきだ。(liskell は死んだっぽいし)

101 :デフォルトの名無しさん:2014/11/12(水) 22:24:25.19 ID:HM1OSRRp
S式で書かれたMLコードを、静的な型チェックかけたあとでLISPに変換する
ML2CLとか誰か作ってくれ

102 :デフォルトの名無しさん:2014/11/12(水) 23:39:16.85 ID:6Jeysito
静的型付けをもってこいということ?

103 :デフォルトの名無しさん:2014/11/13(木) 02:37:58.35 ID:vuqKX1tf
>>100-101
ttps://github.com/rvirding/lfe
erlangをlispとして使う奴ならあるよ、型チェックの為にMLだったらerlangでもよくね?

104 :デフォルトの名無しさん:2014/11/14(金) 14:37:50.24 ID:9VbJfwoj
cons cellのアドレスとそのconscellのcarのアドレスは別物ですよね?

105 :デフォルトの名無しさん:2014/11/14(金) 15:39:00.51 ID:1eTt6dGM
>>104
基本的には別物だけど immidiate value の場合はそうでもないというか、
ちょっと説明しづらいけど変則的なことが起こりうるよ。

106 :デフォルトの名無しさん:2014/11/15(土) 01:18:12.55 ID:RRwmbFh6
整数がいくつか入ったリストがあってそれで
リストが(1 2 3)なら"1-2-3"という文字列を作りたい
(format nil "~{~A-~}" '(1 2 3))なら"1-2-3-"になってしまう
なんか良い方法無いかな

107 :デフォルトの名無しさん:2014/11/15(土) 01:31:48.99 ID:NffmTIGL
(format nil "~{~a~^-~}" '(1 2 3))でどうでしょう?

108 :デフォルトの名無しさん:2014/11/15(土) 01:37:00.40 ID:6gSgpWRh
formatは変態すぎてついていけないわw

109 :デフォルトの名無しさん:2014/11/15(土) 01:38:11.38 ID:RRwmbFh6
ありがとう
最後だけ除く指定方法があったのか

110 :デフォルトの名無しさん:2014/11/15(土) 05:48:51.06 ID:DUX/03NY
>>105
immediate valueって何が言いたいの?
* (let ((cons '#0=(#0# . nil)))
(eq cons (car cons)))
T
これのこと?
これはimmediate value って言わなくね?

111 :デフォルトの名無しさん:2014/11/15(土) 08:18:21.88 ID:s7ITBfO0
>>110
105が言いたいのは tagged pointer のことじゃないの?

112 :デフォルトの名無しさん:2014/11/16(日) 14:40:52.03 ID:HhopYCdj
質問です
(defun hoge ()
(fuga (loop for x to 100 collect x)))
みたいな関数があるとして、この関数を呼び出すたびに
(loop for x to 100 collect x)
が評価されますよね
もしそれが重い処理で、実行時に定数として扱いたい場合はどうすべきでしょうか

自分の思いつく最良の解決方法は次のようなマクロを使う方法です
(defmacro pre-eval (body)
`',(eval body))
(defun hoge ()
(fuga (pre-eval (loop for x to 100 collect x))))
もっと良い方法があるような気がするんですが、ご指南お願いします

113 :デフォルトの名無しさん:2014/11/16(日) 14:53:53.90 ID:ZU8aQvb1
リードマクロ#.を使うか定数として定義しておく

114 :デフォルトの名無しさん:2014/11/16(日) 14:59:40.61 ID:HhopYCdj
>>113
ありがとうございます
リードマクロは盲点でした

115 :デフォルトの名無しさん:2014/11/16(日) 20:30:55.78 ID:clJNFDl+
内包表記をS式で表そうとしたら
結局、loopみたいな文法になるような気がして
loopは他の言語の内包表記のような感覚で使ってるよ

116 :デフォルトの名無しさん:2014/11/18(火) 02:17:48.60 ID:+qAFtLW3
sbcl 1.2.5ってスペシャル変数にバグある?
なんかどうにもおかしい部分があるんだけど

117 :デフォルトの名無しさん:2014/11/18(火) 05:43:54.14 ID:6/OvObTG
>>116
再現コードがないからどこがおかしいのかわからない明日も会社なのに眠れないし最低の気分だよ

118 :デフォルトの名無しさん:2014/11/18(火) 13:54:56.29 ID:TO5hAplY
今起きて確認したら
(let ((x y))
(declare (special x)))
とするところを
(declare (special x))
(let ((x y))
)
としてただけだった

安心して寝てくれ>>117

119 :デフォルトの名無しさん:2014/11/18(火) 16:00:38.09 ID:fmsMXjf6
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄

120 :デフォルトの名無しさん:2014/11/19(水) 23:38:38.23 ID:074lLX1H
マクロのマクロのデバッグ辛すぎ
なんで同じ式を生成してるのに片方だけエラー出るんだ

121 :デフォルトの名無しさん:2014/11/20(木) 00:49:56.68 ID:OJJlSD0q
順序

122 :デフォルトの名無しさん:2014/11/20(木) 13:58:27.72 ID:o6KEcfS7
マクロを生成するマクロのデバッグがむずいのはだいたい下のどれか
・展開で副作用がある糞マクロだから
・100行以上ある糞マクロだから
・分割できるのに1passでなんでもやろうとする糞マクロだから
・`(, ,@)式の扱い方を知らない糞野郎だから
・リスト操作のいろはを知らない糞野郎だから
・マクロのデバッグ方法を知らない糞野郎だから

123 :デフォルトの名無しさん:2014/11/20(木) 14:32:28.25 ID:BES29AhP
その一番下は展開されて122全文になるのか?

124 :デフォルトの名無しさん:2014/11/20(木) 16:50:36.53 ID:BES29AhP
>>120の原因は結局マクロを使ってる部分の式が間違ってただけだったんだけどね

125 :デフォルトの名無しさん:2014/11/20(木) 17:57:21.80 ID:OJJlSD0q
・使用箇所で意味が変わる不衛生な糞マクロだから ← New!

126 :デフォルトの名無しさん:2014/11/20(木) 18:07:48.22 ID:BES29AhP
もうこのネタつまらないからいいです

127 :デフォルトの名無しさん:2014/11/20(木) 22:59:19.78 ID:hiR3RK0/
eval-whenの使い方がいまいちわからない
てかマクロの展開とコンパイル・実行の関わりがいまいちわからない

128 :デフォルトの名無しさん:2014/11/21(金) 00:18:26.19 ID:cycGFVEO
Lispの闇の一端。

129 :デフォルトの名無しさん:2014/11/21(金) 00:21:39.70 ID:XZg95LLm
>>127
本よめば? 実践CommonLispにもかいてある
http://www.gigamonkeys.com/book/the-special-operators.html
随分とあかるい闇だな

130 :デフォルトの名無しさん:2014/11/21(金) 00:29:52.03 ID:RgbwwAKP
>>127
割と理詰めで、必要性を理解できるところだよ

131 :デフォルトの名無しさん:2014/11/23(日) 15:41:55.61 ID:QSlTVfZV
なんかC++の闇みたいだな
C言語をマルチパラダイムに使えるようにいろいろ突っ込んだのがC++で、
lisp族に同様に色々突っ込んだのがCommon Lispみたいな

132 :デフォルトの名無しさん:2014/11/23(日) 15:53:17.70 ID:meGdP6rU
そうだよ。

133 :デフォルトの名無しさん:2014/11/23(日) 16:59:14.19 ID:GIFgmbRX
じゃあそろそろ新しい規格が欲しいな

134 :デフォルトの名無しさん:2014/11/23(日) 17:20:06.94 ID:fhpYLSa9
そういう声はたまに聞くけどなんで誰も行動しないの?

135 :デフォルトの名無しさん:2014/11/23(日) 17:39:25.60 ID:P0o96etQ
スクラッチでCommonLispを書けるやつがある程度いないと駄目だから。
改善案とか出すだけのやつやちょっとカスタマイズするようなやつが沢山いても根本的な変化は起きない。
変化してる言語は言語好きの処理系屋が集まって年中議論したり機能追加してる。
ユーザーが高度にカスタマイズできるせいで大抵の要求は実現できるから局所最適解にはまって進化がとまるのはあるかもな。

136 :デフォルトの名無しさん:2014/11/23(日) 17:47:32.22 ID:fhpYLSa9
> スクラッチでCommonLispを書けるやつがある程度いないと駄目だから。
common lisp処理系作れるっていうこと?
Cで挑戦したことはあるけどパッケージ一通り実装したりリードマクロ付けたあたりまでは
やったんだけどCLOSやコンディションの実装はあまりの大きさに挫折したわ

137 :デフォルトの名無しさん:2014/11/23(日) 23:17:38.64 ID:c42CBMgb
>>136
おいらはformatだけで挫折する自信あるぜ

138 :デフォルトの名無しさん:2014/11/23(日) 23:32:32.89 ID:3bQdEAIa
formatはlispで書けるからいいとしてその下のwriteが大きすぎる

139 :デフォルトの名無しさん:2014/11/24(月) 06:08:09.05 ID:hJdg5lTu
3imp 読んで継続実装したところで諦めた。CLじゃないけど。
面白かったので Lisp in Small Pieces 買おうか迷ってるんだけど持ってる人いる?内容どうか聞きたい。

140 :デフォルトの名無しさん:2014/11/24(月) 06:09:29.38 ID:hJdg5lTu
3imp 読んで継続実装したところで諦めた。CLじゃないけど。
面白かったので Lisp in Small Pieces 買おうか迷ってるんだけど持ってる人いる?内容どうか聞きたい。

141 :デフォルトの名無しさん:2014/11/24(月) 12:58:51.41 ID:utSDrll/
On Lispを読んでいるのですが、関数型インターフェースのところで

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

という記述がああります

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

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

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

ということなのでしょうか?

142 :デフォルトの名無しさん:2014/11/24(月) 23:22:30.44 ID:n8voiuRi
静的に狭い場所で管理された副作用は速度の為に許容するって意味じゃね

ところでブートスクラップでlisp to cコンパイラを作ろうとしてるんだけど
compile関数を実装するときに渡されたシンボルか関数からCのコードを生成するときに
function-lambda-expressionで関数の本体部分を取得すればいいのかな
kclのコード見てもcompile-fileとかはあったけどcompile関数は見つからなかったのはなんでだろう

143 :デフォルトの名無しさん:2014/11/24(月) 23:34:37.59 ID:Ig3vRg1v
ブートスクラップ…

144 :デフォルトの名無しさん:2014/11/24(月) 23:38:40.09 ID:n8voiuRi
横文字には弱いみたい
要約するとcompileに渡された値からどうやって関数の引数やら本体部分を得るかを知りたいわけです

145 :デフォルトの名無しさん:2014/11/24(月) 23:56:03.83 ID:sHaIAKeh
>>141
http://www.asahi-net.or.jp/~kc7k-nd/onlispjhtml/functionalProgramming.html
他の誰のものでもないオブジェクトという表現からいえば、まさに安全に書き換えることができるという意味で言ってるのだと思う
つまり、関数呼び出し自身が支配するオブジェクト⇔関数呼び出し時に安全に書き換えられるオブジェクト

なので、後段の部分の理解もそういうことで大体いいのでは
既に渡してるというところで引っかかってるみたいだけど、ここの話は読む限り関数的な書き方のLispの慣習なので、
要は受け取った引数を関数内部で勝手に書き換えるのはLispの関数的な書き方の慣習上よくないとされてるからやめろってだけの話なぜ慣習の話が出てくるのかといえば、どのオブジェクトが支配的であるか、つまり安全に書き換えられるかというのは書く人間が決めることだから
で、一般的なLispの慣習では引数は支配的でないけど、呼び出しの返り値は支配的とされているよ、という話
この慣習を守れば多くの場合純粋関数的な書き方と同等のローカル性を得られるけど、その節の後半部分はそうでない場合もあることを解説してる

146 :デフォルトの名無しさん:2014/12/02(火) 00:48:14.88 ID: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で使ったときはあった起動時アニメーションがないんだ
なんで?

147 :デフォルトの名無しさん:2014/12/02(火) 00:57:02.84 ID:nnpj2kBC
slime-setupをhelpで見ればわかるよ

148 :デフォルトの名無しさん:2014/12/03(水) 11:35:40.26 ID:c/4+MUqf
This `cl-labels' requires `lexical-binding' to be non-nil
ntemacs23で出たエラーですが
原因は何でどうすれば解決しますか?

149 :デフォルトの名無しさん:2014/12/03(水) 14:14:49.31 ID:ReckfAN/
146 = 148なのか?
エスパーだけどslimeのことならemacs24にすれば良いじゃね?
しかし質問のしかた最悪だな

150 :148:2014/12/03(水) 20:17:25.25 ID:Wu/dN4SR
>146 = 148なのか?
ちがいますよ

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

>しかし質問のしかた最悪だな
ごめんなさい

151 :デフォルトの名無しさん:2014/12/04(木) 17:51:59.64 ID: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は本当に高速化の脅威になりますか?
また、取り除くことはできますか?

152 :デフォルトの名無しさん:2014/12/05(金) 02:59:30.47 ID:EEY9XvTS
>>151
eq速くして全体が速くなったというのを寡聞にして聞かない
何作ってるの?

153 :デフォルトの名無しさん:2014/12/05(金) 18:35:21.48 ID:0LF1tZEz
>>152
将棋のAIを作ってます
インライン展開してない状態でプロファイルを取ったとき
eqを使う単純な関数で時間がかかっており、>>151のような状態に気づきました
単なる比較で分岐命令が生成されることに違和感があり質問しました

ちなみに今プロファイルを取りなおしたところそんなに時間もかかっておらず、なんだったのかって感じです

154 :SCHEME餃子 ◆8X2XSCHEME :2014/12/06(土) 01:41:19.85 ID:17surw1A
インライン展開すると関数コールが省略できるってのもあるし、
大きなジャンプを避ければメモリローカリティが維持されてデータ (プログラム) がキャッシュに乗って速度に貢献することもある。
キャッシュってのは侮れない要素なんだけど、正直言って実際に試してみないとどう効いてくるのかさっぱりわからない。
プロファイラでもそういう差は見え難いしな。 予想にこだわらずに色々と試してみるのが吉。 その内に勘が働くようになるよ。

155 :デフォルトの名無しさん:2014/12/06(土) 20:52:17.44 ID:Nd/Kweiq
>>139
http://athos.hatenablog.com/entry/20100504/lisp_in_small_pieces

156 :151:2014/12/06(土) 21:57:29.75 ID:lLsVvdEd
>>154
もうちょっと苦しんでみます

157 :デフォルトの名無しさん:2014/12/11(木) 20:00:12.67 ID:URNWWvBk
gcl使ってたらhandler-case,ignore-errosが無いことに気付いた
やっぱりansi準拠じゃないとansin出来んな

158 :デフォルトの名無しさん:2014/12/16(火) 16:07:51.10 ID:/bfoimZs
define-hogeマクロを定義するマクロはどういう名前にすればいいんだろ
define-define-hogeとかしか思い付かないけど不恰好だし

159 :デフォルトの名無しさん:2014/12/16(火) 16:11:37.96 ID:CudKiy/r
defmacro-hoge でいいだろ

160 :デフォルトの名無しさん:2014/12/16(火) 16:13:21.14 ID:/bfoimZs
そういえばそうか

161 :デフォルトの名無しさん:2014/12/22(月) 20:51:38.71 ID:ghZKV2ZQ
allegro clの無償版って普段のlispプログラミングにどれくらい使えるかな
制限はヒープ領域だけみたいだけどヒープ領域が60Mbってどれくらいの制限がいまいちわからんな

162 :デフォルトの名無しさん:2014/12/22(月) 21:56:16.19 ID:36o3vILg
>>161
正直、あまり常用したいとは思わない
何をするにも、試用版かなんかのダイアログが出てきたと思う

allegro購入予定でなければ、cclとかsbclとか使った方がいいと思う

163 :デフォルトの名無しさん:2014/12/22(月) 22:35:05.70 ID:18uotQck
やっぱりただで使わせる気は無いのか
気分転換に環境変えてみようと思ったけど残念

164 :デフォルトの名無しさん:2014/12/26(金) 14:55:55.44 ID:ivhZ4+Q3
loopマクロのトークンはキーワードにするのはどういう意味があるんだ

165 :デフォルトの名無しさん:2014/12/27(土) 06:45:42.86 ID:BPfLluBn
>>164
パッケージの名前空間を汚さないため、だと思う。キーワードを使わないと、thenとかuptoとかのシンボルがそのパッケージに作られちゃう。
lispのプログラムってホントにデータなんだ、と驚いた記憶がある。

166 :デフォルトの名無しさん:2014/12/27(土) 07:44:44.77 ID:PhaXTdWk
なにがインターンされるかなんて気にして書いてる人なんかいないよ、お兄ちゃん!
:then :upto だとエディタのハイライトで読みやすくなるからだよ。
それが読みやすくなければ、then uptoと書けば良いよ!

167 :デフォルトの名無しさん:2014/12/27(土) 15:12:23.12 ID:Z5TU2mXJ
ライブラリ書いてる人は気にしてるとおもうけど

168 :デフォルトの名無しさん:2014/12/27(土) 15:12:55.73 ID:8eya4d4I
補完のときにノイズになるかな

169 :デフォルトの名無しさん:2014/12/28(日) 01:28:27.48 ID:Sd6FVmJh
外部から参照されるシンボルでもない限りファイルをコンパイルしたファイルからはシンボルは勝手に消えるからライブラリ作るやつはそんな細かいこと気にしてないだろ…
無用のシンボルをインターンしたくなくてdefpackageで#:hogeって書くやつはいるがキーワードパッケージとcl-userのシンボルは消しにくいからまあ理解もできるが、それもコンパイルすれば消えるし

170 :デフォルトの名無しさん:2014/12/30(火) 09:14:33.10 ID:O6VRzwmF
loopマクロのuptoとかがキーワードでも動く、ってのは
ちゃんと仕様になってるのかな。
おれはへえキーワードでもいいんだ、と知ってからはずっとキーワード派。
無駄なシンボルがインターンされているなんて、おれの美意識としては嫌。
他人に強要はしない。

90 KB
新着レスの表示

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)