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/

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とかがキーワードでも動く、ってのは
ちゃんと仕様になってるのかな。
おれはへえキーワードでもいいんだ、と知ってからはずっとキーワード派。
無駄なシンボルがインターンされているなんて、おれの美意識としては嫌。
他人に強要はしない。

171 :デフォルトの名無しさん:2014/12/30(火) 14:08:08.62 ID:27cBYY6U
仕様で規定されてるかどうかはloopの項目に記載があるから違法か合法かは読めばわかるな。
無駄なシンボルがインターンされるという意味では、キーワードパッケージにインターンされる方が
グローバルに汚染される分、ローカルパッケージ汚染より質が悪い筈。
矛盾したこだわり…。

172 :デフォルトの名無しさん:2014/12/30(火) 14:27:00.81 ID: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.

173 :デフォルトの名無しさん:2014/12/30(火) 19:08:08.10 ID:vs+COFUK
>>171
矛盾はしてなくない?
皆が:uptoを使えば、キーワードパッケージだけにそのシンボルができるんだから。
キーワードパッケージはloopに限らずぐちゃぐちゃと変なシンボルが登録されるけどそれは仕方ないこと。
世界の汚さを一手に引き受ける、それがキーワードパッケージの役割だと思ってる。

174 :デフォルトの名無しさん:2015/01/13(火) 17:41:40.78 ID:n8FCO54L
構造体やクラスの名前からスロットを取得する方法ってある?

175 :デフォルトの名無しさん:2015/01/14(水) 20:45:49.59 ID:Wha2sJr8
class-slots てメソッドがあるよ。構造体に使えたかは忘れた

176 :デフォルトの名無しさん:2015/01/14(水) 21:08:24.00 ID:1rDSBA79
>>175
ありがとう
検索して見つけたこれが参考になった
ttp://stackoverflow.com/questions/3086561/make-clos-objects-printable-in-lisp

177 :デフォルトの名無しさん:2015/01/15(木) 02:26:41.38 ID:3CJhIHgr
guiとかweb系のライブラリないの

178 :デフォルトの名無しさん:2015/01/16(金) 01:42:21.96 ID:dM6MW5TX
あるよ

179 :デフォルトの名無しさん:2015/01/17(土) 18:34:52.38 ID:CWvWtJ6X
evalとapplyの違いは何ですか?

180 :デフォルトの名無しさん:2015/01/17(土) 19:00:09.58 ID:P4fG3Fn9
carとfuncallの違いはなんですか?
と聞いてるようなものなんだが

181 :デフォルトの名無しさん:2015/01/17(土) 19:12:25.44 ID:73qLESVw
>>179
ええとね
単語のスペルと長さがちがうかなぁ
それとevalはevaluateの省略だね
eval is short for evaluate

182 :デフォルトの名無しさん:2015/01/17(土) 19:40:12.57 ID:CWvWtJ6X
http://qiita.com/mandel59/items/8f9111143aea94e7b363
ここで同じだと言っている人がいて気になったので

183 :デフォルトの名無しさん:2015/01/17(土) 19:49:45.85 ID:P4fG3Fn9
この板のいくつかの場所で言われてるけど
その人ちょっとおかしいんだよ
真に受けない方がいい

184 :デフォルトの名無しさん:2015/01/17(土) 20:03:49.61 ID:CWvWtJ6X
いえこの人がおかしいのは知ってますし真に受けるつもりもありません
ただ思えばそれらの違いを言葉にできるほどの認識がなかったので

185 :デフォルトの名無しさん:2015/01/17(土) 20:30:19.29 ID: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

186 :デフォルトの名無しさん:2015/01/17(土) 21:08:56.14 ID:CWvWtJ6X
適用は評価の前段階みたいな感じでいいんでしょうか

187 :デフォルトの名無しさん:2015/01/17(土) 21:14:39.87 ID:X3AOWrxV
あのう、きちっとしたテキストを一冊読んだほうがいいよ

188 :デフォルトの名無しさん:2015/01/18(日) 02:14:00.68 ID:m7MxJZlS
(eval `(funcall ,f ,@args))と(apply f args)が同じっていいたいのかね?
ようわからんけど…

189 :デフォルトの名無しさん:2015/01/18(日) 07:43:52.27 ID:FaVyQjad
evalはシンボルのリストを読み込んでその内容を実行する。
applyは既に評価されて定義された関数を適用すること。

190 :デフォルトの名無しさん:2015/01/18(日) 07:49:09.26 ID:oexYoD6M
eval だけでいいのに何でapplyが重視されてるんだ?、と思ったら、SICPを読もう

191 :デフォルトの名無しさん:2015/01/18(日) 09:28:02.82 ID:8C45mKK2
>>179
commonLispの板でeval applyといえば特定の実装の話になるから
lisp scheme板に話をふった方が良いよ
そういう話好きなやついるから

192 :デフォルトの名無しさん:2015/01/19(月) 01:45:04.66 ID:wgUa3gjO
emacsのslimeについて質問です
slime-autodoc-mode
slime-autodoc-space
うざいので無効にしたいのですが
どうにかならないですか

193 :デフォルトの名無しさん:2015/01/23(金) 08:44:20.17 ID:EcShhbHE
adw-chartingって(ql:quickload :adw-charting)しただけじゃ
使えないんでしょうか

194 :デフォルトの名無しさん:2015/01/23(金) 12:42:39.31 ID: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"))
は配布状態で動いたよ

195 :デフォルトの名無しさん:2015/01/23(金) 13:23:05.37 ID:EcShhbHE
>>194
動きましたありがとうございます
quicklispの使い方をわかってなかったので
exampleをコピペしただけでadw-charting:をつけてませんでした

196 :デフォルトの名無しさん:2015/01/23(金) 21:36:01.97 ID: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系はじめたけど楽しいからそれはさておき基礎の基礎に深く分け入っていきます

197 :デフォルトの名無しさん:2015/01/23(金) 22:50:04.93 ID:NpwsZqSV
再帰で考えてしまって動的計画法が使いこなせない!
全マス埋めていく感覚が、全ノード探索と分かってはいるんだが…

198 :デフォルトの名無しさん:2015/02/07(土) 08:01:14.41 ID:tz9pe5xW
http://anime.scripts.mit.edu/images/mitinanime_lain3.jpg

Serial Experiments LainではLispのコードのシーンがあるらしい

199 :デフォルトの名無しさん:2015/02/07(土) 08:39:22.93 ID:R2/oFkGJ
Lain か…懐かしいなぁ

200 :デフォルトの名無しさん:2015/02/07(土) 09:32:47.61 ID:FOHLYtkF
Life Gameのソースっぽい

201 :デフォルトの名無しさん:2015/02/07(土) 09:52:15.98 ID:OMRZtff8
D-WaveのOSがCommonLispってマジ?

202 :デフォルトの名無しさん:2015/02/07(土) 10:43:02.43 ID:Ei/z8not
>>198
>>201
知らないけど有り得そう

203 :デフォルトの名無しさん:2015/02/07(土) 10:51:45.09 ID:FOHLYtkF
>>198
wikiペディアでソースみつけた
ttp://en.wikipedia.org/wiki/Serial_Experiments_Lain

>>201
マジみたい、APIのみ公開だって。
アプリ開発はPython推しだね。

204 :デフォルトの名無しさん:2015/02/07(土) 12:02:20.85 ID:saCOOwny
>>198
このソースを書き写した覚えがあるなと思って、
ハードディスクを漁ったら見つかった。

この部分の前後のソースも写してあったけど、
前の部分のソースが明らかにライフゲームの生死判定だった。

205 :デフォルトの名無しさん:2015/02/07(土) 13:26:07.79 ID:yKpU9aut
その書き写したソース見たい

206 :デフォルトの名無しさん:2015/02/07(土) 13:32:26.38 ID:FOHLYtkF
>>205
>>203のリンクから元本のソース見れるよ。

207 :デフォルトの名無しさん:2015/02/07(土) 15:06:09.69 ID:yKpU9aut
見れた
配列をbit単位で操作するのは効果あるのかな

208 :デフォルトの名無しさん:2015/02/07(土) 15:20:36.83 ID:9qdU9S5T
>>207
1991年だからメモリ贅沢に使うのに躊躇したんじゃなかろか?

209 :デフォルトの名無しさん:2015/02/07(土) 15:36:59.11 ID:6rQaurxf
一バイトは金のひとすくい
しません、させません、ビットの無駄使い

おかげでビルも立ちました

210 :デフォルトの名無しさん:2015/02/08(日) 23:41:38.36 ID: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

211 :デフォルトの名無しさん:2015/02/09(月) 11:04:57.10 ID:inFNj6Hs
>>210
stackoverflowに質問を書く前に問題を解決でき
オープンソースにせずとも問題を解決出来る高い生産性が
有るって事だなw
言語も人も。

212 :デフォルトの名無しさん:2015/02/09(月) 11:50:04.98 ID:wTON1hpK
設定ミスでそうなっただけってどっかで見た気がする

213 :デフォルトの名無しさん:2015/02/09(月) 11:55:17.59 ID:gnp8i06N
オープンソースにせずとも問題を解決出来る、って意味分らないね

214 :デフォルトの名無しさん:2015/02/09(月) 18:29:24.33 ID: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/

215 :デフォルトの名無しさん:2015/02/09(月) 18:35:56.82 ID:yftdnQui
うぉー!
FORTLANと同席かい!!

216 :デフォルトの名無しさん:2015/02/09(月) 22:47:33.62 ID:JzEtMJoP
FORTRANじゃあーい!!

217 :デフォルトの名無しさん:2015/02/09(月) 22:57:24.39 ID:HcxTGLiU
Ratforってあったよね

218 :デフォルトの名無しさん:2015/02/09(月) 23:47:36.78 ID:JzEtMJoP
Rational Fortran
初代プログラミング作法(programming tools)のやつね。

219 :デフォルトの名無しさん:2015/02/09(月) 23:55:00.91 ID:bwEZbR4B
http://jbbs.shitaraba.net/sports/42269/

220 :デフォルトの名無しさん:2015/02/10(火) 17:05:14.42 ID:Xy5S1/Fv
>> 218
「ソフトウェア作法」ね
http://www.amazon.co.jp/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E4%BD%9C%E6%B3%95-Brian-W-Kernighan/dp/4320021428/ref=pd_sim_b_3?ie=UTF8&refRID=00X1H3NNRVZ5P3BCDTMQ

221 :デフォルトの名無しさん:2015/03/07(土) 00:42:51.80 ID:1AfT/MV4
LET OVER LAMBDAを読んでいるのですが
しょっぱなで出てくるマクロdefmacro/g!が動きません。

(defmacro defmacro/g! (name args &rest body)
(let ((syms (remove-duplicates
(remove-if-not #'g!-symbol-p
(flatten body)))))
`(defmacro ,name ,args
(let ,(mapcar
(lambda (s)
`(,s (gensym ,(subseq
(symbol-name s)
2))))
syms)
,@body))))

(macroexpand-1
'(defmacro/g! nif (expr pos zero neg)
`(let ((,g!result ,expr))
(cond ((plusp ,g!result) ,pos)
((zerop ,g!result) ,zero)
(t ,neg)))))

;=>(DEFMACRO NIF (EXPR POS ZERO NEG) (LET () `(LET ((,G!RESULT ..

(flatten '`(let ,g!result))が
(SB-INT:QUASIQUOTE LET ,G!RESULT)になるので
,g!resultがremove-if-notを通り抜けられないのが理由でしょうか。
sbcl1.2.7です。動かす方法はありますか?

222 :デフォルトの名無しさん:2015/03/07(土) 00:48:06.97 ID:1AfT/MV4
(defun g!-symbol-p (s)
(and (symbolp s)
(> (length (symbol-name s)) 2)
(string= (symbol-name s)
"G!"
:start1 0
:end1 2)))

223 :デフォルトの名無しさん:2015/03/07(土) 07:09:08.52 ID:mW7RcyXy
コードコピペしたらちゃんと動いたけど
flattenが間違ってんじゃないかな

224 :デフォルトの名無しさん:2015/03/07(土) 16:01:02.06 ID:yXgYIHFE
試しにwindows版のsbcl1.2.7入れてやってみたが
確かに動かないな、これ
windows版ccl1.10ではちゃんと動いた
こういうことってあるんだな

225 :デフォルトの名無しさん:2015/03/07(土) 16:17:29.95 ID:IuS2RJP4
clisp+alexandria:flattenでやってみたけど動くよ

226 :デフォルトの名無しさん:2015/03/07(土) 16:50:40.73 ID:yXgYIHFE
debianのsbcl1.0.57.0ではちゃんと動く
今度は普段ccl1.10で使ってるslimeでsbcl1.2.7動かしてみたが
やっぱり動かん

227 :デフォルトの名無しさん:2015/03/07(土) 19:54:37.09 ID:sXXhs6bf
これが関係してる?

#:g1: SBCL 1.2.2でのbackquoteの変更
http://g000001.cddddr.org/3615721500

228 :デフォルトの名無しさん:2015/03/08(日) 14:36:36.18 ID:AqwQTNqO
Common Lisp 素人です.
SSL って cl+ssl が標準的なんですかね?
以下のコードが動かないんですが, これはうちの環境が悪いんでしょうか?

```
(ql:quickload :usocket)
(ql:quickload :cl+ssl)

(let* ((sock (usocket:socket-connect "imap.gmail.com" 993 :protocol :stream :timeout 60))
(sock-stream (cl+ssl:make-ssl-client-stream (usocket:socket-stream sock))))
(unwind-protect
(progn
(format sock-stream "? CAPABILITY"))
(usocket:socket-close sock)))
```

Debugger:

```
There is no applicable method for the generic function
#<STANDARD-GENERIC-FUNCTION STREAM-WRITE-STRING (3)>
when called with arguments
(#<CL+SSL::SSL-STREAM
for #<FD-STREAM
for "socket 192.168.1.60:46384, peer: 64.233.187.109:993"
{1005B13083}>>
"? CAPABILITY" 0 NIL).
[Condition of type SIMPLE-ERROR]
```

cl+ssl の streams.lisp では stream-write-byte についてしか defmethod してないけど,
普通はこれで動くもんなんです?

229 :デフォルトの名無しさん:2015/03/08(日) 14:39:57.84 ID:4UYhxwse
SBCLのバッククォートは構造体に変換されるようになったから
LET OVER LAMBDAにあるような、バッククォートを含むコードの
flattenによるコードウォークはSBCLだと動かなくなったって事か。
ダメじゃんSBCL〜
こんなバッククォートの仕様、CLTL2満たしてるのか?

230 :228:2015/03/08(日) 19:54:56.42 ID:AqwQTNqO
解決したので報告です. :external-format を指定して flexi-streams を使えば良いようです.

```
(let* ((sock (usocket:socket-connect "imap.gmail.com" 993 :protocol :stream :timeout 60))
(sock-stream (cl+ssl:make-ssl-client-stream (usocket:socket-stream sock) :external-format '(:latin-1 :eol-style :crlf))))
(unwind-protect
(progn
(listen sock-stream)
(format *standard-output* "~%~a~%" (read-line sock-stream nil))
(force-output *standard-output*)
(format sock-stream "? CAPABILITY~%")
(force-output sock-stream)
(listen sock-stream)
(format *standard-output* "~%~a~%" (read-line sock-stream nil))
(force-output *standard-output*)
)
(usocket:socket-close sock)))
```

=>

```
* OK Gimap ready for requests from xxx.xxx.xxx.xxx hogehoge

* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN
```

231 :デフォルトの名無しさん:2015/03/17(火) 01:48:34.28 ID:gpmCn1O6
(変数 値)のリストと式が与えられた状態で、変数を値に束縛した環境で式を評価したいのですが、良い方法がわかりません
現状では次のように実装しています
(let ((bindings '((a 1) (b 2))) (form '(+ a b)))
(eval `(let ,bindings ,form)))
実際にはformに対してbindingsを変えたものが何度も呼ばれます
また、formは複雑なものも想定します
他にいい方法はありますでしょうか?

232 :デフォルトの名無しさん:2015/03/17(火) 10:47:28.60 ID:Zf13xXA9
(let ((bindings '((a 1) (b 2))) (form '(+ a b)))
(progv
(mapcar #'car bindings)
(mapcar #'cadr bindings)
(eval form)))
とかかなあ

もしくはformを関数にしてしまうのがいいのかな
(let ((bindings '((a 1) (b 2))) (form '(+ a b)))
(let ((thunk (coerce `(lambda () ,form) 'function)))
(progv
(mapcar #'car bindings)
(mapcar #'cadr bindings)
(funcall thunk))))
bindingだけ変えて何度も走らせるなら多分効率もいいと思う(確かめたわけじゃないけど)

インタプリタかなにか作ってるの? 👀

233 :デフォルトの名無しさん:2015/03/17(火) 10:48:46.17 ID:Zf13xXA9
なぜか変な絵文字が入った…

234 :デフォルトの名無しさん:2015/03/17(火) 13:59:09.21 ID:gpmCn1O6
>>232
progvで動的変数が作られるのは知りませんでした
formの関数化も良さそうですね
mapcarによるコンシングはデータ構造を工夫してなくせそうです
だいぶパフォーマンスが改善されそうです。ありがとうございます

ある言語のサブセットを作ってます

235 :デフォルトの名無しさん:2015/03/26(木) 19:32:41.80 ID:atSKhz5s
質問です。以下の、
私家版、Common Lisp プログラマのレベル10
http://www.reddit.com/r/lisp_ja/comments/30cfn0/%E7%A7%81%E5%AE%B6%E7%89%88common_lisp_%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB10/
の中のレベル3に、
「fletやlabelsによるローカル関数定義を多用」が、
「Common Lispでは名前空間の汚染はあまり気にしなくて良いので多用する必要はない」とレスされ、
るそうですが、
なぜ気にしなくて良いのですか?

236 :デフォルトの名無しさん:2015/03/26(木) 20:09:27.36 ID:7QpaiPyE
>>235
comon lisp よりも scheme の方がよさそーだ‥

237 :デフォルトの名無しさん:2015/03/26(木) 21:35:12.89 ID:RYFxX3Lv
>>235
なんかコイツ自身レベルが低そうだ

238 :デフォルトの名無しさん:2015/03/31(火) 15:33:38.54 ID:Wn1BJkY4
235です。
>>235
それはなぜですか。
もしよければ、意見を聞きたいです。

>>237
え、わたし(235)のこと。それともリンク先を書いた人のこと。

私自身は
ローカルなら他から呼べなくて安全といえるけど、
1つの定義が大きくなってあまり好きじゃないんです。

極端に言えば、
(1つ目の処理 ...)
(2つ目の処理 ...)
(3つ目の処理 ...)
と、書いていって最終的に
(3つ目の〜 (2つ目の〜 (1つ目の〜 ...)))
と、するのが好きなのですが
好き嫌いを超えた優劣や善悪があるのでしょうか。

239 :デフォルトの名無しさん:2015/04/03(金) 04:59:16.54 ID:OpTcNNTw
元スレで作った人に聞けばいいのでは…
たぶん単純に名前空間が関数と変数で分かれてるってだけの話だと思うけど

240 :デフォルトの名無しさん:2015/04/04(土) 21:18:43.12 ID:+yfNqqsV
初歩的な質問ですいません。
CommonLispをCentos6にインストールできないんですが
単純にyum 〜では駄目なんですか?

241 :デフォルトの名無しさん:2015/04/04(土) 21:30:16.17 ID:zaPqarn1
sudo yum install sbcl.x86_64
じゃだめなん?

242 :デフォルトの名無しさん:2015/04/08(水) 14:04:17.18 ID:0NyqAI50
Eclipse Common Lisp がオープンソース化された話があるみたいだけど、
これって 32 bit Windows でも動く?
公式には 64 bit しかチェックしてないみたいに書いてあるけど。

243 :ドリル優子:2015/04/20(月) 17:48:30.95 ID:pJtoLIOS
これはさすがにヤバイだろww

【神回】美人ニコ生主mAriAがFME切り忘れで公開オナニー!?【電マ】

https://www.youtube.com/watch?v=Y6Fz1MYedSw

244 :デフォルトの名無しさん:2015/04/20(月) 17:51:10.30 ID:6c0j1ZNC
>>243
しねかす

245 :デフォルトの名無しさん:2015/04/20(月) 18:27:45.45 ID:BMKjvfkW
こんにちわ、これってどういう場面で使うんでしょうか??
関わりがないってことは特に知る必要ないんでしょうか?

90 KB
新着レスの表示

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


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