【入門】Common Lisp その10【質問よろず】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2013/02/20(水) 15:31:16.00Lisp Schemeスレの話題は高度すぎて気後れする人が話しあったり。
それ以外でもCommon Lispについての話題なら歓迎します。
ま、ゆっくりやりましょう。
「いいものの本質は、いかなる時代においても変わらない」byパワーズ
■前スレ
【入門】Common Lisp その9【質問よろず】
http://toro.2ch.net/test/read.cgi/tech/1330888006/
■Wiki
http://wiki.fdiary.net/lisp/ (id:guest pass:cl)
http://cl.cddddr.org/
http://tips.lisp-users.org/common-lisp/
0002デフォルトの名無しさん
2013/02/21(木) 00:11:50.650003デフォルトの名無しさん
2013/02/21(木) 01:11:18.800004デフォルトの名無しさん
2013/02/21(木) 01:15:25.680005デフォルトの名無しさん
2013/02/21(木) 01:21:09.62そうか
0006デフォルトの名無しさん
2013/02/21(木) 05:59:51.54http://blog.livedoor.jp/dankogai/archives/51854832.html
0007デフォルトの名無しさん
2013/02/21(木) 10:06:46.88ポケットサイズのlispマシン欲しい
0008デフォルトの名無しさん
2013/02/21(木) 22:59:55.53Netwalkerは普通のlinuxマシンじゃないの ?
Vaio Pとかいろいろ買ったけど
Macbook Airが一番無難で可搬性の高いUnix(lispの動くプラットフォーム)
なんじゃないかと現状思う。
AndroidがLinuxだと思ってNECのLife Touch Note買ったけど
shellなくてわろた
00098
2013/02/21(木) 23:02:51.05インストールできるんじゃないの ?という意味で書きました。
わかりにくい書き方ですみません
0010デフォルトの名無しさん
2013/02/21(木) 23:18:26.42他に系統的に学べるサイトはないかな
0011デフォルトの名無しさん
2013/02/21(木) 23:34:49.500012デフォルトの名無しさん
2013/02/21(木) 23:50:39.130013デフォルトの名無しさん
2013/02/22(金) 00:15:08.83結構値がはるしキツいな
0014デフォルトの名無しさん
2013/02/22(金) 00:19:45.76そこまで難しい英語じゃなかったので
読もうと思えば読めるレベル
0015デフォルトの名無しさん
2013/02/22(金) 17:29:22.11その点手続型言語は基本的な文法をちょろっとやれば
そこそこ自力で書き始められて、壁にぶち当たったら本を読んで、
とできるけど、lispはそれが難しかった
0016デフォルトの名無しさん
2013/02/22(金) 17:57:40.920017デフォルトの名無しさん
2013/02/23(土) 00:31:27.17それだけでも色々できて面白かったけどなあ
0018デフォルトの名無しさん
2013/02/23(土) 01:57:48.09手続き型・・・小学校で習う表記に似てるからじゃね?
0019デフォルトの名無しさん
2013/02/23(土) 02:10:07.98あと、lisp をできるようになりたいだけなら日本語版でもいい。でも、凄いエンジニアになりたいのなら、英語力は必須だよ。
逆に考えればlispと英語が同時に学べるチャンスだ。
0020デフォルトの名無しさん
2013/02/23(土) 13:34:08.23xyzzy Lisp Programming
http://www.geocities.jp/m_hiroi/xyzzy_lisp.html
0022デフォルトの名無しさん
2013/02/23(土) 16:08:30.02でもまさか予約分しか入荷して無かったってオチじゃないよな
0023デフォルトの名無しさん
2013/02/23(土) 16:23:40.08予約してた人は今日届くのかな
0024デフォルトの名無しさん
2013/02/23(土) 22:55:28.840025デフォルトの名無しさん
2013/02/24(日) 04:01:59.03しかし正直コードのある本は電子書籍で出してほしい。
0026デフォルトの名無しさん
2013/02/24(日) 12:05:25.33C-c C-d h と同じことを他のライブラリでやれるようにするものってありませんかね?
0027デフォルトの名無しさん
2013/02/24(日) 13:14:51.50(mapcar #'(lambda (x) (* 2 x)) '((1 2) 3))
的な。
0028デフォルトの名無しさん
2013/02/24(日) 13:31:22.34破壊的変更よく知らないので戻り値で返す
(defun two-times-every-node(tree)
(cond ((null tree) tree)
((atom tree) (* tree 2))
(t (cons (two-times-by-node (car tree)) (two-times-by-node (cdr tree))))))
(print (two-times-every-node '(1 (2 5 (10 30)) 3)))
0029デフォルトの名無しさん
2013/02/24(日) 13:32:25.79(defun two-times-every-node(tree)
(cond ((null tree) tree)
((atom tree) (* tree 2))
(t (cons (two-times-every-node (car tree)) (two-times-every-node (cdr tree))))))
(print (two-times-every-node '(1 (2 5 (10 30)) 3)))
0030デフォルトの名無しさん
2013/02/24(日) 13:37:49.63ドキュメント方面で共通の仕組みがdocstringくらいしかないから、
C-c C-d dくらいしかないと思う。CCLだとdocstring表示されんけど。
それ以上が欲しいならレッツ自作。
>>27
自分が知る限りない。レッツ自作。
0031デフォルトの名無しさん
2013/02/24(日) 13:39:36.100032デフォルトの名無しさん
2013/02/24(日) 14:05:07.09初心者の俺も練習がてら書いてみた。
(defun 2bai-2bai (node)
(if (consp node)
(mapcar #'2bai-2bai node)
(* node 2)))
(2bai-2bai '(1 (2 5 (10 30)) 3))
0033デフォルトの名無しさん
2013/02/24(日) 14:06:54.35(defun f (x)
(if (listp x)
(mapcar #'f x)
(* 2 x)))
(mapcar #'f '((1 2) 3))
0034デフォルトの名無しさん
2013/02/24(日) 14:11:53.350035デフォルトの名無しさん
2013/02/24(日) 14:14:36.81定石だと思うぞ
0036デフォルトの名無しさん
2013/02/24(日) 14:25:29.92働きたくないでござる。早くニートになりたい。
0037デフォルトの名無しさん
2013/02/24(日) 14:41:47.350038デフォルトの名無しさん
2013/02/24(日) 19:38:17.41ありがとうございます!
mapcarで再帰は自分も知らなかったので眼から鱗です。
0039デフォルトの名無しさん
2013/02/24(日) 23:38:24.350040デフォルトの名無しさん
2013/02/25(月) 00:23:46.970041デフォルトの名無しさん
2013/02/26(火) 01:44:26.04https://github.com/akovalenko/sbcl-win32-threads/wiki
ここで入手できるバイナリと自作のlispソースを一緒に配布するとき、
どのようなライセンスにしなければならないのでしょうか
sbcl自体は public domain + BSD-style licenses のようですが…
0042デフォルトの名無しさん
2013/02/26(火) 18:17:17.01リストリテラルを書きかえるのはよくないって注に書いてあって
ドキっとしたのでついレジに持っていってしまった
あと訳した人が元ヤンキーである可能性が微レ存
0043デフォルトの名無しさん
2013/02/26(火) 22:13:22.480044デフォルトの名無しさん
2013/02/28(木) 00:35:27.69昔書いたやつどぞー。責任は持てんので、あくまでも参考程度に。
http://cl.cddddr.org/index.cgi?%E8%89%AF%E3%81%8F%E3%81%82%E3%82%8B%E8%B3%AA%E5%95%8F#H-1z3jsjcugixm7
ちなみに、他のライブラリを使ってそれを同梱する場合、
そっちのライセンスにも注意。特にGPL。
0046デフォルトの名無しさん
2013/02/28(木) 16:16:19.02説明には "Go to the previous location, depending on context.
When displaying XREF information, this goes to the previous reference."
と在るのですがprevious locationというのが何を指しているのか分かりません。
どなたかお教えくださいm( _ _ )m
0047デフォルトの名無しさん
2013/03/02(土) 20:48:54.59というリストがあったとして
`(let (,@parameter)) ; とすると
;; (let (`(,A ,B) `(,C ,D) `(,E ,F))) になりますが(分かる)
`(let hoge
`(let (,,@parameter))) ; とすると
;; (LET HOGE
;; `(LET ((,A ,B) (,C ,D) (,E ,F))
;; )) ;という風に前者と違って`が消えたものが挿入されるのは何故なのでしょうか?
0048デフォルトの名無しさん
2013/03/02(土) 22:43:19.360049デフォルトの名無しさん
2013/03/02(土) 23:11:53.84仕様はコレ。
http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm
処理系は好きに最適化してよいそうです。
0050デフォルトの名無しさん
2013/03/02(土) 23:29:30.98ありがとうございます。`(`(,A ,B))が`((,A ,B))と等価なのですね。
しかし``(,,A ,,B)と`(,A ,B)は等価ではないのですね。
以下のマクロを読み解こうとしてドツボにはまっていました。難しい!
(defmacro once-only ((&rest names) &body body)
(let ((gensyms (loop for n in names collect (gensym))))
`(let (,@(loop for g in gensyms collect `(,g (gensym))))
`(let (,,@(loop for g in gensyms for n in names collect ``(,,g ,,n)))
,(let (,@(loop for n in names for g in gensyms collect `(,n ,g)))
,@body)))))
0051デフォルトの名無しさん
2013/03/02(土) 23:49:09.29(let ((a "hoge"))
(list 'ほら `((,a)) `(`(,a))))
;=> (ほら (("hoge")) (`(,A)))
``(,,@parameter)が
`(`(,A ,B) `(,C ,D) `(,E ,F))にならずに
`((,A ,B) (,C ,D) (,E ,F))になるのってどうなんだろう。
そのコードは後者の挙動を前提にしているような。
0052デフォルトの名無しさん
2013/03/07(木) 15:54:02.640053デフォルトの名無しさん
2013/03/09(土) 23:17:33.27公式
http://ccl.clozure.com/
リリースノート訳
http://qiita.com/items/968166dde6a820ebb97e
0054デフォルトの名無しさん
2013/03/11(月) 21:57:44.02オブジェクト指向ができるlispのライブラリってあるんですかね?
defclass class-name ({superclass-name}*) ({slot-specifier}*) ({method-specifier}*)
みたいに定義して(method object)で呼び出せるようなの
pclには(send object 'foo)になるのが嫌だから今の形になったとあるけど
(foo object)で呼び出せるようにするのって不可能だったんですかね?
sendが嫌だというなら(slot-value object 'foo)だってsendと似たようなもんだと思うんですけど..
0055デフォルトの名無しさん
2013/03/11(月) 22:48:48.12ここまで決まってたら10分ぐらいでマクロ作れそうだな。
sendが残ったままだったら、slot-valueを使う時に(send object 'slot-value 'foo)としなければいけない。
sendはメソッド呼び出しで、slot-valueはあくまでアクセスするためのメソッド。
pclにはsendが残ったままだったら、
(mapcar #'foo '(obj-a obj-b obj-c))としたい時に
(mapcar #'(lambda (x) (send x 'foo)) '(obj-a obj-b obj-c))としなければいけず、
これではLISPの力を発揮しきれないという様な事が書いてあった気がする。
0056ハツネツ
2013/03/11(月) 23:21:23.65(defmacro my-defclass (class-name superclasses slots methods)
`(progn
(defclass ,class-name ,superclasses ,slots)
,@(mapcar #'(lambda (method-spec)
(destructuring-bind (method-name args &rest body) method-spec
`(defmethod ,method-name ((this ,class-name) ,@args) ,@body)))
methods)))
(my-defclass person ()
((name :initarg :name)
(age :initarg :age :accessor age))
((greet (your-name)
(format nil "Hello, ~a! my name is ~a." your-name (slot-value this 'name)))
(birthday ()
(incf (slot-value this 'age)))))
(setf taro (make-instance 'person :name "Yamada Tarou" :age 20))
(slot-value taro 'name) ;=>"Yamada Tarou"
(greet taro "hoge") ;=> "Hello, hoge! my name is Yamada Tarou."
(slot-value taro 'age) ;=> 20
(age taro) ;=> 20 ↑と同じ (:accessor ageとしたから使える)
(progn
(birthday taro)
(birthday taro)
(age taro)) ;=> 22
0057デフォルトの名無しさん
2013/03/12(火) 20:49:01.00簡単にできちゃうのか。。
なんでこういう方向でいかないんですかね?
今のoop慣れした世代にはこっちの方が親近感あるから
とっつきやすいと思うんだけど
0058デフォルトの名無しさん
2013/03/12(火) 20:55:24.88なんです
0059デフォルトの名無しさん
2013/03/12(火) 21:00:59.930060デフォルトの名無しさん
2013/03/12(火) 21:31:28.500061はちみつ餃子 ◆8X2XSCHEME
2013/03/12(火) 21:47:58.30デファクトスタンダードになりうるクラス指向ライブラリがあれば、それなりに使う人もいるんじゃね?
0062デフォルトの名無しさん
2013/03/14(木) 00:43:41.46なかなかあほっぽくなっとるからかっちょよく書いとくれ
doはなんか物騒だったので使えんかった
xyzzyで動かしちょる
(defun fibv (n)
(let ((a 1)(b 1) (c 1) (d 0) (a2 1) (b2 1) (c2 1) (d2 0)
(t1 0)(t2 0)(t3 0)(t4 0))
(while (> n 0)
(setq t1 (+ (* a2 a) (* b2 c)))
(setq t2 (+ (* a2 b) (* b2 d)))
(setq t3 (+ (* c2 a) (* d2 c)))
(setq t4 (+ (* c2 b) (* d2 d)))
(setq a2 t1)
(setq b2 t2)
(setq c2 t3)
(setq d2 t4)
(setq n (- n 1)))
d2))
参考
http://itpro.nikkeibp.co.jp/article/COLUMN/20061010/250176/
0063デフォルトの名無しさん
2013/03/14(木) 02:42:13.88再帰を使わずに書きたいのね、多分
こんな感じだろうか。
(defun fib (n)
(loop with (a b c d) = '(1 1 1 0)
for (a2 b2 c2 d2) = '(1 1 1 0)
then (list (+ (* a2 a) (* b2 c))
(+ (* a2 b) (* b2 d))
(+ (* c2 a) (* d2 c))
(+ (* c2 b) (* d2 d)))
repeat n
finally (return d2)))
0064デフォルトの名無しさん
2013/03/14(木) 14:33:24.70いったんCLOSの機能を使い出すと副作用でまくりで
関数プログラミングとの共存など不可能のように思える。
0065デフォルトの名無しさん
2013/03/14(木) 14:37:36.560066デフォルトの名無しさん
2013/03/14(木) 21:10:25.24式と文が別物ってところに山ほど違和感がある >いわゆる普通の言語
# 高級アセンブラの C は除く
0067デフォルトの名無しさん
2013/03/14(木) 21:47:43.67そもそも、代入が式だし。
0068デフォルトの名無しさん
2013/03/14(木) 22:12:50.89いや、それは極論だし
0069デフォルトの名無しさん
2013/03/14(木) 22:47:11.340070デフォルトの名無しさん
2013/03/15(金) 19:38:17.800071デフォルトの名無しさん
2013/03/15(金) 21:24:32.91REPLで実現してくれるライブラリってない?
0072デフォルトの名無しさん
2013/03/16(土) 00:51:53.81*curses.so あたりを ffi すればいいのではあるまいか?
0073デフォルトの名無しさん
2013/03/16(土) 09:18:52.30ありがとう
0074デフォルトの名無しさん
2013/03/16(土) 14:14:13.11たとえば、パッケージA,Bを別々に定義して、その中でそれぞれクラスA, Bを定義、
そのクラスをパッケージαで使う、とか考えた時に、
;; まずAを定義して
(defpackage :A (:use :cl) (:export :attr-of))
(in-package :A)
(defclass A () ((attr :reader attr-of)))
;; 次にBを定義
(defpackage :B (:use :cl) (:export :attr-of))
(in-package :B)
(defclass B () ((attr :reader attr-of)))
;; αで2つを一緒に使おうとすると、名前が衝突して落ちる
(defpackage :child-alpha (:use :cl :A :B))
A-attr, B-attr, とかいうアクセサはオブジェクト指向的じゃないから嫌だけど、
attr-ofにすると、先にアクセサ用パッケージでシンボルを用意するのもダルい。
いっそパッケージを、アクセサ、クラス、総称関数の3つだけにしたらいいのかね。
お前らはどうやってんの?
0075デフォルトの名無しさん
2013/03/16(土) 17:08:50.04初期値として任意の値をセットしておくことはできませんか?
0076デフォルトの名無しさん
2013/03/16(土) 19:16:56.09どこかのユーティリティライブラリにありそうですけど、
自分の使ってるものには見当たらなかったので書いてみました。
こういう感じので良いですか?
http://paste.lisp.org/+2WZC
0077デフォルトの名無しさん
2013/03/16(土) 19:42:23.35自分ならだるさを許容するかパッケージプリフィックスで手を打つと思う。
0078デフォルトの名無しさん
2013/03/16(土) 21:33:03.10ありがとうございます。
やりたいことは初期値をセットしておいてその一部を書き換えてread-lineさせる
という動作なので、"default value"が表示されてる状態にしたいのです。
0079デフォルトの名無しさん
2013/03/16(土) 21:49:19.62以下のnthを1まとめにしようとしています
2時間粘っても上手く行きません・・・
(nth 6 (nth 3 (nth 4 (nth 8 (xmls:parse (drakma:http-request *sample-xml*))))))
(nth 3 (nth 2 (nth 4 (nth 8 (xmls:parse (drakma:http-request *sample-xml*))))))
0080デフォルトの名無しさん
2013/03/16(土) 21:59:27.44(reduce (lambda (a i) `(nth ,i ,a)) indices :initial-value obj))
(macroexpand '(nnnnnnth hoge 1 2 3 4))
; => (NTH 4 (NTH 3 (NTH 2 (NTH 1 HOGE))))
希望と合ってる?
0081デフォルトの名無しさん
2013/03/16(土) 21:59:43.71厚かましいお願いですが、XMLで属性からデータを取得できるやり方も教えていただけないでしょうか
0082デフォルトの名無しさん
2013/03/16(土) 22:07:48.91完璧です!ありがとうございます
畏れ入りました
自分のレベルがあまりに低いからかもしれませんが
なぜこんな短時間でマクロを考えつけるのでしょうか?
やっぱり経験ですか?
0083デフォルトの名無しさん
2013/03/16(土) 22:16:15.56自分はあまりその辺りに詳しくないのですが、おそらく端末制御の領分になると思います。
難易度がかなり上がりますが、それでもその方式にこだわりがあるのなら、
>>72-73で挙がっている情報を調べてみると手がかりが掴めるかもしれません。
0084デフォルトの名無しさん
2013/03/16(土) 22:44:43.37XMLのツリーを操作するときにリストとして直に扱うのはあまりお勧めしません。
(nth 6 ...)や(caddddr ...)のようなコードでは何をやっているのかさっぱり分かりません。
XMLSなら
(let ((xmls (xmls:parse "<element attribute=\"value\">text</element>")))
(xmls:xmlrep-attrib-value "attribute" *xmls*))
のようにすれば要素の値を取得できます。既存のアクセサを使ったり、
自分でアクセサを作って利用することを強くお勧めします。
また、XMLSはリストの使用を全面に押し出したプロダクトなので、初心者には向きません。
エラーハンドリングも簡略化されているため、コードを追えないと原因も探れません。
慣れないうちはClosure XMLでDOMやSTP、XPathを使った方が良いと思います。
0085デフォルトの名無しさん
2013/03/16(土) 22:53:51.01ttp://common-lisp.net/project/plexippus-xpath/examples.html
これ入ったのでこれ使うといいと思う。依存関係でClosure XMLも入るし
0086デフォルトの名無しさん
2013/03/16(土) 23:06:11.04>>85
なるほど。勉強になります。
それらを踏まえ、もう一度作りなおしてみます。
ご教授ありがとうございました!
0087デフォルトの名無しさん
2013/03/16(土) 23:25:06.33こういう例が欲しいとか、そういうのがあったら教えて下さい。
http://tips.lisp-users.org/common-lisp/index.cgi?XML%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0
0088デフォルトの名無しさん
2013/03/16(土) 23:34:39.24ありがとうございます。早速ブックマークに登録しました。
0089デフォルトの名無しさん
2013/03/17(日) 07:44:14.36ncurses に libform ってのがくっついてて,
こいつの set_field_buffer() とかをffiして使えば何とかなるのかな?
後は自前で作りこむくらいしか思いつかない
0090デフォルトの名無しさん
2013/03/17(日) 09:20:40.67ヒントありがとうございます!
その辺をslimeのcontribあたりと合わせて見てみます。
0091デフォルトの名無しさん
2013/03/17(日) 18:46:12.79今は↓のように文字列をconcatenateで連結させていますが、formatのnilの部分をストリームに変えて出来ないものかと思っています
(concatenate 'string
(format nil "テスト")
(format nil "bar")
)
0092デフォルトの名無しさん
2013/03/17(日) 19:03:55.87(with-output-to-string (s)
(dolist (a args) (princ a s))))
こういうこと?
0093デフォルトの名無しさん
2013/03/18(月) 09:45:42.470094デフォルトの名無しさん
2013/03/18(月) 18:07:16.640095デフォルトの名無しさん
2013/03/18(月) 18:41:36.920096デフォルトの名無しさん
2013/03/18(月) 18:49:13.610097デフォルトの名無しさん
2013/03/18(月) 21:46:13.46めちゃくちゃ大雑把に言えば
「今評価しないで後で評価されるかも知れない式」
全般のことじゃね?
0098デフォルトの名無しさん
2013/03/18(月) 23:14:34.67やっぱ構造体使うんですか?それともリスト?
0099デフォルトの名無しさん
2013/03/19(火) 00:32:11.470100デフォルトの名無しさん
2013/03/20(水) 15:00:45.68value に格納されている文字列
"hogehoge 'abc' 1112 'def'999 'ghi'"
でクオーテーションで囲まれている部分を$(数字) で置き換えて
"hogehoge $(0) 1112 $(1)999 $(2)"
という風にしたいのですが
"hogehoge $(0) 1112 $(0)999 $(0)"
となってしまいうまくいきません
(let* (
(value "hogehoge 'abc' 1112 'def'999 'ghi'")
(pattern "\\('[^']*'\\)")
(eval-value value)
)
(setq eval-value (replace-regexp-in-string pattern (format "$(%d)" 0) eval-value nil nil 1))
(setq eval-value (replace-regexp-in-string pattern (format "$(%d)" 1) eval-value nil nil 1))
(setq eval-value (replace-regexp-in-string pattern (format "$(%d)" 2) eval-value nil nil 1))
)
1回目のreplace〜で全て$(0)になってしまい、引数が↓のときとおなじ結果になってしまいます。
(replace-regexp-in-string pattern (format "$(%d)" 0) eval-value)
これってどうすればいいんでしょうか?
0101デフォルトの名無しさん
2013/03/20(水) 15:36:30.88それEmacs Lispだと思うんで、Emacsのスレで聞いてください。
てーか、そういうときはM-x describe-functionで関数を調べてみてください。
"Replace all matches for REGEXP with REP in STRING."って書いてます。
0102デフォルトの名無しさん
2013/03/23(土) 01:58:05.190103デフォルトの名無しさん
2013/03/23(土) 02:31:29.010104デフォルトの名無しさん
2013/03/23(土) 09:47:49.140105デフォルトの名無しさん
2013/04/07(日) 23:35:25.850106デフォルトの名無しさん
2013/04/08(月) 04:27:40.74なんで気になるの?
自分はMegademoで4Kとか64Kでも作らない限り気にもしないけど
0107デフォルトの名無しさん
2013/04/08(月) 16:44:33.1116G とか 32G の主記憶が当たり前の時代に, 組み込み物とか >>106 のような
用途でもない限り, 実行ファイルの大きさとか気にしてもしょうがないじゃん.
組み込み物だって, 1G とか 2G の主記憶積んだやつあるのに...
0108デフォルトの名無しさん
2013/04/08(月) 17:12:57.8501091/2
2013/04/09(火) 01:33:46.19(setf d (make-array '(1000 1000) :element-type 'double-float :initial-element 1.0d0))
という2次元配列の合計を求める関数なんですが、
(defun sum-d (a)
(let ((sum 0))
(dotimes (r 1000) (dotimes (c 1000) (incf sum (aref a r c)))) sum))
これに型宣言を以下のように入れてみました。
(defun sum-d-opt (a)
(declare (type (simple-array double-float (1000 1000)) a))
(let ((sum 0.0d0))
(declare (type double-float sum))
(dotimes (r 1000) (dotimes (c 1000) (incf sum (aref a r c)))) sum))
01102/2
2013/04/09(火) 01:47:29.07CL-USER> (time (sum-d d))
took 49,000 microseconds (0.049000 seconds) to run.
32,000,064 bytes of memory allocated.
1000000.0D0
CL-USER> (time (sum-d-opt d))
took 50,000 microseconds (0.050000 seconds) to run.
32,000,064 bytes of memory allocated.
1000000.0D0
高速化どころか遅くなってます・・
どなたか原因がわかる方おしえていただけますでしょうか?
使っている処理系はClozure CL 1.9です。
0111デフォルトの名無しさん
2013/04/09(火) 05:17:12.18disassemle すると, 型宣言した方はsse命令を使おうとして,
そのための準備コードが増えて遅くなってるように見える
(手元にあるのは 1.7 だけど....)
0112デフォルトの名無しさん
2013/04/09(火) 23:28:54.53(SUM-D D)
took 140 milliseconds (0.140 seconds) to run.
(SUM-D-OPT D)
took 79 milliseconds (0.079 seconds) to run.
前にSBCLの開発者が数値計算のベンチマーク取ってたけど、
CCLはあまり成績が良くなかった。ABCLのが速いくらいだったような。
速度が重要な場面ではSBCL使った方が良いと思う。
ついでに型推論とかもSBCLみたいに頑張らないから、
theとかdeclareとか無駄にいっぱい付けないと駄目だったはず。
あと、基本的な確認で申し訳ないけど、最適化宣言は大丈夫?
実行時型チェックとか外すのに条件があったりするけども。
http://accomplish-nothing.blogspot.jp/2011/02/clozure-cl.html
0113デフォルトの名無しさん
2013/04/10(水) 00:52:01.96GSoC2013
ガチリストになってて面白いけど、どれぐらい応募あるのかな。
0114109
2013/04/10(水) 01:29:29.92>>112
どうもありがとうございます。
確かにdisassembleするとSSE2のaddsdが使われてました。
型宣言することでgenericな + 演算子がネイティブの機械語命令に
最適化されたとしても、必ずしも高速化されるとは限らないんですね。
なお、最適化宣言は
(declare (optimize (speed 3) (debug 0) (safety 0)))
を入れてますが、あってもなくても速度は変わりませんでした。
ちなみに、SBCL(1.1.4)で試してみたところ劇的に高速化されました。
CL-USER> (time (sum-d d))
0.097 seconds of real time
CL-USER> (time (sum-d-opt d))
0.004 seconds of real time
Windows環境なので、比較的安定らしいClozure CLを使ってましたが、
doubleの数値計算を多用する場合はSBCLの方がいいかもしれませんね・・
0115デフォルトの名無しさん
2013/04/10(水) 06:43:55.10> doubleの数値計算を多用する場合はSBCLの方がいいかもしれませんね・・
CCLの結果
CL-USER> (time (sum-d d))
(SUM-D D) took 58,927 microseconds (0.058927 seconds) to run
CL-USER> (time (sum-d-opt d))
(SUM-D-OPT D) took 46,165 microseconds (0.046165 seconds) to run
SBCL(1.1.6)の結果
CL-USER> (time (sum-d d))
Evaluation took:
0.028 seconds of real time
0.027940 seconds of total run time (0.027940 user, 0.000000 system)
CL-USER> (time (sum-d-opt d))
Evaluation took:
0.001 seconds of real time
0.001564 seconds of total run time (0.001465 user, 0.000099 system)
0116デフォルトの名無しさん
2013/04/11(木) 00:22:31.41ごめん。SBCL開発者じゃなくておにぎりの人だった。
http://cl.cddddr.org/bench/cl-bench-2012-03-30.html
一応Nikodemus Siivolaのこんなんもあるけど。
http://random-state.net/files/microbench-2011-11-29.html
ここ一年くらいでSBCLもWindowsの対応が劇的に改善されたから、
特に理由がなければSBCLで良いんじゃないかなー、と思う。
CCLも過去にWindowsでの結構クリティカルなバグとかもあったし、
個人的には安定してる印象は持ってない。
0117デフォルトの名無しさん
2013/04/26(金) 20:42:23.250118デフォルトの名無しさん
2013/04/26(金) 20:44:58.23(car (cdr (cdr '(B C D E))))
(car (cdr '(C D E)))
(car '(D E))
D
0119デフォルトの名無しさん
2013/04/26(金) 20:55:17.77逆順に読めばいい
0120デフォルトの名無しさん
2013/04/26(金) 22:39:28.610121デフォルトの名無しさん
2013/04/28(日) 13:39:23.14$ sbcl --script sample.lisp
と実行するとき、sample.lispの中の
quicklispたちは別ファイルに分けたりするべきなのですか?
あまりプロジェクトに関わったりしたことないので
ファイル配置の勘所がわからないです
0122デフォルトの名無しさん
2013/04/28(日) 13:58:00.87sample.lispの中っていう表現が良く分からないです。
QuicklispはLinuxでのAPTみたいなパッケージ管理システムだから、
自分でそのパッケージを同梱して配布する必要はないですよ。
$ cat
(ql:quickload :alexandria)
(alexandria:define-constant +foo+ "foo" :test #'equal)
$ sbcl --script sample.lisp
って感じなら、Quicklispを導入してる環境で実行すると、
自動的にAlexandriaをダウンロードしてコンパイルしてくれるので。
0123デフォルトの名無しさん
2013/04/28(日) 14:18:27.25* 必要なライブラリは事前にQuicklispや手動でインストールしておくことが前提
* 必要なライブラリの読み込みはASDFで依存関係を定義して利用
という形のプロダクトが多かったです。
作っているのがライブラリならそのままASDF経由で利用してもらって、
アプリケーションならC言語のmain的なトップレベルの関数を用意しておいて、
REPLから呼び出したり、実行形式にしたコアイメージのトップレベルに指定したり、
スクリプトから(asdf:load-system :foo)とか(ql:quickload :foo)で読み込み、
トップレベルの関数を呼び出し、って感じじゃないでしょうか。
この辺り、Common Lispでは色々方法があって、全部説明すると長くなるので、
どんな感じの運用をしたいか書いてくれると回答をもらいやすいかも。
0124デフォルトの名無しさん
2013/04/28(日) 15:09:47.84とても理解できました
例えば、sample.lispが定期的にDBのバックアップを作るスクリプトだとして
(ql:quickload 'cl-dbi)が必要だとします
sbcl --script sample.lisp
をcronに登録するとき、sample.lispの先頭には
(load "~/.sbclrc)
(ql:quickload 'cl-dbi)
を書いておくのは自然なんでしょうか?
0125デフォルトの名無しさん
2013/04/28(日) 15:22:31.24ASDFファイル(sample.asd)に、実行時に必要になるライブラリを
明記しておくのが多いということでしょうか?
0126デフォルトの名無しさん
2013/04/28(日) 17:56:12.85スクリプトでは自然だと思います。
>>125
プロジェクトという言葉があったり、ファイル構成を気にしてらしたので、
一定以上の規模のソフトウェアも作りたいのかも、と思い、追記しました。
スクリプト用途ならASDFに対応する必要はないです。
ASDFに対応すると便利なのは、ソフトウェアのビルドに手順が必要だったり、
書いたソフトウェアを配布したいときです。ビルド用にcompile-fileするスクリプトを書いたり、
マクロを使うときにeval-whenで:comple-toplevel指定したりって面倒じゃないですか。
そういうときに利用するとその辺りを良きに計らってくれるので楽です。
makeとかrakeとかmvnとかantとかその辺に該当します。
0127デフォルトの名無しさん
2013/04/28(日) 23:01:16.97とてもよくわかりました
ありがとうございました!
0128デフォルトの名無しさん
2013/05/09(木) 20:17:14.370129デフォルトの名無しさん
2013/05/09(木) 22:15:46.82ユーザインターフェイス(画面周りとか操作周りとか)は、
多分JavaScriptの力を借りることになる。
0130デフォルトの名無しさん
2013/05/09(木) 22:47:45.810131デフォルトの名無しさん
2013/05/11(土) 20:15:46.770132デフォルトの名無しさん
2013/05/24(金) 11:45:04.970133デフォルトの名無しさん
2013/05/29(水) 02:04:18.66stalinより高速なんじゃないのかな
0134デフォルトの名無しさん
2013/05/29(水) 03:05:21.97実行時情報を元にJITコンパイラが頑張るJavaScriptだと、
アプローチ的にはむしろ対極にある気がするけど
0135デフォルトの名無しさん
2013/05/29(水) 04:19:34.86そこだけ型推論かけてNativeにコンパイルするそうだ
0136はちみつ餃子 ◆8X2XSCHEME
2013/05/29(水) 12:08:35.87>>133
JavaScript って毎回ソースコードを読込むところからスタートして実行するところまでやらなきゃならないから、
コンパイル・最適化が実行時間に含まれるわけで、あまり気合入れた最適化も出来ないんだよな。
つまり、めいっぱい頑張って最適化すればいいわけじゃなくて、
全体として一番よくなるほどほどのところを目指すトレードオフの見極めが重要な JS は
Common Lisp とは目標が違うから高速化のために組合わせるのはうまくない気がする。
0137デフォルトの名無しさん
2013/05/29(水) 12:15:29.28部分言語である小さいcore言語を設定してて。
それからJITは気合入れたい所に目一杯気合入れることが可能なフレームワークです。
実行時プロファイルが使えるので。
0138デフォルトの名無しさん
2013/06/07(金) 01:56:27.51twitter.com/g000001
0139デフォルトの名無しさん
2013/06/07(金) 01:59:19.020140デフォルトの名無しさん
2013/06/08(土) 21:18:23.73なんで (A . (B . (C . D))) じゃなく (A . (B . (C . (D . nil)))) なの?最後の nil は何なの?
0141デフォルトの名無しさん
2013/06/08(土) 21:32:26.560142デフォルトの名無しさん
2013/06/08(土) 21:33:48.63() と書くこともある
0143デフォルトの名無しさん
2013/06/08(土) 21:36:06.910144デフォルトの名無しさん
2013/06/08(土) 21:59:34.33cdr部に別のコンスセルを入れることでリストを構成する
また、そのようなコンスセルの連鎖がリストであるので
cdr部にリストを入れることでリストを構成する、とも言える・・・@
(C . D)においてcdr部に入っているのはコンスセルではなく、D。これはシンボルである
これに対して(D . nil)はcdr部がnilなのだけれど、
このnilが空リストである()と同義なので、@の定義に基づき(D . nil)はリストである
補足すると
(A . (B . (C . D)))のcdr部は(B . (C . D))
(B . (C . D))のcdr部は(C . D)、ではなく((C . D))が入り
((C . D))のcdr部はnil、car部が(C . D)となる
とか適当なことを言ってみる
0145デフォルトの名無しさん
2013/06/08(土) 22:00:19.420146デフォルトの名無しさん
2013/06/08(土) 22:04:11.74ということだ
0147144
2013/06/08(土) 22:05:18.70恥ずかしくて死にそう・・・orz
0148デフォルトの名無しさん
2013/06/08(土) 22:09:38.510149144
2013/06/08(土) 22:10:00.860150デフォルトの名無しさん
2013/06/08(土) 22:13:52.89(A B C) は (A . (B . (C . nil))) であり (A . (B . C)) ではない
(A B C D) は (A . (B . (C . (D . nil)))) であり (A . (B . (C . D))) ではない
0151デフォルトの名無しさん
2013/06/08(土) 22:15:29.660152デフォルトの名無しさん
2013/06/08(土) 22:20:23.300153デフォルトの名無しさん
2013/06/08(土) 22:33:31.41(A . (B . (C . nil))) は A と B と C と nil の4つで構成されるリストと解釈される
0154デフォルトの名無しさん
2013/06/08(土) 22:37:08.950155デフォルトの名無しさん
2013/06/08(土) 22:38:31.42で、
(A (B C)) => (A . ((B . (C . nil)) . nil))
であってる?
0156デフォルトの名無しさん
2013/06/08(土) 22:41:43.13違う
× (A B (C D))
○ (A (B (C D)))
(A B (C D)) は (A . (B . ((C . D) . nil)))
0157デフォルトの名無しさん
2013/06/08(土) 22:43:29.820159デフォルトの名無しさん
2013/06/08(土) 22:49:35.870160デフォルトの名無しさん
2013/06/08(土) 22:59:16.31https://en.wikipedia.org/wiki/Lisp_(programming_language)#S-expressions_represent_lists
S-expressions represent lists
Parenthesized S-expressions represent linked list structures.
There are several ways to represent the same list as an S-expression.
A cons can be written in dotted-pair notation as (a . b), where a is the car and b the cdr.
A longer proper list might be written (a . (b . (c . (d . nil)))) in dotted-pair notation.
This is conventionally abbreviated as (a b c d) in list notation.
An improper list may be written in a combination of the two ? as (a b c . d) for the list of three conses whose last cdr is d (i.e., the list (a . (b . (c . d))) in fully specified form).
0161デフォルトの名無しさん
2013/06/08(土) 23:37:09.68(a b)は(a . (b . nil)) だよ。
(a . b)はあくまで(a . b)だ。
そもそも(a)が(a . nil)なのに、要素数が2のときだけ例外になんかせんよ。
0162デフォルトの名無しさん
2013/06/09(日) 00:58:48.170163デフォルトの名無しさん
2013/06/09(日) 01:09:24.59Recursive Functions of Symbolic Expressions
http://www-formal.stanford.edu/jmc/recursive/node3.html
0164デフォルトの名無しさん
2013/06/09(日) 01:26:29.460165デフォルトの名無しさん
2013/06/09(日) 06:42:57.750166デフォルトの名無しさん
2013/06/09(日) 12:02:22.61(A . (B . (C . (D . nil))))
それぞれについて一要素づつ表示する関数でも書いてみたら?
どっちが便利か?
どっちを採用したくなるか?
0167デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.AN簡単な例など何方か教えていただけますか?
0168デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.ANCFFI - Common LISP users jp
cl.cddddr.org/index.cgi?CFFI
0169デフォルトの名無しさん
2013/07/03(水) NY:AN:NY.ANありがとございます。
0170デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0171デフォルトの名無しさん
2013/07/09(火) NY:AN:NY.AN0172デフォルトの名無しさん
2013/07/12(金) NY:AN:NY.AN0173デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN読んでるとだんだんイライラしてくる。
0174デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN0175デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN0176デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.ANplamdaとか
>Let Over Lambda
0177デフォルトの名無しさん
2013/07/17(水) NY:AN:NY.AN0178デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.ANもうアナフォリックマクロに使えそうな名前が残ってない
0179デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.ANそれとも、変数lazyが他の値に再束縛され、sがガーベジコレクトされるまで開いたままなのでしょうか?
0180デフォルトの名無しさん
2013/07/18(木) NY:AN:NY.AN(unwind-protect
(progn
(format s "When the stream s is closed?")
(lambda () (get-output-stream-string s)))
(close s)))
=> #<CLOSURE (LAMBDA () :IN #:DROP-THRU-TAG-1) {100B8FA80B}>
CL-USER> (defparameter lazy *)
... ;いろいろやる
CL-USER> (funcall lazy)
=> "When the stream s is closed?"
CL-USER> (funcall lazy)
=> ""
0181デフォルトの名無しさん
2013/07/19(金) NY:AN:NY.AN(close s) の直前に (format t "closed") とか入れればわかると思う。
close 済み string output stream に
get-output-stream-string したときの動作は undefined 。
処理系によっては string output stream を close しても何もおこらない。
0182デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.ANもやもやがすっきりしました(:-D)
0183デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.AN0184デフォルトの名無しさん
2013/07/20(土) NY:AN:NY.AN0185デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN0186デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN0187はちみつ餃子 ◆8X2XSCHEME
2013/07/31(水) NY:AN:NY.AN処理系によって賢い機能がある場合もあると思うので、もうちょっと詳細を書くとよいかも。
マクロがあると「行番号」で表すのが難しかったりするんだよね。
マクロ定義の方が間違ってるかもしれないし、
そのマクロ定義もマクロで生成されてるかもしんない。
エラーが発生したときにどこを示していいんだか処理系には判断付けるのが難しい。
0188デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN行番号はマクロ展開後でいいと思うんだけど何が駄目なのかな
C言語もそうだし自作処理系でもそうやったけど特に不都合はなかったな
0189デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN0190デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.ANslime 使えば?
エラーが起こった箇所のソースに色けて
^N とか ^P でその場所にカーソルが飛んで
該当エラーの内容も表示してくれるぞ
0191デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.ANslime 使えば?
エラーが起こった箇所のソースに色けて
^N とか ^P でその場所にカーソルが飛んで
該当エラーの内容も表示してくれるぞ
0192デフォルトの名無しさん
2013/08/01(木) NY:AN:NY.AN自分はslime-eval-defunで評価してそれをreplから実行してたんだけど
それよりコンパイルしたほうがいいのかな
0193デフォルトの名無しさん
2013/08/02(金) NY:AN:NY.AN編集中やデバッグ中に定義してる位置にジャンプしたりできる。
てーか、マクロ展開後の行番号とか教えられたりしても途方に暮れるだけだと思うな。
Seriesとか試せば分かるけど、とんでもない行数に展開されることとかあるし。
行番号なくてもスタックトレースあるからそれでコンディション発生した関数は分かる。
あとは適当な位置にbreakつっこんで止めたり、printで出力したりすりゃ結構すぐ分かるよ。
0194デフォルトの名無しさん
2013/08/02(金) NY:AN:NY.AN処理系によっては、じゃなくて、Common Lispは規格でデバッガの存在が要求されてる。
ブレークポイントとかステップ実行とかディスアセンブラとかも同様。
0195はちみつ餃子 ◆8X2XSCHEME
2013/08/02(金) NY:AN:NY.AN存在が要求されてるのは知ってたけど、
挙動がどの程度細かく規定されてるのかは知らなんだ。
ステップ実行まであるのか。 CL さんマジかっけー。
0196デフォルトの名無しさん
2013/08/03(土) NY:AN:NY.ANslimeいれておおすごいと思った所で熱が覚めて辞めてしまい1年ほど経過
マクロとか使いこなせると楽しいんだろうけれど、何かそのために面白い題材とか無いものか
0197デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.AN0198デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.AN0199デフォルトの名無しさん
2013/08/04(日) NY:AN:NY.AN0200デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.ANコンパイルして関数を実行したら日本語が文字化けする
普通にslimeに直に入力したら日本語でも出力されるのに
こんな状況
i.imgur.com/A0pGoRn.png
0201デフォルトの名無しさん
2013/08/05(月) NY:AN:NY.AN0202デフォルトの名無しさん
2013/08/06(火) NY:AN:NY.ANなんでだろう
0203デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANここら辺は読んだ?
0204デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN直接alispを起動して日本語のシンボルや文字列を扱うのは問題ないんだ
0205デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANこんな感じ
0206デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN設定はこんな感じなの?
0207デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANうん 一番下のset-buffer-process-coding-systemが怪しくて消したりしたけど
起動した時のメッセージが微妙に変わったくらいだった
0208デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN;;; Lisp session.
起動した時にこんなメッセージ出るんだけど英語苦手でよくわからん
なんかexpress版だとヒープ領域の制限で日本語化は無理とかかな
0209デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.AN分からない関数carがあったら
(doc car)としてポンポン調べていたのですが
common lispにはこういう関数ありませんか?
0210デフォルトの名無しさん
2013/08/07(水) NY:AN:NY.ANSLIME使ってたらキー操作でHyperSpec引ける
0211デフォルトの名無しさん
2013/08/08(木) NY:AN:NY.AN2画面で片方ブラウザにしてるんだけど、新規タブでばんばん開いちゃうのやめる方法ないかしら
0212デフォルトの名無しさん
2013/08/08(木) NY:AN:NY.AN0213デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN(defun arg-test (x y z) (eval '(list x y z)))
(arg-test 4 5 6)
;=>(1 2 3)
どうしてレキシカル変数はevalの中から見えないのですか?
0214デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN0215デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.ANHyperSpec のevalのとこに書いてるよ
何故そうなってるか、という質問だとおれは答え難いなぁ。そんなものだ、と思って使ってた。詳しい人解説ヨロシク
0216はちみつ餃子 ◆8X2XSCHEME
2013/08/11(日) NY:AN:NY.AN0217213
2013/08/12(月) NY:AN:NY.ANありがとうございます。
前スレ見ました。最適化をしやすくするためにローカル環境を使わないようですね。
ちょうど去年の今頃の自分のレスでした。
(ICFPの時だ(そして今も))
0218デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN0219デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.AN0220デフォルトの名無しさん
2013/08/12(月) NY:AN:NY.ANそんなことあるもんなんだな
0221デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN0222デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN;=> (2 1 3)
ここで1を返すにはどう書くのがよいでしょうか?
0223222
2013/08/16(金) NY:AN:NY.AN(labels
((self (tree)
(if (atom tree) (if (functionp base) (funcall base tree) base)
(funcall rec tree
#'(lambda () (self (car tree)))
#'(lambda () (if (cdr tree) (self (cdr tree))))))))
#'self))
0224222
2013/08/16(金) NY:AN:NY.AN(funcall (trec
#'(lambda (obj left right) (or (funcall left) (funcall right)))
#'(lambda (leaf) (and (funcall fn leaf) leaf)))
lst)
(find-if-rec #'oddp '((2 4 6 8) (2 1 3)))
;=> 1
出来ました
0225デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN0226222
2013/08/16(金) NY:AN:NY.AN0227デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN(defun find-if-rec (fn tree)
(cond
((null tree) nil)
((atom tree) (when (funcall fn tree) tree))
(t (or (find-if-rec fn (car tree))
(find-if-rec fn (cdr tree))))))
いきなり抽象度がひとつ上のtrecが出てきたので
0228デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN新たにnewしないで、もとのarrayを直接参照するsubseqを探しているんですが、そういったものはないんでしょうか?
0229デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN(0 . (1 . (2 . (3 . (4 . nil)))))となっている。
(setq lst (list 0 1 2 3 4))
(subseq lst 1 4)
とすると
(1 2 3)が帰ってくるが、このデータ構造は
(1 . (2 . (3 . nil)))である。
この構造は元の構造に含まれていないため、切り出すということができない。
0230デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN0231デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.AN0232デフォルトの名無しさん
2013/08/20(火) NY:AN:NY.ANレスありがとうございます。そうなんです、arrayの話なんです。
>>231
(^^;
とりあえず、自己解決しました。
displaced-arrayでいけそうです。make-arrayのオプションとは、盲点でした。
0233デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.ANコーディングは適当なエディタに書いてclispにペースト実行ってやってるんですが、もっといいやり方ないですか?
Emacsにslime?がいいのですかね?
0234デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.AN0235デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANslime の環境は quicklisp というライブラリ管理ツールを使って簡単にできるよ
0236デフォルトの名無しさん
2013/08/22(木) NY:AN:NY.ANおお、やっぱりこの組み合わせが1番なんですね。
本読んでると特にそのあたりの記載がなくて、最初はTerminalからclisp立ち上げて直に長文コード打ってました。(コピペで、ですが)
emacsでコード書いて保存してslimeで実行って感じがデファクトなんでしょうか?
>>235
quicklisp初めて知りました。これは管理が楽になりそうでいいですね。
私の環境はMacなのでbrewでclisp入れてますが、slime使うなら管理も含めてquicklispがいいですね。移行します。
ご教示ありがとうございました。
0237デフォルトの名無しさん
2013/08/23(金) NY:AN:NY.AN(+ x y))←ここでctrl+xを押し、ctrl+eを押すと関数が定義される
(add 8 5)←ここでctrl+xを押し、ctrl+eを押すと13が表示される
書きながらどんどん実行していく。
0239デフォルトの名無しさん
2013/08/23(金) NY:AN:NY.AN次がコンパイルできないんですが同じ症状の人いますか?
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload :cxml-stp))
0240デフォルトの名無しさん
2013/09/02(月) 23:22:36.07Clojureの->みたいのを実装したいのですがどうやったら綺麗に書けますか?
想定してる動作としては
(-> '(10 20 30) (mapcar #'1+ _) car 1+)
;; => 12
書いてみたのですがあと一段階…
(defmacro -> (&body forms)
``(let* ,(mapcar #'(lambda (f) (if (symbolp f) (list '_ (list f '_)) (list '_ f))) ',forms)
_))
;; => (LET* ((_ '(10 20 30)) (_ (MAPCAR #'1+ _)) (_ (CAR _)) (_ (1+ _))) _)
0241デフォルトの名無しさん
2013/09/03(火) 00:16:45.86(reduce (lambda (acc form)
(if (listp form)
`(,(car form) ,acc ,@(cdr form))
(list form acc)))
(cdr forms)
:initial-value (car forms)))
(defmacro -> (&body forms)
`(progn ,(build-> forms)))
間違ってたらめんご
0242デフォルトの名無しさん
2013/09/03(火) 00:25:33.20(defmacro -> (&body forms)
(build-> forms))
0243デフォルトの名無しさん
2013/09/03(火) 00:40:36.25thx. やっぱ愚直に書くべきなのかな
M.Hiroi's Home Pageに載ってるlet*の実装を参考にして
書き直したら一応解けたかも?
(defmacro -> (&body forms)
(let ((_ (if (symbolp (car forms)) (list (car forms) '_) (car forms))))
(if (null (cdr forms))
`(let ((_ ,_)) _)
`(let ((_ ,_)) (-> ,@(cdr forms))))))
0244デフォルトの名無しさん
2013/09/03(火) 00:56:02.27(defun build-> (forms)
(reduce (lambda (acc form)
(if (listp form)
(substitute acc '_ form)
(list form acc)))
(cdr forms)
:initial-value (car forms)))
0245デフォルトの名無しさん
2013/09/03(火) 20:23:25.95(defmacro -> (x &body forms)
(cond ((null forms)
x)
((null (cdr forms))
(let ((first (car forms)))
(if (consp first)
`(,(car first) ,x ,@(cdr first))
`(,first ,x))))
(t
`(-> (-> ,x ,(car forms)) ,@(cdr forms)))))
0246デフォルトの名無しさん
2013/09/03(火) 20:26:17.89(defmacro ->> (x &body forms)
(cond ((null forms)
x)
((null (cdr forms))
(let ((first (car forms)))
(if (consp first)
`(,(car first) ,@(cdr first) ,x)
`(,first ,x))))
(t
`(->> (->> ,x ,(car forms)) ,@(cdr forms)))))
0247デフォルトの名無しさん
2013/09/03(火) 22:44:20.74大分おそくなったちゃったけど、こんなのはどうだろう。
(some (lambda (lst) (find-if #'oddp lst)) '((2 4 6 8) (2 1 3)))
=> 1
0248デフォルトの名無しさん
2013/09/05(木) 21:25:01.230249デフォルトの名無しさん
2013/09/05(木) 22:44:31.71一方、someはpredが非nilとなる要素が存在したら、`非nil'を返す。
(find-if #'oddp '(2 4 6 1 8)) => 1
(some #'oddp '(2 4 6 1 8)) => T
0250デフォルトの名無しさん
2013/09/07(土) 23:29:00.66(%i1) cf((1+sqrt(5))/2), cflength=3;
と入力したら
(%o1) [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
と表示されてしまいます。
これって最後は1にならなきゃおかしいですよね。
バグですか?
0251デフォルトの名無しさん
2013/09/08(日) 11:06:49.39仕様です。
その式、マニュアルにそのまま出てます。
tp://maxima.sourceforge.net/docs/manual/en/maxima_29.html
0252デフォルトの名無しさん
2013/09/08(日) 15:22:56.420253デフォルトの名無しさん
2013/09/11(水) 04:26:19.84threadなどで検索をかけてもこれといってひっかかるものがありません
0254デフォルトの名無しさん
2013/09/11(水) 08:01:21.21threading macroって -> と ->> のことでいいのかな。
それなら以下のパッケージに含まれているようです。
quickdocs.org/cl-arrows/
quickdocs.org/backports/
0255デフォルトの名無しさん
2013/09/11(水) 23:19:11.68ありがとうございます
clojureと挙動が少し違いましたがcl-arrowsが使えそうです
backportsも試してみたかったのですがquickloadがコケるのであきらめました
0256デフォルトの名無しさん
2013/09/12(木) 22:08:33.230257デフォルトの名無しさん
2013/09/13(金) 01:42:41.160258デフォルトの名無しさん
2013/09/13(金) 05:38:54.24今すぐ消えるべし
0259デフォルトの名無しさん
2013/09/13(金) 07:32:11.22俺は特定のLisperにネタミがあるがおまえは一体何が原因でそんなことを言ってるんだ?
0260デフォルトの名無しさん
2013/09/13(金) 07:59:09.350261デフォルトの名無しさん
2013/09/13(金) 19:03:33.23CLの規格には無いけれど、
ユーティリティライブラリの ARNESI に SHARPL-READER というリーダーマクロがあります。
common-lisp.net/project/bese/docs/arnesi/html/api/function_005FIT.BESE.ARNESI_003A_003ASHARPL-READER.html
こんな風に使うみたい。
(arnesi:enable-sharp-l-syntax)
(mapcar #L(* !1 !2) '(1 2 3) '(4 5 6)) ;=> (4 10 18)
0262デフォルトの名無しさん
2013/09/13(金) 20:58:10.94ああいう人は心の病気なんだから専門家に丸投げして関わらない方がいいとおもうなー
0263デフォルトの名無しさん
2013/09/14(土) 14:56:52.03さんくす!
しかしこういうのが外部にしかないということはCL書く人は毎回lambdaを書くということなんでしょうか
0264デフォルトの名無しさん
2013/09/14(土) 17:51:46.450265デフォルトの名無しさん
2013/09/14(土) 22:34:58.88CLISPとemacsのインストール後emacsのsite-lisp(?)フォルダにslimeをリネームしてコピーまではしたもののその後がわかりません。
ユーザーフォルダの奥の方にあるinit.elがWindowsではemacsの設定として扱われる、ということまでは調べました。
0266デフォルトの名無しさん
2013/09/14(土) 23:05:11.94lisp box使ってみたら?
http://common-lisp.net/project/lispbox/
win8で動くかわからないけどね
0267デフォルトの名無しさん
2013/09/15(日) 02:44:41.82ついでに float の simple-vector に
double-float の値、例えば 0.0d0 を代入できてしまうのは何で?
0268デフォルトの名無しさん
2013/09/15(日) 03:05:52.70で作れるけど
double-floatはfloatのsubtypeだから
(subtypep 'double-float 'float)
(subtypep 'single-float 'float)
(subtypep 'double-float 'single-float)
(typep 1.0 'float)
(typep 1d0 'float)
(typep 1.0 'double-float)
(typep 1d0 'single-float)
0269デフォルトの名無しさん
2013/09/15(日) 10:44:55.930271デフォルトの名無しさん
2013/09/15(日) 12:38:54.81=> (SIMPLE-ARRAY DOUBLE-FLOAT (3))
* (type-of (make-array 3 :element-type t))
=> (SIMPLE-VECTOR 3)
* (type-of (make-array 3 :element-type t :initial-element 0.0d0))
=> (SIMPLE-VECTOR 3)
* (type-of (apply #'vector '(1 1.0d0 "42" #p"tmp.lisp")))
=> (SIMPLE-VECTOR 4)
0272デフォルトの名無しさん
2013/09/15(日) 12:47:28.34しかし、clispでは
[1]> (type-of (make-array 3 :element-type 'double-float))
(SIMPLE-VECTOR 3)
となります。
一体全体どうゆうこったい??
0273デフォルトの名無しさん
2013/09/15(日) 13:07:50.90clisp はあんまり最適化してくれない処理系。
0274267
2013/09/15(日) 13:25:28.67(describe (make-array 3 :element-type 'double-float))
=>
#(0.0d0 0.0d0 0.0d0)
[simple specialized vector]
で simple vector でないみたいで
(svref (make-array 3 :element-type 'double-float) 1)
でエラーになってしまう。大量の代入をすると float なら cと遜色ないんだけども。
double-float だと2-3倍時間がかかるので気になっている
つまるところ >>273 が答えってことかな
0275デフォルトの名無しさん
2013/09/15(日) 13:30:14.10要素型が t (任意のオブジェクト) 以外の simple-vector は存在しません。
> The type of a vector that is not displaced to another array, has no fill
> pointer, is not expressly adjustable and is able to hold elements of any
> type is a subtype of type simple-vector.
http://clhs.lisp.se/Body/t_smp_ve.htm
要素型が特定されていると simple-vector の定義を満たしません (SBCL, CCLの場合)。
CLISPでは :element-type 'double-float という型情報は無視されて、要素型が t の
ベクタが作られています(理由は>>273の通り)。なので type-of は (SIMPLE-VECTOR 3)
を返しますが、「要素型が double-float の simple-vector」が作られているわけで
はありません。
CLISP> (array-element-type (make-array 3 :element-type 'double-float))
;=> T
SBCL> (array-element-type (make-array 3 :element-type 'double-float))
;=> DOUBLE-FLOAT
0276デフォルトの名無しさん
2013/09/15(日) 15:27:22.95simple-vectorと型要素の関係がすっきりしました。
clispがあまり最適化してくれない、というのも勉強になりました。
0277デフォルトの名無しさん
2013/09/15(日) 16:04:58.890278デフォルトの名無しさん
2013/09/15(日) 16:25:38.780279デフォルトの名無しさん
2013/09/15(日) 19:59:38.09> でエラーになってしまう。大量の代入をすると float なら cと遜色ないんだけども。
> double-float だと2-3倍時間がかかるので気になっている
ここん所, 今一, 意味不明だけど解決したのかな?
# (declare (optimize (spped 3) (safty 0) (debug 0))) とかやれば
# 真面目なコンパイラなら (aref foo bar) は inline 展開なんじゃね?
0280デフォルトの名無しさん
2013/09/16(月) 19:11:10.11動きました、ありがとうございます。
これでいちいちTerminalに一文字も間違えないように打つことから解放されました。
Land of Lisp もサクサク進められそうです。
ところでこのlispboxはClozureという処理系を利用していると書いてありましたが、CLISPと何か違いはあるのでしょうか?
Land of LispではCLISPを前提としているので。
0281デフォルトの名無しさん
2013/09/17(火) 01:09:39.63clojureみたいに
(require 'alexandria :as 'alex)
alex:alist-plist
のように機能を探してます。
>>280
land of lispの範囲だと少なくともサーバのソケット周りが違うんじゃないかな、clisp使うか、ningleとかusocket使ってサーバ書き直すとかしなきゃいけないじゃない
本持ってないけど、サンプルコード感じだと他はclosure clでも動くんじゃない?
0282デフォルトの名無しさん
2013/09/17(火) 06:55:03.39そういう機能は無いけど、rename-package と package-nicknames を使えば
定義済のパッケージにあとから別名を追加できます。
(package-names の戻り値のリストに新しい名前を cons したものを rename-package の第三引数にする)。
逆引きCommon Lispに書いてみたので宜しければどうぞ。
http://tips.lisp-users.org/common-lisp/index.cgi?%E3%83%8B%E3%83%83%E3%82%AF%E3%83%8D%E3%83%BC%E3%83%A0%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B
0283デフォルトの名無しさん
2013/09/17(火) 09:01:55.23ありがとうございます。
例示していただいたコードをSBCLで使うと、
sb-ext:symbol-package-locked-errorで怒られるのでちょっと変更しました。
(defun add-nickname% (nickname package)
(rename-package package
package
(cons nickname (package-nicknames package))))
(defun add-nickname (nickname package)
(sb-ext:unlock-package package)
(unwind-protect (add-nickname% nickname package)
(sb-ext:lock-package package)))
----------------------------
* (package-nicknames :alexandria)
-> ()
* (package-nicknames (add-nickname :al :alexandria))
-> ("AL")
0284デフォルトの名無しさん
2013/09/17(火) 17:59:12.85ありゃ。確認不足でしたすみません。
次のような記事もありましたが、壊れていて動きませんでした。
こちらはリーダーマクロで実現しようとされているようです。
common-lisp - Common LispでClojure-likeなnicknameを使いたい話 - Qiita [キータ]
http://qiita.com/zptmtr/items/22f713753a026279c6f3
https://gist.github.com/zeptometer/4373557
処理系依存ですが、SBCLには add-package-local-nickname という関数がありますね。
http://www.sbcl.org/manual/#Package_002dLocal-Nicknames
0285デフォルトの名無しさん
2013/09/17(火) 19:02:41.80早く死滅せよ
0286デフォルトの名無しさん
2013/09/18(水) 00:56:24.36(cl-annot:enable-annot-syntax)
(cl-annot:defannotation nickname (nick quickload-form)
(:arity 2 :inline t)
`(add-nickname ,nick (car ,quickload-form)))
@nickname :al
(ql:quickload :alexandria)
0287デフォルトの名無しさん
2013/09/19(木) 15:57:45.950288デフォルトの名無しさん
2013/09/19(木) 16:32:48.740289デフォルトの名無しさん
2013/09/19(木) 17:26:51.97そういう場合 *standard-output* を文字列出力ストリームに一時的に差し替えてやれば、
標準出力への書き込みを文字列として取得できます。
(let ((*standard-output* (make-string-output-stream)))
(room)
(get-output-stream-string *standard-output*))
with-output-to-string マクロを使って簡潔に:
(with-output-to-string (*standard-output*) (room))
0290デフォルトの名無しさん
2013/09/19(木) 19:38:15.34おかげさまで取得できました。
ありがとうございました。
0291デフォルトの名無しさん
2013/09/19(木) 19:39:46.57番号まちがえました。
おかげさまで取得できました。
ありがとうございました。
0292デフォルトの名無しさん
2013/09/20(金) 20:43:58.30Land of LispからLispを始める人は絶対Linuxでやるべきかと
0293デフォルトの名無しさん
2013/09/20(金) 21:49:57.070294デフォルトの名無しさん
2013/09/21(土) 00:29:53.35とはいえ現実にはアプリを走らせる環境と同じOSで開発するのが一番リスク少ないんだが。
0295デフォルトの名無しさん
2013/09/21(土) 14:39:52.68何をいっているかわからねえと思うが
0296はちみつ餃子 ◆8X2XSCHEME
2013/09/21(土) 15:20:00.330297デフォルトの名無しさん
2013/09/21(土) 17:28:12.20Win なら、VMWare Player 入れて Linux の OS から入れなおしても
充分お釣りがくるよ
0298デフォルトの名無しさん
2013/09/21(土) 17:28:38.62ちなみに処理系はSBCL on Linux
0299デフォルトの名無しさん
2013/09/22(日) 10:52:36.330300デフォルトの名無しさん
2013/09/27(金) 01:54:59.830301デフォルトの名無しさん
2013/09/27(金) 03:39:33.100302デフォルトの名無しさん
2013/10/02(水) 17:59:30.810303デフォルトの名無しさん
2013/10/02(水) 19:22:06.05cltl2 出版後の改定が反映されてないだけだと認識してるが...
0304デフォルトの名無しさん
2013/10/02(水) 21:03:41.630305デフォルトの名無しさん
2013/10/02(水) 21:17:00.150306デフォルトの名無しさん
2013/10/03(木) 07:40:05.40WikiのX3J13(http://en.wikipedia.org/wiki/X3J13)の中に、まんま
Relation to "Common Lisp the Language"
という項目の説明があります。
0307デフォルトの名無しさん
2013/10/03(木) 07:53:32.130308デフォルトの名無しさん
2013/10/03(木) 19:40:18.49ありがとうございます読んでみます
0309304
2013/10/03(木) 22:50:20.330310デフォルトの名無しさん
2013/10/05(土) 13:20:12.600311デフォルトの名無しさん
2013/10/09(水) 18:34:02.84「Land of LIsp」で最近Common Lispをはじめました。
この本の中で除算について以下のような記述がありました。
↓↓↓↓↓↓↓↓↓↓↓↓
4を6で割ると、答えは少数0.66666…じゃないかと思うかもしれない。
除算関数はかわりに、有理数を返すんだ。
(省略)
引数に浮動小数点が含まれていると、結果は異なったものになる。
>(/ 4.0 6)
0.6666667
先に述べたように、小数点を含んだ数(4.0)は計算を汚染し、結果も少数になるんだ。
↑↑↑↑↑↑↑↑↑↑↑↑
引数に浮動小数点が含まれている際の除算の挙動は理解できたのですが、
最終行の「小数点を含んだ数(4.0)は計算を汚染し」の
「汚染」の意味がよくわかりません。
プログラミングにおいて「汚染」とはどのような意味で使われているのでしょうか?
0312デフォルトの名無しさん
2013/10/09(水) 18:40:03.24Land of Lispは読んでなくて手元にCommon Lispはないけど...
(/ 4 6) = 2/3
は正確な値だけど
(/ 4.0 6) = 0.66666....
は何らかの丸めの入る近似値
有理数で計算しているうちは正確な値で結果が得られるけど
少数が混じると近似値になってしまうということではなかろうかと存じます。
0313312
2013/10/09(水) 18:49:23.69ここでいう「汚染」というのは、上記のこれ以降近似値という
質の低いデータになってしまうということだけど、
確立されたプログラミングの専門用語ではないと思う。
Webプログラムとかでデータにユーザが入れた値が入る等
安心して使えず、そのデータから派生したデータを使う場合
セキュリティに気をつけなくてはいけないデータになることを
汚染という使い方をしたのを見たことがある。
0314デフォルトの名無しさん
2013/10/09(水) 18:55:09.68浮動小数点数のいろんな問題を含めて汚染といっているのだろうけど、
代表的なもののひとつに桁落ちというのがあって、
(x+1/N)という実数をN回足し合わせれば必ず(N*x+1)になると期待してしまうけど、
浮動小数点数の場合、xとNがそれぞれ大きい場合にはN*xになってしまう場合があったりする。
Cなんかで数値計算をやる場合には、浮動小数点演算の特性を頭に叩き込むのがまず基本だけど、
Lispの場合は有理数が使えるんだから、速度を気にしない場面では有理数を使うべきってことではなかろうか。
0315デフォルトの名無しさん
2013/10/09(水) 19:05:48.69全部が有理数なら計算結果も有理数で得られるが、たったの1個でも浮動小数点が混ざっていると、計算結果は浮動小数点になってしまう
安全な食材の中に、たった1つでも有毒なものが混ざっていると、結果できた料理は有毒なものになってしまう様に喩えて、汚染とかいう
0316311
2013/10/09(水) 20:34:03.34ありがとうございます。
>少数が混じると近似値に〜
正確な値を清浄ととらえた上で、近似値を"汚染"と表現しているのですね。
「汚染」というのは、確立されたプログラミングの専門用語ではなく、
文脈によってニュアンスが変わると把握できました。
>>314
ありがとうございます。
>桁落ち
なるほど。桁落ちにより誤差が発生することがあるので"汚染"と表現しているのですね。
ためになります。
>>315
ありがとうございます。
>安全な食材の中に、たった1つでも有毒なものが混ざっていると〜
この比喩で、納得できました。
このように考えると、313さんが教えてくれた
「Webプログラムとかで〜」という用法とも、大きなズレは感じませんね。
"汚染"というのは、正しい状態を前提として不正な状態になることをいうのかなと
みなさんにいただいた内容をもとに自分なりに結論してみました。
また、何かあったら質問させてください。ありがとうございました。
0317デフォルトの名無しさん
2013/10/10(木) 00:40:52.840318デフォルトの名無しさん
2013/10/10(木) 00:43:25.300319デフォルトの名無しさん
2013/10/10(木) 00:48:22.98純粋だったものが汚されるってニュアンスかな。
0320デフォルトの名無しさん
2013/10/10(木) 00:48:56.48少しでも混ざると全体がそうなってしまう。一度混ざると取り除けない。
0321デフォルトの名無しさん
2013/10/10(木) 01:11:08.17haskell界隈で使われる純粋と不純ってのも、日本語ではどうにも違和感がある。
不純ってのは、日本語の文脈では悪い意味でしか使われないから。
0322デフォルトの名無しさん
2013/10/10(木) 01:46:24.89>"汚染"というのは、正しい状態を前提として不正な状態になることをいうのかなと
この理解が変でしょ。
「正しい」状態とかじゃなくて、ある種のデータはこういう内部表現をされて
います、ってそれだけのことだから。
0323デフォルトの名無しさん
2013/10/10(木) 01:55:36.45ファイルをロードするとエラーメッセージ(片方の関数が存在しないと言われる)
が出てしまうのはどうやったら消えてくれるのでしょうか
動くので問題ないのですがエラーが気になるのです
0324デフォルトの名無しさん
2013/10/10(木) 03:48:38.330325デフォルトの名無しさん
2013/10/10(木) 09:20:18.54英語だって否定辞付きだろ。どうやって肯定的な意味に使うんだ。
0326デフォルトの名無しさん
2013/10/10(木) 10:26:12.15非正格数を演算した結果は非正格数になる。
0327デフォルトの名無しさん
2013/10/10(木) 11:47:50.500328デフォルトの名無しさん
2013/10/10(木) 11:55:49.08あの人ら、不純を悪い意味じゃなくて非純粋の意味でバンバン使うじゃん
(setq *x* (1+ *x*))
(nreverse ...)
これ全部不純な計算ね
でも、日本語で不純っていわれると、何かよこしまな悪い考えを咎められているようにも聞こえるw
0329デフォルトの名無しさん
2013/10/10(木) 13:10:02.090330デフォルトの名無しさん
2013/10/10(木) 20:52:47.95あの人らは「んなもん使うなぼけ !!」って意思を込めて
「不純」って使ってるのかと思った。
0331デフォルトの名無しさん
2013/10/10(木) 20:59:45.69前後の文と雰囲気から分かるだろ
0332デフォルトの名無しさん
2013/10/10(木) 21:10:19.06*VARIABLE* は,
「宣言した時点で新しい評価環境が発生してる」
と, 考えると別に気にならないけど
(let* (tmp)
(setf tmp (op1 ...))
(othe-opx tmp)
(setf tmp (op2 ...))
的な, 連鎖で状態を変え続けられる方が気持ち悪い
0333デフォルトの名無しさん
2013/10/11(金) 02:31:57.26意味的に何を言いたいかは充分すぎるほど分かるけど、感覚的には全くわからんね
ああ、これまたどうしようもなく下手くそな英訳の濫用だなあとしか思わん
0334デフォルトの名無しさん
2013/10/11(金) 03:45:20.83煽りじゃないけど、もっと適切な言葉があるなら知りたいから教えて
0335デフォルトの名無しさん
2013/10/11(金) 11:47:03.730336デフォルトの名無しさん
2013/10/11(金) 18:33:52.990337はちみつ餃子 ◆8X2XSCHEME
2013/10/11(金) 18:35:40.620338デフォルトの名無しさん
2013/10/11(金) 18:38:29.23何にでも突っ込みたい人なのかな
0339デフォルトの名無しさん
2013/10/11(金) 18:44:59.85ばかなんだね
ふう
0340デフォルトの名無しさん
2013/10/11(金) 21:09:23.52副作用はもうなれたけど、コンピュータ系のcontextで聞き出した頃は、
薬とかの副作用っていう、「悪いもの」、「必要外のもの」的な
意味合いを感じて違和感があった。
というか、むしろ、これで気づいた。副作用なんて、他にあんまり用いないし。
ただ、慣れと言われればそれまでだよね。
0341デフォルトの名無しさん
2013/10/11(金) 21:19:11.890342デフォルトの名無しさん
2013/10/11(金) 23:37:31.500343デフォルトの名無しさん
2013/10/12(土) 04:36:52.830344デフォルトの名無しさん
2013/10/12(土) 04:38:31.930345デフォルトの名無しさん
2013/10/12(土) 04:45:30.98なにいってんだか
概念に日本語も英語もない
逆に英語でも日本語でも
文脈上の意味、ないし定義から離れて語素から意味を類推するというアホーなことをすることが問題。
どうも言葉自体になにかしら本来の意味があるなんて思っているやからが何人か書き込んでるな
LISP使いとしては、とっても恥曝しだぞ
0346デフォルトの名無しさん
2013/10/12(土) 09:28:06.14「副作用」って表現は関数型の言語以外では今でも見かけない気がするが
0347デフォルトの名無しさん
2013/10/12(土) 09:33:12.960348デフォルトの名無しさん
2013/10/12(土) 09:56:36.40そこらへんのプログラマは使ってなくても、標準規格における重要な用語で、
「副作用完了点」とかあるから。
0349デフォルトの名無しさん
2013/10/12(土) 14:26:15.07英語では違和感ないのに、日本語に訳した言葉に違和感があると言ってるやつに対して言ってるだけだが?
LISPの前にまず英語と日本語勉強しろよ(笑)
0350デフォルトの名無しさん
2013/10/12(土) 14:32:06.21わかってないのにレスするな低脳君
馬鹿はおれ、嫌いなの
0351デフォルトの名無しさん
2013/10/12(土) 14:37:56.31指摘が全くもって的外れなの気付かないのかな?おバカさんなのかな?
0352デフォルトの名無しさん
2013/10/12(土) 14:50:31.62だから君にはわからんって
偏差値60以下だったろ?
レスするなよ、馬鹿は嫌いなの
0353デフォルトの名無しさん
2013/10/12(土) 14:58:47.73そんな低い偏差値の大学に通われていたのですか?
文脈の違いにすら気付かずに恥ずかしいレスをしてしまう程度なので仕方が無いですね
感情論でしか語れなくまともに議論すらできないお馬鹿さんはどちらでしょうか?
偏差値コンプレックスのお馬鹿さんは黙ってろよ
0354デフォルトの名無しさん
2013/10/12(土) 15:00:55.240355デフォルトの名無しさん
2013/10/12(土) 16:06:29.330356デフォルトの名無しさん
2013/10/12(土) 16:12:11.740357デフォルトの名無しさん
2013/10/12(土) 18:20:38.390358デフォルトの名無しさん
2013/10/12(土) 21:17:16.89導入の仕方は検索してみてください。
2.しっかりLispと愛し合うなら、次のリンク先の動画が参考になるはずです。
[Installing Common Lisp, Emacs, Slime & Quicklisp] www.youtube.com/watch?v=VnWVu8VVDbI
0359デフォルトの名無しさん
2013/10/12(土) 22:02:07.90lispbox-0.7をインストールしてみました
Lisp環境を効率よく使うのにはEmacsが必須のようでうね・・・
0360デフォルトの名無しさん
2013/10/12(土) 22:20:05.450361デフォルトの名無しさん
2013/10/12(土) 23:04:59.68昔の職場で普通にレビューとかで副作用って言葉使ってたな
関数型言語なんかの厳密な意味の副作用じゃなくて、
モジュールが何か目的以外の悪さしてるんじゃないかとかそんな意味で
0362はちみつ餃子 ◆8X2XSCHEME
2013/10/13(日) 00:02:39.88何か値が返ってきてもそれはついで (副作用) のことっていうニュアンスになるよね。
だけど、技術用語というものはそういったニュアンスを排除して定義によって意味を確定するものだから、
領域によって定義が異なるとかいうのもそういうものとして受入れるしか仕方ない。
最初に用語を決めるときに慎重に定めるべきではあるけど、後になってわかることだってあるし。
0363デフォルトの名無しさん
2013/10/13(日) 00:12:23.57emacsは慣れるまで時間がかかるので、手っ取り早くlispいじりしたいなら、
カッコの対応表示してくれる適当なエディターで、
しこしこlisp書いてみたほうが楽しいかもしれません。
ちなみに、vim派にはslimvがあります。
ああ、そういえば、xyzzyってwindowsだったはずです。
0364デフォルトの名無しさん
2013/10/13(日) 00:45:34.080365デフォルトの名無しさん
2013/10/13(日) 00:49:53.990366デフォルトの名無しさん
2013/10/13(日) 10:45:04.24「薬の副作用」のイメージで考えてる人多いからね。
まあ、薬の副作用自体間違った言葉なんだが。
0367デフォルトの名無しさん
2013/10/13(日) 11:54:13.150368デフォルトの名無しさん
2013/10/14(月) 01:28:12.61Haskell でいう Hoogle, Python でいう公式の library reference のような、
標準で定義されてる関数やパッケージの総覧みたいなものとしては何を利用するのがいいでしょうか?
0369はちみつ餃子 ◆8X2XSCHEME
2013/10/14(月) 01:48:48.620370デフォルトの名無しさん
2013/10/14(月) 10:55:51.04副作用もついでに期待して使われたりするぞ。花粉症の抗ヒスタミン剤とか。
0371デフォルトの名無しさん
2013/10/14(月) 11:30:14.76痰を切って喉をスッキリさせることを目的として処方されたり場合もあるしな。
0372デフォルトの名無しさん
2013/10/14(月) 11:38:59.09アカウントログイン状態で検索しちまったじゃねぇかwwwwww
この本を検索した人はのこの本にLispとかプログラム関係の本ばっかりの中にシマシマパンツが出てくるようになったらどないすんねんwwww
0373372
2013/10/14(月) 11:40:18.040374デフォルトの名無しさん
2013/10/14(月) 12:06:55.500375デフォルトの名無しさん
2013/10/14(月) 13:10:09.97次の2つが便利です。
上はプリントアウトして、下はslimeでC-c C-d hで。
* [clqr: Common Lisp Quick Reference](エッチテテピー//clqr.boundp.org/)
* [clhs: Common Lisp Hyper Spec](エッチテテピー//quickdocs.org/clhs/)
0376デフォルトの名無しさん
2013/10/14(月) 13:18:09.15面白いアイデアてありますか?
0377デフォルトの名無しさん
2013/10/14(月) 13:35:40.00ネット上に転がってるやってみたを習作してみると、要望が来るかもよ
0378デフォルトの名無しさん
2013/10/14(月) 18:04:11.67>>375
ありがとうございます!
0379デフォルトの名無しさん
2013/10/18(金) 23:05:03.66しかし途中で警告が出てしまいます。
自分でもネットで調べたりしましたが、この警告がなぜ発生するのかわかりません。(英語力の問題かもしれませんが)
この警告はなぜ発生するのでしょうか。
環境: OS:OS X 10.8.5, SBCL:1.1.12
<警告内容>
$ sudo sh make.sh
.... 途中省略
WARNING! Some of the contrib modules did not build successfully or pass
their self-tests. Failed contribs:"
sb-posix
0380デフォルトの名無しさん
2013/10/18(金) 23:33:44.99Mac Ports とか使ったら
0381デフォルトの名無しさん
2013/10/19(土) 00:12:41.60Brewの方が、Mac Portsに比べて、無関係のものを毎回入れないから楽。
0382デフォルトの名無しさん
2013/10/19(土) 17:14:01.48>>381
ありがとうございます。
HomeBrew でインストールしました。
悩んでイライラしていたのが嘘みたいにあっさりインストールできました。
ありがとうございました。
0383デフォルトの名無しさん
2013/10/22(火) 19:47:20.58などありますか?
0384デフォルトの名無しさん
2013/10/22(火) 23:29:24.61clのwmだって
0385デフォルトの名無しさん
2013/10/22(火) 23:43:20.30なんかDB操作のライブラリ作ってるようだ
DBまわりはRailsだなんだと使っていると、migreteとcrudとARぐらいは欲しいなとおもってしまう。
0386デフォルトの名無しさん
2013/10/23(水) 06:20:25.03新しいのが、また出来たのかと思ったら、
> DSWM is a fork of StumpWM
じゃん。
ttp://dss-project.org/?DSS:DSWM:Screenshots
0387372
2013/10/23(水) 14:56:19.56WMをワードマスターと読んでしまって涙目
リンク先みるまでWindow Managerとは思わなかった。
clとかでGenericなエディタとかどうやって作るんだろうって思って昔のLispエミュとか見てるのだけど、そういうのにはむいてないよね。(Cursesとかの世話になるって意味ね)
0388デフォルトの名無しさん
2013/10/23(水) 15:20:16.85>clとかでGenericなエディタとかどうやって作るんだろうって思って昔のLispエミュとか見てるのだけど、そういうのにはむいてないよね。(Cursesとかの世話になるって意味ね)
その論調だとcursesがC言語で実装されてるから、C言語以外はエディタ作るのに向いていないってことになんじゃね?
0389デフォルトの名無しさん
2013/10/23(水) 16:16:54.40ありがとうございます。
他にないですか?
0390デフォルトの名無しさん
2013/10/23(水) 18:06:41.05//clsql.b9.com/
//d.hatena.ne.jp/yuki_neko_nyan/20070901/clsql
//blog.8arrow.org/entry/20120130/1327926575
//www.hackinghat.com/index.php/cl-mysql
0391デフォルトの名無しさん
2013/10/23(水) 19:02:43.14ありがとうございます。
0392デフォルトの名無しさん
2013/10/25(金) 11:23:11.420.1ミリ秒ほどの分解能があるタイマーって存在するんでしょうか?
0393デフォルトの名無しさん
2013/10/25(金) 12:40:12.91それと余計なお世話なんだけど、”Common Lispでリズムマシン”を作ることに意味があるならいいけど、リズムマシンを作ってみたいだけならpuredataとかを検討したほうがいいんでないかい?
0394デフォルトの名無しさん
2013/10/25(金) 15:20:17.28すみません
書いてませんでした
処理系はClozure CLで、OSはLinuxです
Windowsでも利用可能なら、そのほうがいいかなという感じです
最終的にMIDIシーケンサに発展させるつもりでおり、その習作という位置付けです
Common Lispを選んだのはシュミですが…
0395デフォルトの名無しさん
2013/10/25(金) 17:24:45.69できれば根拠というかアンケートサイト何かを示してもらえば嬉しいが
0396デフォルトの名無しさん
2013/10/25(金) 17:26:17.60( ゚∀゚) カモン
( ∩ミ シュッシュッ
| ωつ,゙
し ⌒J
0397デフォルトの名無しさん
2013/10/25(金) 17:29:39.80あなたがcommon lispでアプリケーションを書くことに価値を置いているのかD™等のプログラムを書くことに価値を見出しているのかに依って違うんだけど
余りこだわりをこだわりというか邪見を持たずやりたいようにやったほうがいいと思うけどな
わけわかんなくてスマソ
0398デフォルトの名無しさん
2013/10/25(金) 17:31:49.260399デフォルトの名無しさん
2013/10/25(金) 17:33:08.64とりあえずチンチンしごけ
m m
( ゚∀゚) イクゾ
( ∩ミ シュッシュッ
| ωつ,゙
し ⌒J
0400デフォルトの名無しさん
2013/10/25(金) 17:38:47.77スマヌOSとかによっても違うのに余り意味がないかも知れないな、
俺はSBCLがユーザが多いよな気がしてなんとなくSBCLを選んだのでなんとなく引け目があったんだ
0401デフォルトの名無しさん
2013/10/25(金) 23:46:33.07ttp://cl.cddddr.org/index.cgi?%BD%E8%CD%FD%B7%CF%3A%C1%AA%A4%D3%CA%FD%A4%CE%CC%DC%B0%C2
とか読むと不安が解消するだろうか
ページ内のSBCLってリンク辿ってくとアンケート
ttp://xach.livejournal.com/271794.html
もある
0402デフォルトの名無しさん
2013/10/26(土) 07:20:28.24楽しそう。clojure の overtone みたいなの目指してがんがれ!
0403デフォルトの名無しさん
2013/10/27(日) 11:22:30.85http://repmus.ircam.fr/openmusic/home
http://www.doc.gold.ac.uk/isms/lisp/midi/
http://www.youtube.com/watch?v=xzTH_ZqaFKI
参考になるかも
0404デフォルトの名無しさん
2013/10/31(木) 10:48:15.740405デフォルトの名無しさん
2013/10/31(木) 23:23:27.690406デフォルトの名無しさん
2013/10/31(木) 23:30:38.320407デフォルトの名無しさん
2013/11/01(金) 00:29:05.65PAIP が教科書的に美しいよ。あとはlispのwebサーバ hunchentoot もかなり綺麗なコードだった。
0408デフォルトの名無しさん
2013/11/01(金) 01:24:07.50半分終わったくらいから気になりだした
0409デフォルトの名無しさん
2013/11/01(金) 01:58:10.420410デフォルトの名無しさん
2013/11/01(金) 08:45:31.45Common Lisp では駄目だって事態もそれほどない。
0411デフォルトの名無しさん
2013/11/01(金) 19:01:32.530412デフォルトの名無しさん
2013/11/01(金) 22:16:19.350413デフォルトの名無しさん
2013/11/01(金) 23:46:46.24最も明るく行ったら
面白くないスレ減ると思います。
0414デフォルトの名無しさん
2013/11/02(土) 16:05:00.790415デフォルトの名無しさん
2013/11/02(土) 17:43:03.78コアの上に他の言語が乗ってるようなものだから、
gtkやobjC、Railsその他と変わらんと予想するが。
マクロも書くライブラリ層設計者と、非マクロのみのアプリ層設計者は分離した方が良いのかも?
0416デフォルトの名無しさん
2013/11/02(土) 17:46:35.180417デフォルトの名無しさん
2013/11/02(土) 19:17:34.20なる。
グレアムが言うには Viaweb 開発時には分担が完全に分かれてて、
自分の開発したところはユーザーサポートまで含めて自分でやる方式でまわしてたらしい。
新機能もバグ修正も常に行なわれながら発展する進化的モデルでの開発で、
仕様とコードを一体にして決断を下せる立場だったからこそ上手くいったと考えられてる。
ガチガチの仕様を多人数で厳密に満たしていくような開発スタイルじゃ混乱するだろうね。
0418デフォルトの名無しさん
2013/11/02(土) 20:55:28.96ガチガチの仕様ではLispの柔軟性の価値がないだけで。
0419デフォルトの名無しさん
2013/11/02(土) 22:06:28.29http://practical-scheme.net/trans/hp-j.html
検索ついでに、こっちも同じ理念語ってたことに今更気づく、、、
http://satoshi.blogs.com/life/2007/10/post-4.html
0420デフォルトの名無しさん
2013/11/02(土) 23:20:57.50http://practical-scheme.net/trans/road-j.html
0421デフォルトの名無しさん
2013/11/03(日) 01:54:23.570422デフォルトの名無しさん
2013/11/03(日) 02:30:04.81ライブラリが多いものの方が有利だしなぁ。
結局、ユーザが多い言語の方が有利ってことになる。
0423デフォルトの名無しさん
2013/11/03(日) 08:27:59.630424デフォルトの名無しさん
2013/11/03(日) 09:12:11.080425デフォルトの名無しさん
2013/11/03(日) 09:12:21.13アジャイルには向いているんじゃないの?
0426デフォルトの名無しさん
2013/11/03(日) 16:27:56.710427デフォルトの名無しさん
2013/11/03(日) 23:13:52.91(let ((a b))
(let ((b a))
(setq a b b a)))
に置き換えられるみたいなんだけどなんでこれでaとbの値を交換できるか理解できない
setqでaにbを入れて結局bに入れるaの値はbになりそうなんだけど
0428デフォルトの名無しさん
2013/11/03(日) 23:47:45.740429デフォルトの名無しさん
2013/11/03(日) 23:48:42.07(defmacro my-psetq (&rest args)
(let* ((pairs (group args 2))
(syms (mapcar #'car pairs))
(vars (mapcar #'second pairs)))
(labels ((rec (ps ss)
(if (null ps)
`(setq ,@(shuffle syms vars))
(let ((body (rec (cdr ps) (cdr ss))))
(let ((expr (cadar ps)))
`(let ((,(car ss) ,expr))
,body))))))
(rec pairs syms))))
普通gensym使うはずなのに意味不明なコード書いてた
なんで動くんだろ
0430デフォルトの名無しさん
2013/11/03(日) 23:52:35.40手続型でaとbを変換するときに
t = a
a = b
b = t
のtをgensymに置き換えてるだけなんだな
多分解決したありがとう
0431デフォルトの名無しさん
2013/11/04(月) 01:25:45.99本体部分でのみ有効=束縛部分では外のが見える。
ttp://www.lispworks.com/documentation/HyperSpec/Body/s_let_l.htm
ttp://people.csail.mit.edu/jaffer/r5rs_6.html
言われて気付いたけど、shiroさんのマクロ余計な事してないか?
0432デフォルトの名無しさん
2013/11/04(月) 02:10:46.23ごめん、合ってた。二重評価避けのgensymだ。
0433デフォルトの名無しさん
2013/11/04(月) 02:48:34.58全て自己レス
試したけど、やはりいらない気がする。
0434デフォルトの名無しさん
2013/11/04(月) 15:58:57.630435デフォルトの名無しさん
2013/11/04(月) 18:05:01.710436デフォルトの名無しさん
2013/11/04(月) 18:19:33.430437デフォルトの名無しさん
2013/11/05(火) 05:41:21.680438デフォルトの名無しさん
2013/11/08(金) 10:19:10.88CLても簡単にできるもんなのかな
0439デフォルトの名無しさん
2013/11/08(金) 21:40:53.08ライブラリがなくて自作かcffi書いたり、パフォーマンスのためにCみたいなコードに、はあるかも。
0440デフォルトの名無しさん
2013/11/09(土) 18:03:22.840441デフォルトの名無しさん
2013/11/09(土) 22:22:41.720442はちみつ餃子 ◆8X2XSCHEME
2013/11/09(土) 22:38:26.170443デフォルトの名無しさん
2013/11/10(日) 00:05:53.28Processingは使えないのかな?
0444デフォルトの名無しさん
2013/11/10(日) 01:46:36.050445デフォルトの名無しさん
2013/11/10(日) 01:58:33.590446デフォルトの名無しさん
2013/11/10(日) 08:41:39.02ClojureみたいなVM言語だと、VM上のライブラリも少し楽に使える。
0447デフォルトの名無しさん
2013/11/11(月) 23:52:07.15lispで書かれたこのツールを誰か改造してください。
他板でも使えるようにしてください。
お願いします。m(ーー)m
qsocks
https://anonfiles.com/file/3fcd3edbf6000ecf37b61e8af186c453
qsocksソースコード
http://codepad.org/uyuG7Ovg
0448デフォルトの名無しさん
2013/11/12(火) 00:16:23.62他の言語で動くようにしろって?
0449デフォルトの名無しさん
2013/11/12(火) 00:22:54.14まあ、好きなように遊んでください。
楽しいと思いますんで。
0450デフォルトの名無しさん
2013/11/12(火) 08:09:37.31どの方言かも知らない奴がそこら中に書き込んでるな
0451デフォルトの名無しさん
2013/11/12(火) 09:19:43.16結果的にそれが一番早く事態を収拾させる方法だよ。
一々食って掛かると某「自称本スレ」みたいになる。
もしかして、わざとそうやってここを荒れさせるのが狙いなら
もうこれ以上言うべきことは無いけど。
0452デフォルトの名無しさん
2013/11/12(火) 14:16:33.61悪意を持った素性の知れない人間に作られた悪意のツールを使うなよ
0453デフォルトの名無しさん
2013/11/12(火) 19:21:51.74どうしてもclipをインストールした場所が検索出来ません
何方かLinuxのファイル検索上手く出来る方法を教えて頂けませんか?
0454デフォルトの名無しさん
2013/11/12(火) 19:28:14.620455デフォルトの名無しさん
2013/11/12(火) 19:30:36.740456デフォルトの名無しさん
2013/11/12(火) 19:50:17.95しつこいようですが
処理系てコマンド扱いなんですか?
0457デフォルトの名無しさん
2013/11/12(火) 19:57:33.64素直にwindows使ってたほうがいいな
0458デフォルトの名無しさん
2013/11/12(火) 20:14:22.10前提知識のお勧めサイトなどありますか?
0459デフォルトの名無しさん
2013/11/12(火) 20:33:21.560460デフォルトの名無しさん
2013/11/12(火) 21:13:10.93https://www.archlinux.org/
こいついっぱしに使えるようになったら余裕になれる
0461デフォルトの名無しさん
2013/11/12(火) 22:39:11.13454です。
初心者なら知らなくて当たり前です。これから学べばいいのです。
まず、知っておくことは「わからないことを調べる方法」を学ぶことです。
459の言うように、まずは人に聞く前にGoogleなどで検索する習慣をつけることです。
qiitaやstack overflowなども参考になります。
あなたの質問の内容を見ると、lispとlinuxを同時に学ぼうとしているように見えます。
457の言うように、どちらか一つに絞るのも一つの方法ですが、
個人的には、やる気があれば、なんとかなるのではないかと思います。
0462デフォルトの名無しさん
2013/11/12(火) 22:52:47.00www.tuat.ac.jp/~sanoken/tech/unix/command.html
itpro.nikkeibp.co.jp/article/COLUMN/20060224/230573/
次に、ターミナルを立ち上げて、
$ clisp
でclispを起動しましょう。
次のHPがlispの勉強に役だつはずです。
www.geocities.jp/m_hiroi/clisp/
modern-cl.blogspot.jp/
0465デフォルトの名無しさん
2013/11/13(水) 01:59:38.37どういたしまして
>>464
どうしたしまして
0466デフォルトの名無しさん
2013/11/13(水) 06:45:39.61いろいろ言語用にOS側の環境作ったり調べたり質問したりすれば、すぐ両方使えるようになるよ。
0467デフォルトの名無しさん
2013/11/13(水) 08:38:55.68find grepで検索出来なかったのですが
どうしてwhereisなんですか?
0468デフォルトの名無しさん
2013/11/13(水) 09:02:13.530469デフォルトの名無しさん
2013/11/13(水) 09:28:02.02くだらねえ質問はここに書き込め! Part 208
http://engawa.2ch.net/test/read.cgi/linux/1383465939/
0470デフォルトの名無しさん
2013/11/13(水) 11:16:32.04find grep whereis でググると次のページがすぐに見つかりました。
www.practicatechnical.com/computer-tips/ubuntu-tips/find-grep-locate-whereis
人に聞く前に、まずは自分で調べるべし。
0471デフォルトの名無しさん
2013/11/13(水) 13:23:46.13ありがとうございます。
0472デフォルトの名無しさん
2013/11/16(土) 19:55:00.08これとかどう?
http://www.lpi.or.jp/linuxtext/text.shtml
0473デフォルトの名無しさん
2013/11/23(土) 21:29:56.10common lisp の方は1994年の標準化以降更新はないんですかね
0474デフォルトの名無しさん
2013/11/26(火) 00:35:00.59Lisp CabinetっていうのでCLISPにチェック入れれば全部動くのかな?
0475デフォルトの名無しさん
2013/11/26(火) 17:44:55.18線形合同法だとは思うんだけど、具体的に
0476デフォルトの名無しさん
2013/11/26(火) 19:07:45.370477デフォルトの名無しさん
2013/11/26(火) 19:31:33.37lispworks、一応簡単な実験で乱数の範囲は0〜8388607のようなんだがなあ、周期がわからぬ
とりあえずthx
0478デフォルトの名無しさん
2013/11/26(火) 21:15:46.51ttp://www.lispworks.com/documentation/lw50/LWRM/html/lwref-326.htm
0479デフォルトの名無しさん
2013/11/26(火) 21:24:01.690480デフォルトの名無しさん
2013/11/27(水) 17:14:36.67(mapcar (my-lambda (* _ 2)) '(1 2 3))
;=>(2 4 6)
こういう事がしたいのですが、引数の数が足らずエラーが出ます。
(defmacro my-lambda (&rest body)
`(lambda (&rest args)
(d-bind (loop for i from 1 to (length args) collect (symb '_ i))
,@body)))
そこで第一引数を評価するdestructuring-bindを作ろうとしたのですが、どうにもうまく作れません。
_1 _2...を引数の数に合わせて生成しバインドするいい方法はないでしょうか?
0481デフォルトの名無しさん
2013/11/27(水) 18:04:08.33こんなマクロが欲しいの?
(my-lambda (* _1 _4))
->
(lambda (_1 _2 _3 _4) (* _1 _4))
0482デフォルトの名無しさん
2013/11/27(水) 18:26:12.64(defun flatten (tree)
(labels ((f (tree acc)
(cond ((null tree) acc)
((atom tree) (cons tree acc))
(t (f (car tree)
(f (cdr tree) acc))))))
(f tree nil)))
(defun ubar-var? (x)
(let ((name (symbol-name x)))
(and (eq #¥_ (elt name 0))
(handler-case
(parse-integer name :start 1)
(error (c)
nil)))))
(defun mapa-b (f a b)
(if (> a b)
nil
(cons (funcall f a) (mapa-b f (1+ a) b))))
(defun my-lambda (&rest body)
(let* ((ubar-vars (remove-if-not #'ubar-var? (flatten body)))
(numbers (sort (mapcar #'ubar-var? ubar-vars) #'<))
(first (first numbers))
(last1 (car (last numbers))))
`(lambda ,(mapa-b (lambda (i)
(intern (format nil "_~s" i)))
first last1)
,@body)))
0483デフォルトの名無しさん
2013/11/27(水) 18:26:31.27普通の(lambda args body)に対し(my-lambda body)だけの記述で
引数に_1 _2 _3が裏で束縛されてbody内で使えるというものです。
0484デフォルトの名無しさん
2013/11/27(水) 18:50:00.91bodyをflattenしてsymbolを走査し、ラムダ式の引数の数を決めるという
アプローチですか。考えつきませんでした!
レスありがとうございます。
0485デフォルトの名無しさん
2013/11/27(水) 18:50:36.54(defmacro my-lambda (&body body)
(let* ((ubar-vars (remove-if-not #'ubar-var? (flatten body)))
(numbers (sort (mapcar #'ubar-var? ubar-vars) #'<))
(first (first numbers))
(last1 (car (last numbers)))
(vars (mapa-b (lambda (i)
(intern (format nil "_~s" i)))
first last1))
(ignores (set-difference vars ubar-vars)))
`(progn
(lambda ,vars
(declare (ignore ,@ignores))
,@body))))
(funcall (my-lambda (+ _1 _3 (* _4 _1))) 1 2 3 4)
-> 8
0486デフォルトの名無しさん
2013/11/28(木) 00:52:21.31あっちは引数の数指定してたけど
0487デフォルトの名無しさん
2013/11/28(木) 22:36:41.410488デフォルトの名無しさん
2013/11/29(金) 23:14:16.94仕方ないので、配列の配列をバッファとして持つクラスを作って、アクセサに
工夫をして凌ぐことにしました。
0489デフォルトの名無しさん
2013/11/30(土) 07:43:28.02array-total-size-limitって一千万を超える値だけど、そんなデカイ配列何に使うのか興味津々
0490デフォルトの名無しさん
2013/11/30(土) 12:06:01.99時系列の実験データを入れるのに使おうかと。使っている処理系が諸事情でclozure clなんですが、
limitが他に比べて小さいですね。
以前はpython使っていたんですが、pythonは自前のループで書いた処理が遅いので、好みのclでやりたくて、移行中です。
pythonはいい言語ですが、強制インデントがどうも性にあわない...
0491デフォルトの名無しさん
2013/11/30(土) 17:07:10.72表現が制限されるという事は、うまく抽象化できない概念が増えるという事だと思うのだけど。
手続き概念を書きたいのに、素直に書けないとか。
いかなる表現も自由で、抽象化方法も簡単に実装できるLisp系が、もっとも表現力のある言語。
0492デフォルトの名無しさん
2013/11/30(土) 20:19:45.92http://cl.cddddr.org/index.cgi?ARRAY-TOTAL-SIZE-LIMIT
Clozure CL 1.7 64-bit 2^56 = 72057594037927936
Clozure CL 1.7 32-bit 2^24 = 16777216
これで足りないなんてどんだけデカイ配列なの?
0493デフォルトの名無しさん
2013/11/30(土) 21:23:49.54こういうのはオンメモリで処理するのをあきらめた方が良い。
0494デフォルトの名無しさん
2013/11/30(土) 22:06:06.090495デフォルトの名無しさん
2013/12/05(木) 00:20:45.60``(,`(,x ,x) ,`(,x ,x))を評価すると
`((,X ,X) (,X ,X))になるんですか?
0496デフォルトの名無しさん
2013/12/05(木) 21:28:07.420497495
2013/12/05(木) 22:50:52.92(setq x '(+ 8 8))
`(`(,,x)) ;=> (`(,(+ 8 8))) ; xは評価されたあともう一度評価される
`(`(,',x));=> ('((+ 8 8))) ; xは一度だけ評価される (言い換え, クオートされた後もう一度評価される)
`(`(,`,x));=> (`(,x)) ; xは次の評価時に評価される なぜこう変換される?
二重バッククオートでは``,,や``,,@や``,',などが頻出ですが、``,`,がどう動いているのか分かりません。
0498デフォルトの名無しさん
2013/12/05(木) 23:20:03.37,`(,x ,x) は (,x ,x) になって
一番手前の準クォートは評価されてその引数を返す形になるから消えて
`((,x ,x) (,x ,x))
になるんじゃない?
処理系作ってみるのが一番理解できると思うけど
0499デフォルトの名無しさん
2013/12/06(金) 00:05:47.33clisp 2.48(cygwin)
[1]> ``(,`(,x ,x) ,`(,x ,x))
(LIST (LIST X X) (LIST X X))
sbcl 1.0.48(win32)
* ``(,`(,x ,x) ,`(,x ,x))
`((,X ,X) (,X ,X))
0500デフォルトの名無しさん
2013/12/06(金) 00:34:27.29http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm
仕様どおりにリーダマクロを展開すると
``(,`(,x ,x) ,`(,x ,x))
=> ``(,(APPEND X X NIL) ,(APPEND X X NIL))
=> `(APPEND (APPEND X X NIL) (APPEND X X NIL))
となる(仕様上もうちょっと展開は続く)。
が、それぞれの時点で equal の意味で等しい範囲内での最適化が許されている。
この式を最適化すれば
`(APPEND (APPEND X X NIL) (APPEND X X NIL))
=> `(LIST (LIST X X) (LIST X X)) ;; *1
となり、 clisp 2.48 の例と一致する。
backquote が専用のマクロに展開されるような処理系だと、
`や,の情報を展開後も保持できる。
ここで
(LIST X X) == `(,X ,X)
(LIST `(,X ,X) `(,X ,X)) == `((,X ,X) (,X ,X))
であるから、 sbcl 1.0.48 の例も正しい。
0501デフォルトの名無しさん
2013/12/06(金) 01:08:56.890502デフォルトの名無しさん
2013/12/06(金) 14:27:37.21>,`(,x ,x) は (,x ,x) になって
その理屈だと
,'(,x ,x) も (,x ,x) になるから違うよ
0503デフォルトの名無しさん
2013/12/06(金) 14:37:32.78>This means that if several commas occur in a row, the leftmost one belongs to the innermost backquote.
混乱してきたので、誰か訳して><
0504デフォルトの名無しさん
2013/12/06(金) 14:50:03.38最も内側のバッククオートが最初に展開されなければならない。
これは以下のことを意味する。
複数のカンマが文の中に現れた場合、
最も左のカンマは最も内側のバッククオートに属する。
0505503
2013/12/06(金) 17:26:52.36トンクス。r5rsの「準引用形式は入れ子にしてもよい。置換は,最外のバッククォートと同じ入れ子レベルで
現れる被 unquote 要素に対してだけ行われる」
最外と最も内側だから、schemeとCommon Lispで動作がちがうん?
0506デフォルトの名無しさん
2013/12/06(金) 17:29:42.210507495
2013/12/06(金) 18:18:51.48なるほどバッククオートもただのマクロなので
普通のマクロと同じく展開の過程を考えれば分かりやすいですね
once-onlyというマクロの定義で使われていたのが元々の出典でした。
`(hoge ,x) => (list 'hoge x)
`(hoge `(a ,(b ,x))) => `(hoge (list 'a (b ,x))) => (list 'hoge (list 'a (b x)))
``(,`(,x ,x) ,`(,x ,x))
=> ``(,(list X X) ,(list X X)) ; もっとも内側の`を展開
=> `(list (list X X) (list X X)) ; 二個目の`を展開
=> (list (list X X) (list X X))
= `((,x ,x) (,x ,x))
理解しました。
チートメモ
``,,x : 1度目評価される、2度目評価される
``,',x : 1度目評価される、2度目評価されない
``,`,x : 1度目評価されない、2度目評価される
0508495
2013/12/06(金) 18:20:48.660509デフォルトの名無しさん
2013/12/06(金) 20:31:16.880510デフォルトの名無しさん
2013/12/06(金) 21:26:47.550511デフォルトの名無しさん
2013/12/06(金) 21:40:00.420512デフォルトの名無しさん
2013/12/06(金) 23:20:44.61```,,,0 みたいのがあったとき、右端の`と左端の,がペアになるよ、という意味だと思う。
>>505
r5rs の場合 ```,,,0 == ``,,0
CL の場合 ```,,,0 == 0
というわけで違う。
0514デフォルトの名無しさん
2013/12/07(土) 12:44:23.230515デフォルトの名無しさん
2013/12/07(土) 21:44:31.74formatで出来るかなと思ったんだがggってもよくわからんかった
0516デフォルトの名無しさん
2013/12/07(土) 23:54:57.88これかな。
浮動小数点数のIEEE754形式への変換
d.hatena.ne.jp/sile/20101023/1287829698
「"Common Lisp" float bit」でググって発見。
0517デフォルトの名無しさん
2013/12/08(日) 16:58:21.34ありがとうありがとう・・・!single-floatもちょっと調べてできた
ggり方が悪かったようだ、反省
0518デフォルトの名無しさん
2013/12/08(日) 23:45:31.37acl
ecl
ccl
cmucl
sbcl
maximaで使いたいけどれが最速ですか?
0519デフォルトの名無しさん
2013/12/09(月) 04:42:12.69とりあえずacl cmucl sbcl が早い
aclは高いから論外だな
0520デフォルトの名無しさん
2013/12/09(月) 05:05:19.45aclは無料版です。
Macのダウンロードしたら派手なGUIでビックリ
0521デフォルトの名無しさん
2013/12/15(日) 23:18:14.13(ary (make-array (list para1 3) :initial-element 0)))
(dotimes (i para1) (setf (aref ary i 0) i)
(print ary)))
;; #2A((0 0 0) (0 0 0) (0 0 0))
;; #2A((1 0 0) (0 0 0) (0 0 0))
;; #2A((2 0 0) (0 0 0) (0 0 0))
0522デフォルトの名無しさん
2013/12/15(日) 23:21:19.12clozure cl armlinux 1.8で実行すると、結果が>>520のように
おかしくなるんだけど、これはバグかな?
(正しくは
;; #2A((0 0 0) (0 0 0) (0 0 0))
;; #2A((0 0 0) (1 0 0) (0 0 0))
;; #2A((0 0 0) (1 0 0) (2 0 0))
となるはず)
0523デフォルトの名無しさん
2013/12/15(日) 23:53:03.37#2A((0 0 0) (0 0 0) (0 0 0))
#2A((0 0 0) (1 0 0) (0 0 0))
#2A((0 0 0) (1 0 0) (2 0 0))
だね
0524デフォルトの名無しさん
2013/12/16(月) 01:14:15.99検証ありがとうございます。ideone(clisp)でもそうなりました。
またdotimesのpara1を3に変えると、なぜか正解になるので、やっぱりバグみたいですね。
0525デフォルトの名無しさん
2013/12/16(月) 23:48:39.98ちゃんと修正されていました。
0526デフォルトの名無しさん
2013/12/20(金) 21:31:16.630527デフォルトの名無しさん
2013/12/20(金) 21:35:22.360528デフォルトの名無しさん
2013/12/20(金) 21:53:59.660529デフォルトの名無しさん
2013/12/21(土) 10:13:46.310530デフォルトの名無しさん
2013/12/21(土) 18:25:01.78((("-"))) ワワッ評価されちゃった
0531デフォルトの名無しさん
2013/12/21(土) 20:29:24.350532デフォルトの名無しさん
2013/12/25(水) 04:26:58.07始めに(defun つけてうまくかっこつけてスペースでデータ分けれるし
これがデータとしてのコードとか言われる由縁なのか
0533デフォルトの名無しさん
2013/12/26(木) 21:32:26.900534デフォルトの名無しさん
2013/12/26(木) 22:15:20.060535デフォルトの名無しさん
2013/12/26(木) 22:16:08.900536デフォルトの名無しさん
2013/12/26(木) 22:28:47.470537デフォルトの名無しさん
2013/12/26(木) 22:46:00.550538デフォルトの名無しさん
2013/12/27(金) 20:06:48.14(setq a '(1 2 3))
(delete 2 a) => (1 3)
a => (1 3)
(setq b '(1 2 3))
(delete 1 b) => (2 3)
b => (1 2 3)
0539はちみつ餃子 ◆8X2XSCHEME
2013/12/27(金) 20:20:38.65与えた配列は結果を構築するために再利用されうるという意味で破壊的なのであって、あくまで返り値が delete の結果。
Side Effects の項に書いてあるのはそういう意味。
0540デフォルトの名無しさん
2013/12/27(金) 20:24:14.870541デフォルトの名無しさん
2013/12/27(金) 21:37:08.520542デフォルトの名無しさん
2013/12/31(火) 22:58:19.55・以下のクロージャを (myfun 10) のようにコールする方法はありませんか?
> (setq myfun (let ((cnt 0)) (lambda (delta) (setq cnt (+ cnt delta)))))
> (funcall myfun 10)
10
> (funcall myfun 10)
20
> (funcall myfun 2)
22
0543デフォルトの名無しさん
2014/01/01(水) 00:57:17.10setqじゃなくてsetfを使うならsymbol-functionを使って
(setf (symbol-function 'myfun)
(let ((cnt 0)) (lambda (delta) (setq cnt (+ cnt delta)))))
0544デフォルトの名無しさん
2014/01/01(水) 00:59:21.51じゃだめですかね?
0545デフォルトの名無しさん
2014/01/01(水) 01:00:22.050546デフォルトの名無しさん
2014/01/01(水) 01:04:13.61ttp://ideone.com/WsMzJM
0547デフォルトの名無しさん
2014/01/01(水) 03:07:30.19special formと呼ばれるものは仕様で決まっていてユーザー定義できないが、使う側から見ればspecial formとマクロとは変わらないのでマクロを定義すれば望むことはできるはず
0548デフォルトの名無しさん
2014/01/01(水) 03:14:08.32適当にread-lineとか使って自分で書くと数十MBくらいのファイルでもう速度が気になりだしてしまう
0549542
2014/01/01(水) 10:33:34.61マクロの使い方も分かってきました。
(defmacro mysetq (x val) `(set 'x ,val))
0550542
2014/01/01(水) 13:27:09.69(defmacro mysetq (x val) `(set ,x ,val))
でした。
0551542
2014/01/01(水) 13:31:17.92これも間違ってましたね・・・
さすがに setq, setf, quote どれも使わずに手製 setq の実現は無理なんでしょうか
(defmacro mysetq (x val) (setq ,x ,val))
0552デフォルトの名無しさん
2014/01/01(水) 15:13:28.12(defmacro mysetq (x val) `(set ',x ,val))
setqというのはset + quoteらしい。
0553デフォルトの名無しさん
2014/01/02(木) 18:56:45.45例えば、クラスfooのインスタンスがa=1,b=2のプロパティーを持っていたとすると。
#<foo (a=1, b=2)>
みたいに表示される関数が欲しいんだけど。
0554デフォルトの名無しさん
2014/01/02(木) 18:58:35.64スレ汚しすまん。
0555デフォルトの名無しさん
2014/01/03(金) 13:48:08.21ああ、defmacro テンプレートでの「,」(評価する)は対応するパラメータ記述そのままに置き換えられるんですね。
最初混乱しましたが、やっと分かってきました。
0556デフォルトの名無しさん
2014/01/04(土) 15:23:56.51何か良い説明してる所はないのかな
0557デフォルトの名無しさん
2014/01/04(土) 20:12:58.180558デフォルトの名無しさん
2014/01/06(月) 18:02:32.72pythonのリスト内包表記のように
[(x, y) for x in range(2) for y in range(2)]
=> [(0, 0), (0, 1), (1, 0), (1, 1)]
こんな感じのことは出来ませんか?
0559デフォルトの名無しさん
2014/01/06(月) 22:28:22.28Common Lispにタプルはないのでリストで代用。
(loop for x below 2 nconc (loop for y below 2 collect (list x y)))
=> ((0 0) (0 1) (1 0) (1 1))
0560デフォルトの名無しさん
2014/01/06(月) 22:33:06.29納得しました
0561デフォルトの名無しさん
2014/01/09(木) 17:43:04.87`(loop for x below ,x-max nconc (loop for y below ,y-max collect (list x y))))
(loop* for x below 2 for y below 2)
;=> ((0 0) (0 1) (1 0) (1 1))
0562デフォルトの名無しさん
2014/01/09(木) 18:00:51.580563デフォルトの名無しさん
2014/01/09(木) 19:22:39.83(defun gen-nested-loop (clauses &optional syms)
(if clauses
(let ((sym (gensym)))
`(loop for ,sym below ,(nth 3 (first clauses))
nconc ,(gen-nested-loop (rest clauses) (cons sym syms))))
`(list (list ,@(reverse syms)))))
(defun group (lst n)
(labels ((rec (lst acc)
(if (nthcdr n lst)
(rec (nthcdr n lst) (cons (subseq lst 0 n) acc))
(reverse (cons lst acc)))))
(rec lst nil)))
0564デフォルトの名無しさん
2014/01/10(金) 00:23:52.34ネット上を探してみたのですが見付かりませんでした。。。
0565デフォルトの名無しさん
2014/01/11(土) 18:36:57.000566デフォルトの名無しさん
2014/01/11(土) 19:36:18.76こーゆーこと?
0567デフォルトの名無しさん
2014/01/11(土) 19:41:57.680568デフォルトの名無しさん
2014/01/11(土) 20:41:40.60;=> :HOGE
:hoge は keyword:hoge の略記。
0569デフォルトの名無しさん
2014/01/11(土) 20:47:37.44勉強になりましたありがとうございます
0570デフォルトの名無しさん
2014/01/11(土) 21:13:58.46素晴らしい
0571デフォルトの名無しさん
2014/01/13(月) 11:19:27.04Wikipediaの引用で悪いけど
http://ja.wikipedia.org/wiki/%E8%8B%AB%E7%B1%B3%E5%9C%B0%E8%8B%B1%E4%BA%BA
>プログラム言語であるLISP言語の論文を、かつていくつか発表していた時期がある。[38] 、イェール大学大学院では、
>オブジェクト指向LispのTプログラミング言語により、超並列処理システムなどを構築している[39]。
>カーネギーメロン大学計算機科学部に移籍後は、Common Lispの生みの親、スコット・ファールマン
>(Scott Fahlman)教授の下でLispプログラミングを勉強し、この縁からファールマンがジャストシステム
>ピッツバーグ研究所所長に、苫米地が取締役に就任した[40]。帰国後もCommon Lispの研究を続け[41]、
>通産省の援助でCommon Lispで記述されたWeb サーバである、Lispache サーバなどを発表している[42]。
>また、Common Lispにおける動的オブジェクト指向モデルのCLOSの普及にも尽力している[4
なんかやたらすごいじゃん。
このスレのスーパーLiSPハカー諸兄による評価お願い
0572デフォルトの名無しさん
2014/01/13(月) 15:16:58.660573デフォルトの名無しさん
2014/01/13(月) 16:19:36.03その海外事務所のサブはかなりショボイ感
0574デフォルトの名無しさん
2014/01/14(火) 00:13:40.430575デフォルトの名無しさん
2014/01/14(火) 00:41:55.930576デフォルトの名無しさん
2014/01/14(火) 09:37:10.210577デフォルトの名無しさん
2014/01/14(火) 13:38:27.140578デフォルトの名無しさん
2014/01/14(火) 14:21:05.510579デフォルトの名無しさん
2014/01/14(火) 18:43:04.480580デフォルトの名無しさん
2014/01/14(火) 18:55:11.890581デフォルトの名無しさん
2014/01/14(火) 22:52:58.99すげー納得した
0582デフォルトの名無しさん
2014/01/14(火) 23:31:28.02アナログテレビ時代にアナログテレビが全部ネットで見れたソフト。
裁判になったら放送法の問題点があらわになるから訴えられるのを
待っていると言っていたが結局訴えられないままアナログ放送終わった。
0583デフォルトの名無しさん
2014/01/15(水) 08:01:21.370584デフォルトの名無しさん
2014/01/15(水) 08:38:11.010585デフォルトの名無しさん
2014/01/15(水) 09:22:10.060586デフォルトの名無しさん
2014/01/16(木) 01:25:38.350587デフォルトの名無しさん
2014/01/16(木) 09:47:17.67ちびまる子ちゃんはやめてけれ
0588デフォルトの名無しさん
2014/01/17(金) 08:20:56.320589デフォルトの名無しさん
2014/01/18(土) 00:11:26.23対象となる文字列は
"
a
[space][space]b
[tab]a
[tab]
c
"
こういうもので[space]は空白文字が、[tab]にはタブ文字が入ることを想定しています
(cl-ppcre:regex-replace-all "^\\t" string "")
ならタブ文字は削除できたのですが
(cl-ppcre:regex-replace-all "^\\t" string "")
では行頭からタブ文字を探せていないようなのです
どこを修正すればよいですか
0590デフォルトの名無しさん
2014/01/18(土) 09:38:26.50通常^は対象文字列の先頭のみにマッチします。
そこで、(?m)によって^が対象文字列中の改行後にもマッチするようにします。
\\sは(スペース、タブなどの)空白文字一般にマッチします。
0591デフォルトの名無しさん
2014/01/18(土) 13:55:02.64(regex-replace-all (create-scanner "^\\t" :multi-line-mode t) string "")
0592589
2014/01/19(日) 01:09:03.37ありがとうございます
複数行にわたる処理のオプションを適切に指定しなければならなかったのですね
\sについてもありがとうございました
0593デフォルトの名無しさん
2014/01/19(日) 15:54:28.210594デフォルトの名無しさん
2014/01/19(日) 17:41:08.96スカリーさんが居ないのがLisp界隈の不幸なのかもしらん
0595デフォルトの名無しさん
2014/01/22(水) 19:25:06.40http://www.crl.co.jp/crlodev/product/SUN_Lispache.pdf
これの特徴みると突っ込みどころばっかりだけど
0596デフォルトの名無しさん
2014/01/23(木) 00:15:59.45とりあえず突っ込みどころをつっこんでくれ
0597デフォルトの名無しさん
2014/01/26(日) 00:52:35.16実践/実用 Common Lisp のどちらか読んでるのか、あるいはSICPとかから入っていろいろと読んでいるのか
どれくらい読んでると最低限仕事に使えてるものなのかが知りたいです
0598デフォルトの名無しさん
2014/01/26(日) 01:26:07.910599デフォルトの名無しさん
2014/01/26(日) 11:46:27.34CLTL2
処理系のソース
各種ライブラリのソース
いつでも参照するのが CLHS
実践/実用 Common Lisp とかは, ずっと後になって斜め読みした程度.
>>598
> 処理系のマニュアルも結構読むのでしょうか
ふつう読むだろ?
gcc とかだって, 処理系マニュアル読まないと使えないんじゃないの?
0600デフォルトの名無しさん
2014/01/26(日) 15:35:46.00elispではexpand-file-nameで出来たのですが。
0601デフォルトの名無しさん
2014/01/26(日) 15:47:06.90ファイル中で(load "~/Dropbox/hoge.lisp")としていたのですが
windowsで動かそうとするとエラーが出たのが経緯です。
(windows上で(user-homedir-pathname)で変えるパスにDropboxはあります)
(with-open-file (stream "~/hogehogefile" :direction :output)
(format stream "hoge~%"))としてみると
error opening #P"d:~/hogehogefile": Unknown error
[Condition of type SB-INT:SIMPLE-FILE-ERROR]
となってしまいます。
0602デフォルトの名無しさん
2014/01/26(日) 16:49:42.930603デフォルトの名無しさん
2014/01/26(日) 18:22:50.31レスありがとうございます。
ふむふむ、この方はディレクトリを監視するプログラムにおいて
監視先ディレクトリを#+MSWINDOWSで変えるという手法を取っていますね。
しかしloadの~展開に関して#+MSWINDOWSを組み合わせる綺麗な手法が思いつきませんでした。
loadをラップして自分で~を展開するコードを書いたらうまく動きました。
(皆こんなことやってるのかなぁ?)
(defun expand-file-name (path)
(if (equal (subseq path 0 2) "~/")
(merge-pathnames (subseq path 2) (user-homedir-pathname))
path))
(defmacro load* (str) `(load ,(expand-file-name str)))
;(load "~/Dropbox/hoge.lisp") ; windowsでは動かない
(load* "~/Dropbox/hoge.lisp") ; どちらでも動く
0604デフォルトの名無しさん
2014/01/26(日) 18:53:15.90パスネームを使えばいいのでは。どうしても文字列と "~/" を使わないと駄目なの?
(defvar *dropbox-directory-pathname*
(merge-pathnames (make-pathname :directory '(:relative "Dropbox")
:version :newest)
(user-homedir-pathname)))
(defvar *hoge-lisp-pathname*
(make-pathname :name "hoge"
:type "lisp"
:version :newest
:defaults *dropbox-directory-pathname*))
(load *hoge-lisp-pathname*)
0605デフォルトの名無しさん
2014/01/26(日) 18:58:47.79Windowsでも "/" をディレクトリ区切り文字として解釈する実装になっている
からではないかと。厳密には可搬性は無いと思う。
0606デフォルトの名無しさん
2014/01/26(日) 20:54:37.61hogeキチガイは早く消えろ。
ふむふむじゃねーよクズが。
0607デフォルトの名無しさん
2014/01/26(日) 22:01:26.53>CLTL2
>処理系のソース
>各種ライブラリのソース
> CLHS
なるほど、規格とか処理系自体に関することの方なんですね。
>マニュアル
読むか読まないかだったらそうでしたね…(つまらない質問ですみません)。読むというのは必要になった時都度該当箇所を読む感じなのでしょうか、それとも頭から読んでしまっていますか?
どの程度の人数・期間の、(差し支えなければ)どういった種類のプロジェクトで使ったのかも興味があるので教えてもらえると嬉しいです
0608デフォルトの名無しさん
2014/01/26(日) 22:25:03.12業務で CL 使うなんてのは,
o やたら, 仕様がコロコロ変わるけど, 納期の壁はいかんともしがたい
o 該当jobに精通したエキスパートが少ない
o マクロ, リーダーマクロに頼りきりって取り敢えず動作させる
てな, プロジェクトにしか使えないっす
現実的には, 実験要素てんこ盛りの研究開発用のプロトタイピングが
ほとんど. メンバー数も, 多くて 5人程度
もしくは, 一人で思いっきり趣味に走れるプロジェクトとか
0609デフォルトの名無しさん
2014/01/26(日) 22:29:32.330610デフォルトの名無しさん
2014/01/26(日) 22:34:19.41追加
> 読むというのは必要になった時都度該当箇所を読む感じなのでしょうか
とりあえず, 目は通します.
少なくとも, 性能ネックになった場合,何とかなるかならないかを判断できる程度には
0611デフォルトの名無しさん
2014/01/26(日) 23:37:53.95はるか大昔、ある特殊なプログラミング言語環境(今で言うDSL)を Lisp で作ったり、
ウェブサーバ(HTTPサーバ)の開発プロジェクトに関わった事があるなぁ(どちらも
民間企業の業務)。Lisp じゃないけど Scheme(STk) で弁当屋の売上管理システム
作ってた人がいたっけ。雑誌名は忘れたけど紹介記事が載ってたな。何で Scheme
で!?って思ったけどw
>>608
だよね〜
0612デフォルトの名無しさん
2014/01/28(火) 01:15:12.96>>611
なるほど、やはりそういうピーキーな使い方になるんですね。
質問を重ねて申し訳ないのですが、業務で使うという場合だと他の言語と比べるとどのへんが使いにくい点になるんでしょう? ライブラリとかノウハウの充実度なのでしょうか。それとも納品の都合なども絡んで来るのでしょうか。
0613デフォルトの名無しさん
2014/01/28(火) 11:53:32.44> 業務で使うという場合だと他の言語と比べるとどのへんが使いにくい点
メンテナーの確保
0614デフォルトの名無しさん
2014/01/28(火) 11:56:30.75ライブラリに依存しない部分的な処理だけLispで書いてもいいのかもしれんが
0615デフォルトの名無しさん
2014/01/28(火) 18:43:19.25http://codepad.org/kQeZJjBl
こういう書き方をするとループしてしまうみたいです
fooからbar,barからfooを使うもっと良い書き方はありますか
それとも設計が悪いですか
0616デフォルトの名無しさん
2014/01/30(木) 00:09:44.420617デフォルトの名無しさん
2014/01/30(木) 01:06:12.60すっきりしました
0618デフォルトの名無しさん
2014/01/30(木) 01:40:58.01参考になりました。お答えいただいた方々ありがとうございました。
0619デフォルトの名無しさん
2014/01/30(木) 19:51:55.380620デフォルトの名無しさん
2014/01/30(木) 22:36:59.95なんならSBCLとclisp両方入れてみたら?
0621デフォルトの名無しさん
2014/01/31(金) 02:35:49.670622デフォルトの名無しさん
2014/01/31(金) 13:21:29.91MOP の SPECIALIZER-DIRECT-METHODS とか SPECIALIZER-DIRECT-GENERIC-FUNCTIONS
とかじゃダメ?
CLOS が PCL ベースのやつだとサポートしてそうだが…
0623デフォルトの名無しさん
2014/02/01(土) 01:11:52.90ありがとうございます!まさにこれでした。
(defclass hoge nil nil)
(defmethod hoge-method1 ((h hoge)))
(defmethod hoge-method2 ((h hoge)))
(defparameter hoge-instance (make-instance 'hoge))
(moptilities::specializer-direct-methods (class-of hoge-instance))
=> (#<STANDARD-METHOD HOGE-METHOD2 (HOGE) {10041BCD43}>
#<STANDARD-METHOD HOGE-METHOD1 (HOGE) {1004145BC3}>)
0624デフォルトの名無しさん
2014/02/01(土) 02:03:45.34頭も悪い、やる気もないならプログラミングなんかやめれば?
お前みたいな奴が書き込むだけでスレのレベルが下がるんだよ
0625デフォルトの名無しさん
2014/02/01(土) 02:15:34.570626デフォルトの名無しさん
2014/02/01(土) 03:46:57.98感謝とかいらないからhoge厨は二度とくるな。
0627デフォルトの名無しさん
2014/02/01(土) 04:26:15.64流石にそういうのは標準で入れておいてほしい。
0628デフォルトの名無しさん
2014/02/01(土) 08:19:09.67質問です、よろしくお願いします
カラス、下痢と言わずに
カー、クダーというのはおかしいと思います
どしてそんな非国民言葉がリスプでは使われているんですか?
0629デフォルトの名無しさん
2014/02/01(土) 08:24:51.64(use-package :sb-mop) とか (use-package :mop) とかするだけちゃうん?
0630デフォルトの名無しさん
2014/02/01(土) 10:17:42.67ポッポと管だと国家が滅ぶからだろ
0631デフォルトの名無しさん
2014/02/01(土) 12:36:45.780632デフォルトの名無しさん
2014/02/01(土) 12:41:27.12俺はcar/cdrがいい
一穴主義、女は一人、セルも一つ!
restだあ?
浮気者!
0633デフォルトの名無しさん
2014/02/01(土) 13:49:07.76そのレジスタが残ってるCPUがまだ現役だったらかなり怖い
0634デフォルトの名無しさん
2014/02/01(土) 16:15:21.510635デフォルトの名無しさん
2014/02/01(土) 18:37:39.240636デフォルトの名無しさん
2014/02/02(日) 13:45:14.44ポインター 2 個入らんやん
0637デフォルトの名無しさん
2014/02/02(日) 13:50:51.60ヒープを一回しか取得しないなら32ビットオフセット2つで管理すればよくね?
そんなのやだけど
0638デフォルトの名無しさん
2014/02/02(日) 13:54:00.20インストラクションにサイズプレフィックスが付くのでちょっと非効率かもしれないけど。
0639デフォルトの名無しさん
2014/02/02(日) 14:10:34.88それLP64いわなくね?
0640デフォルトの名無しさん
2014/02/02(日) 14:13:36.010641デフォルトの名無しさん
2014/02/02(日) 19:32:47.59SPARC とか Power とか ARM あたりだと無理だよね
0642デフォルトの名無しさん
2014/02/02(日) 23:38:40.45x86 の話?
REX prefix って 32bit モードだと別の命令にマップされてない?
x32 と勘違いしてない?
0643デフォルトの名無しさん
2014/02/08(土) 22:16:26.56リバーシをビットボードで扱ってみたいんだけど
0644デフォルトの名無しさん
2014/02/08(土) 22:34:16.510645デフォルトの名無しさん
2014/02/11(火) 00:30:15.65線形代数ライブラリならf2clのlapackを使えばいいのかな
0646デフォルトの名無しさん
2014/02/11(火) 01:24:35.55どのように記述すれば良いでしょうか?
(defun my-calc-region (start end)
(interactive "r")
(setq answer (buffer-substring start end))
;;なんらかの処理
(kill-new answer);;回答をkill-ringに
)
たとえば100*200+300*400を範囲選択すれば、
140000がkill-ringに入るようにしたいです。
0647デフォルトの名無しさん
2014/02/11(火) 02:36:43.03こういうこと書くと吝嗇・非友好的と取られるかも知らんけど、まずは下記のスレで聞いてきて
【GNU】Emacs Lisp 【Elisp】
http://toro.2ch.net/test/read.cgi/tech/1382223056/
0648デフォルトの名無しさん
2014/02/11(火) 12:44:52.22あ、はい
了解しました。
0649デフォルトの名無しさん
2014/02/11(火) 22:39:49.690650デフォルトの名無しさん
2014/02/11(火) 22:55:30.840651デフォルトの名無しさん
2014/02/12(水) 06:50:46.480652デフォルトの名無しさん
2014/02/12(水) 10:53:32.930653デフォルトの名無しさん
2014/02/12(水) 10:54:06.38○だった
0654デフォルトの名無しさん
2014/02/12(水) 14:10:02.220655デフォルトの名無しさん
2014/02/12(水) 14:16:52.52俺はそう聞いたから今年からLispをはじめた
チンチンいじりながらコンスセル
今日悟った。リストなんて実は無いんだ!
それはたかだか一つのセルの表現形式でしかないんだと。
そして思ったね。
東大女はこんなおれにクラっときて足を開くんだと。
頑張るぜ
0656デフォルトの名無しさん
2014/02/12(水) 15:39:39.820657デフォルトの名無しさん
2014/02/12(水) 18:51:15.340658デフォルトの名無しさん
2014/02/12(水) 19:14:41.64漫画家の描いたキャラなのにわざわざパブリックドメインだと明記するのは珍しくね?
確かに版権気にするようなものじゃないけど
0659デフォルトの名無しさん
2014/02/16(日) 22:50:50.89(ppcre:scan "[^+-<>]" "abc") ;=> 0
(ppcre:scan "[^+-<>]" "...") ;=> NIL
SBCLですが二番目がNILになってしまいます。
0が帰ってきて欲しいのですが、皆さんの環境ではうまく動きますか?
0660デフォルトの名無しさん
2014/02/16(日) 22:52:10.380662デフォルトの名無しさん
2014/02/17(月) 12:44:39.53初めて作るもんでよくわからんのだが
0663デフォルトの名無しさん
2014/02/17(月) 14:52:16.93http://seesaawiki.jp/w/author_nari/
0664デフォルトの名無しさん
2014/02/17(月) 16:02:07.64いやアルゴリズムはわかるんだわ。
マークアンドスイープってやつにしようと思うんだけど、
そのマークをどこにするかってことなんだ。
0665デフォルトの名無しさん
2014/02/17(月) 17:25:51.590666デフォルトの名無しさん
2014/02/17(月) 23:29:35.04もっと手抜きして Boehm GC もいいと思う。
0667デフォルトの名無しさん
2014/02/17(月) 23:59:51.00たとえば他にはどんなアプローチがありますか
0668666
2014/02/18(火) 01:10:51.06キャッシュメモリとか OS の copy on write とかとの相性で、
そっちの方が高速に動作する。
もちろん上手く実装すれば、だけど。
0669デフォルトの名無しさん
2014/02/18(火) 10:46:22.88いう人があまり意識してもしょうがない。
あと、Lispとかの実装技法としては、オブジェクトじゃなくポインタの側に情報を
持たせる方法もあるけど、アーキテクチャに依存してトリッキーになるから、
オブジェクトの側に持たせればいい。
0671デフォルトの名無しさん
2014/02/19(水) 02:33:55.280672デフォルトの名無しさん
2014/02/19(水) 15:56:40.97再帰的定義をした後にwhile版を定義して速度比較しながら勉強してる。
0673デフォルトの名無しさん
2014/02/19(水) 18:01:30.69再帰を陽に書くのを減らしてゆく、というのが王道。
0674デフォルトの名無しさん
2014/02/19(水) 18:47:15.84末尾再帰最適化する実装ならそんなに変わらないと思っていたが、そうでもないのかな。
0675デフォルトの名無しさん
2014/02/19(水) 19:25:05.78>>674
初心者なので言われていることがサッパリわからない。言葉だけでも頭の中に入れておく。ダンケ
0676デフォルトの名無しさん
2014/02/19(水) 19:55:33.56末尾呼び出しをジャンプにする最適化が効いてるかどうかをチェックしてからの
比較でないと、なんとも言えないと思う。
0677デフォルトの名無しさん
2014/02/19(水) 20:19:04.45賢いコンパイラなら同じコードに落ちるけど
0678デフォルトの名無しさん
2014/02/19(水) 20:31:30.960679デフォルトの名無しさん
2014/02/19(水) 20:54:08.49(defun my-for-each (fn lst)
(when lst
(funcall fn (car lst))
(my-for-each fn (cdr lst))))
fn に my-for-each を定義する関数が渡されることがある。
例えば、
(my-for-each
(lambda (a)
(print a)
(defun my-for-each (fn lst) nil))
'(a b c))
このような場合、ループせずに一回目の呼び出しで終了しなきゃならない。
つまり my-for-each は末尾再帰ではなく、末尾呼出と呼ぶべきもの。
で、末尾呼出はただのジャンプ命令に変換しちゃいけない。
毎回同じ場所にジャンプできるとは限らないし、
arity の違う関数に束縛されてるかもしれないから。
一応 Common Lisp では
「関数fの呼び出し中にfの束縛が変更されないと仮定してよい」
というような規則があるので、
コンパイラによってはループに変換するかもしれない。
でもそれはコンパイラの方針によるのであって、
「賢いコンパイラなら」というのは誤り。
動的なコード変更を重視する処理系なら、このような仮定はしない。
まあ、色々あって、Common Lisp では再帰とループは使い分けるのが普通だと思う。
0680デフォルトの名無しさん
2014/02/19(水) 21:28:35.180681デフォルトの名無しさん
2014/02/19(水) 23:34:14.35この書き込みを理解できるようになるのが一つの目標だ
ガンバるぞ
0682デフォルトの名無しさん
2014/02/21(金) 01:19:57.920683デフォルトの名無しさん
2014/02/21(金) 16:30:11.86使っているディストリに最近入った。
python で書かれた lisp 方言
0684デフォルトの名無しさん
2014/02/21(金) 16:51:17.120685デフォルトの名無しさん
2014/02/22(土) 17:57:38.480686デフォルトの名無しさん
2014/02/22(土) 19:11:07.090687デフォルトの名無しさん
2014/02/22(土) 21:41:51.04頭が良い人はいいなあ。
折れもさんざん頭が良いと言われてきたけれど、それはなんとなく「普通」の人と較べてで、
パッパと進んでいくには
「人間じゃない」レベルの頭の良さがいる。
はあ、そう生まれた人はいいなぁ
ま、仕方ないのでじっくりと時間をかけてなんどもやって、少しずつ直感化していく。
0688デフォルトの名無しさん
2014/02/22(土) 22:38:44.89みんな過程ではそう思う。
どう頑張っても積み上げ以上のことはできないんだから。
0689デフォルトの名無しさん
2014/02/22(土) 23:04:34.710690デフォルトの名無しさん
2014/02/22(土) 23:21:29.370691デフォルトの名無しさん
2014/02/22(土) 23:31:58.150692デフォルトの名無しさん
2014/02/23(日) 21:57:11.74しめて二ヶ月。
次は「初めての人のためのLisp」か「Schme手習い」をやってみよう。もう、どっちも手元にある。
亀の歩みだけども、じりじり前進。
0693デフォルトの名無しさん
2014/02/26(水) 11:01:38.93MySQL、ccl、slime は UTF8 に設定しているつもりなのですが他にも設定が必要なところがあるのでしょうか。
0694デフォルトの名無しさん
2014/02/26(水) 20:31:57.270695デフォルトの名無しさん
2014/02/26(水) 21:44:15.550696デフォルトの名無しさん
2014/02/27(木) 01:18:36.79これはどのように設定すれば良いのでしょうか。
slime とかに設定するものなのでしょうか。
0697デフォルトの名無しさん
2014/02/27(木) 06:37:58.06>>694
0698デフォルトの名無しさん
2014/02/27(木) 15:59:55.05パッケージをまたいでグローバルに作用しているようなんですが、
自分でリードマクロを定義すると他のライブラリを読み込んだときかなりの割合でマクロ文字が衝突します。
安全なリードマクロの書き方ってあるんでしょうか。
0699デフォルトの名無しさん
2014/02/27(木) 23:12:43.63readtable まわりを弄るんだったと思う。
0700デフォルトの名無しさん
2014/03/01(土) 17:22:51.69他のライブラリを読み込むときだけリードテーブルを初期状態に戻せばいいのかなと。
(let ((*readtable* (copy-readtable nil)))
(ql:quickload "my-favorite-library"))
0701デフォルトの名無しさん
2014/03/01(土) 22:38:48.490702デフォルトの名無しさん
2014/03/02(日) 22:31:51.65named-readtablesとかcl-syntaxとか使って管理
使うときだけ有効化
0703デフォルトの名無しさん
2014/03/03(月) 09:29:44.650704デフォルトの名無しさん
2014/03/03(月) 10:23:15.920705デフォルトの名無しさん
2014/03/03(月) 12:40:41.260706デフォルトの名無しさん
2014/03/03(月) 15:49:19.700707デフォルトの名無しさん
2014/03/03(月) 20:36:35.05Lisper:T
その後紅茶を黙って飲む事が悟りだ
0708デフォルトの名無しさん
2014/03/03(月) 23:45:01.00emacsでcommon lispを使っています
common-lisp-hyperspec-formatをときたま使うのですが
これでcontrol characterの項目を選択するとウェブブラウザで開いてしまいます
http://lispuser.net/emacs/lisphacking.html
これのhyperspecの設定をしたおかげで
slime-hyperspec-lookupの方はemacs-w3mで見ることができ、かなり使いやすいです
common-lisp-hyperspec-formatもemacs-w3mで開くにはどう設定すればよいですか?
0709デフォルトの名無しさん
2014/03/04(火) 06:20:39.08そのページに書いてある設定でいいと思うけど?
(setq browse-url-browser-function 'w3m-browse-url)
試してみたけど、この設定で slime-documentation-lookup と common-lisp-hyperspec-format の両方に反映されたよ。
0710デフォルトの名無しさん
2014/03/04(火) 22:13:36.77(setq q '(a b c))
``(,q)
を評価すると`(,q)になるのがよくわかりません
`xを(backquote x)
,xを(unquote x)で表わすと
(backquote (backquote ((unquote q))))で評価すると
(backquote (q))で
`(q)になるはずなんですがなぜbackquoteの内側の(unquote q)は評価されてqにならないんでしょう
0711デフォルトの名無しさん
2014/03/04(火) 23:59:37.10流れてると思うからもう一度。
backquote の仕様はこれ。
http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm
``(,q)
== `(APPEND (LIST Q) NIL)) ; `は内側から先に展開される仕様
== (APPEND '(APPEND (LIST Q) NIL) NIL)
これを eval すると
=> (APPEND (LIST Q) NIL)
一方
`(,q)
== (APPEND (LIST Q) NIL)
で、 ``(,q) の評価結果と等しい。
なので結果が `(,q) になるのは正しい。
実際には出てくる結果がequalの意味で等しければ
処理系は好きに変換していいことになっている。
なので、処理系によっては結果は `(,q) でないかもしれない。
0712デフォルトの名無しさん
2014/03/05(水) 00:10:30.26CLには正規表現やらネットワーク周りやら標準では入ってないので
そういうライブラリを組み込んだ上で新言語と称したものがあってもいいと思うし
初心者にはアピールすると思う。
0713デフォルトの名無しさん
2014/03/05(水) 00:33:38.510714デフォルトの名無しさん
2014/03/05(水) 00:41:55.92すみません
確かに両方に反映されていました
失礼しました
0715デフォルトの名無しさん
2014/03/05(水) 17:12:07.51ありがとうございます
backquoteを仕様通りに展開するとうまく動作するのは分かりましたが
let over lambdaで言われてるように動作を予測するのは難しいですね
外側のbackquoteと内側のunquoteを対にして読めばいいんでしょうか
0716デフォルトの名無しさん
2014/03/06(木) 16:58:19.90訳本より原著の方が良さげだけど高いからいいや
0717デフォルトの名無しさん
2014/03/08(土) 00:32:28.07訳本の方が良いと思う。
0718無職
2014/03/08(土) 18:03:46.85clispでの入力履歴を、
前回に立ち上げていた時までさかのぼるには
どうするのでしょうか。
再インストールしたら出来なくなりました。
よろしくおねがいします。
環境
osx 10.6.8
CLISP 2.49
0719デフォルトの名無しさん
2014/03/08(土) 18:11:45.490720無職
2014/03/09(日) 11:19:13.76ありがとうございます。
忘れていました。思い出しました。
素早い返答、感謝します。
2ちゃんていいですね。
0721デフォルトの名無しさん
2014/03/09(日) 11:46:07.13悶絶フグの悟りもいいぞ
0722デフォルトの名無しさん
2014/03/09(日) 13:24:10.130723デフォルトの名無しさん
2014/03/09(日) 15:06:10.920724デフォルトの名無しさん
2014/03/10(月) 17:17:34.550725デフォルトの名無しさん
2014/03/10(月) 17:21:11.580726デフォルトの名無しさん
2014/03/10(月) 17:30:57.070727デフォルトの名無しさん
2014/03/10(月) 17:59:19.050728デフォルトの名無しさん
2014/03/10(月) 23:49:19.860729デフォルトの名無しさん
2014/03/11(火) 20:46:44.83eqがtにならないので嵌ったんだけどこういうのはキーワードシンボルで扱えばいいの?
0730デフォルトの名無しさん
2014/03/11(火) 22:05:11.78キーワードでも良いけど、シンボルプール用のパッケージを別途作って
そのパッケージを件のパッケージ群からuseしても良い。
そういう用途ならexternしないで意図的にパッケージ名付でアクセスするのも衛生的で良いかもしれない
0731デフォルトの名無しさん
2014/03/11(火) 22:11:53.08すっきり書けそうありがとう
0732デフォルトの名無しさん
2014/03/12(水) 16:22:32.27ID:weuLszB+0733デフォルトの名無しさん
2014/03/13(木) 19:32:07.56ID:WEwvXz1VLisp Flavored Erlang
ttp://lfe.github.io/
だって。
なんだかんだ言って、lisp って人気者なんじゃね?
0734デフォルトの名無しさん
2014/03/13(木) 20:43:18.96ID:hR60BOrRちなみに同じ理由でMLとかHaskellもなじめない orz
0735デフォルトの名無しさん
2014/03/16(日) 01:03:58.72ID:eFgBNCjO(loop for i from 1 to 10 collect i)
みたいにiを1から10の範囲でなにかをすることは出来るのに
(loop for i from 10 to 1 collect i)
みたいな書き方は出来ないけどこれと同じことはloopマクロで出来ない?
0736デフォルトの名無しさん
2014/03/16(日) 01:20:52.40ID:/lHtCGezでいい?
0737デフォルトの名無しさん
2014/03/16(日) 01:23:47.28ID:eFgBNCjOland of lispのloopマクロ周期表にもあったのに見逃がしてた
助かったよありがとう
0738デフォルトの名無しさん
2014/03/17(月) 01:40:49.93ID:RttHywCL0739デフォルトの名無しさん
2014/03/19(水) 04:12:32.03ID:g+2MOTll何か大きな変更ありました?
パッケージが色々変わったという噂は聞くのですが
0740デフォルトの名無しさん
2014/03/23(日) 16:44:04.75ID:WrP7umWrそれとも何か違いがあるのでしょうか
0741デフォルトの名無しさん
2014/03/23(日) 16:52:59.01ID:ZhYebgxz> floor converts its argument by truncating toward negative infinity;
> truncate converts its argument by truncating toward zero;
0742デフォルトの名無しさん
2014/03/23(日) 17:18:35.55ID:yZpn4CJQ'((4 a) (1 ab) (1 a) (3 c))
のような二つのリストに対して
equalなものだけを抽出したリスト
'((1 a) (4 a))を返したいのですが
lispらしいやり方ってどういうものですか?
0743デフォルトの名無しさん
2014/03/23(日) 18:16:39.97ID:R1nWQ7zs0744デフォルトの名無しさん
2014/03/23(日) 18:22:29.36ID:yZpn4CJQお、おそろしい...(笑)
そんなに簡単にできるとは...
0745デフォルトの名無しさん
2014/03/23(日) 18:43:49.82ID:wmMizYQuintersection について、注意点が二つ。
1. 順序は保持されない。
2. リストに重複要素がある場合、結果のリストにも重複が含まれるかもしれないし、
そうでないかもしれない。
http://www.lispworks.com/documentation/lw51/CLHS/Body/f_isec_.htm
> If one of the lists contains duplicate elements, there may be duplication in the result.
例えば:
(intersection '(a b a) '(a))
;=> (A A)
(intersection '(a) '(a b a))
;=> (A)
Common Lispには他にもリストの要素を集合と看做して扱う一通りの函数が揃っているので、
覚えておくと役立つと思うよ。
CLHS: Section 14.1.2.2 Lists as Sets
http://www.lispworks.com/documentation/lw51/CLHS/Body/14_abb.htm
0746デフォルトの名無しさん
2014/03/23(日) 18:51:36.80ID:yZpn4CJQなるほど、、注意します。
一覧のページ、助かります!
ありがとうございます。
0747デフォルトの名無しさん
2014/03/23(日) 19:40:17.68ID:WrP7umWrありがとうございます。知りませんでした。勉強になります。
0748デフォルトの名無しさん
2014/03/23(日) 22:17:49.62ID:Od1LbvNuどっちかを先に定義しないとダメだけどそれだと先に定義したほうで警告が出てしまう
これをfletやlabelsを使う以外にうまく書く方法はありますか
0749デフォルトの名無しさん
2014/03/23(日) 22:51:07.67ID:l/Ev+gijSBCL なら
(declaim (ftype function g))
とか書くといいよ。
0750デフォルトの名無しさん
2014/03/23(日) 23:03:18.83ID:Od1LbvNudeclaimは型宣言で複雑だと思って避けてましたが省略できるんですね
0751無職
2014/03/24(月) 14:40:40.32ID:02bTSQQcスロットオプションの :initarg :reader :writer など冗長だと思いました。
構造体のコンストラクタやメンバへのアクセサ、型判定関数の
自動生成などは便利だと思うのですが、CLOSはなぜこうなのでしょうか?
いきさつなど、わかる方いますか?
また、CLOSに限らずですが、SETFを徹底的に使いまわすのはなぜですか?
クラスにでも構造体にでもメンバはすべて、
読み出し関数と代入関数の自動生成、以上。
と、してくれたら明快なのにと思ってしまいます。
私が無知なのでしょうか?教えて下さい。
0752デフォルトの名無しさん
2014/03/24(月) 15:13:02.11ID:or0yrghgLisp向けOOPLS群を記述するための最小メタOOPLとして設計された。
だから自動生成するための道具は揃えたから。自動生成が欲しければ自分で書いてねって主義。
みんなでいいの作ったらそれを集めて取捨選択すればLisp向け標準OOPLが出来るだろうと。
かつてのLispがそうだったように。
けどCLOS作ったらCLOSで良くなってしまって後が続かなかった。
自分で書くと言っても難しくない?って疑問への答えがPortable CommonLoops実装。
0753デフォルトの名無しさん
2014/03/28(金) 17:27:22.44ID:32AHAEOu例えば、$を欲しいリードマクロとすると次のように評価されるものです
'(obj1 $obj2 ($obj3) obj4) => (obj1 obj2 obj2 (obj3 obj3) obj4)
0754無職
2014/04/01(火) 10:47:18.75ID:18w+IeRpわかる方いらっしゃいますか?
clispならこうなって、
sbclならああなって、
Clozure CLなら、、、という風に。
探し方が悪いのか辿りつけません。
よろしくおねがいします。
0755デフォルトの名無しさん
2014/04/01(火) 11:10:19.88ID:jRPbDO4g登録されているけど、それに最低ひとつ含まれている、その処理系を示す
シンボルを使う、という解でいいのかな?
0756デフォルトの名無しさん
2014/04/01(火) 12:01:24.92ID:UNDMPLZZ(progn
#+sbcl (print "sbclで実行されるよ!")
#-sbcl (print "sbclで実行されないよ!")
#+(and sbcl clisp) (print "sbclとclispで実行されるよ!")
#+(and win32 (or sbcl ecl)) (print "こんな条件もしてできるよ!"))
0757デフォルトの名無しさん
2014/04/02(水) 19:05:18.14ID:VT3df3PVただし、ワタシを擁護するのよ
/ ̄ ̄ ̄\
/ノ / ̄ ̄ ̄\
/ノ / / ヽ
| / | __ /| | |__ |
| | LL/ |__LハL |
\L/ (・ヽ /・) V
/(リ ⌒ ●●⌒ )
| 0| __ ノ あんたもナメたいんでしょ♪
| \ ヽ_ノ /ノ
ノ ノノ_.\___ _ ノ( ((
( ((/ / ├─-..,
)/ ゝ ¬ ,r一 )
|ノ r" /
/ `y
{ c | c |
ゝ 人 丿
`- ー' \ __,. ィ
ゝ / /
/ ρ /ノ
/ 〈
0758デフォルトの名無しさん
2014/04/05(土) 09:24:45.61ID:bt1jJ+tr0759デフォルトの名無しさん
2014/04/05(土) 15:12:59.06ID:LR1Bc15I(eval (a b c))が展開されて(+ 1 2)にならない。
(eval ‘(,a b c))ならできるんだけど、上の形で展開できるようにするにはどうしたらいいかな。
0760デフォルトの名無しさん
2014/04/05(土) 15:27:08.99ID:8Jv1du8q0761デフォルトの名無しさん
2014/04/06(日) 00:12:54.04ID:yLnxeWdp0762デフォルトの名無しさん
2014/04/06(日) 01:14:16.58ID:axzLjJsV(progv '(a b c d) '(1 + 2 3)
(eval (eql (b a c) d)))が真になるようにしたい。
0763デフォルトの名無しさん
2014/04/06(日) 11:29:16.97ID:ww3yjEEU0764デフォルトの名無しさん
2014/04/06(日) 15:34:12.74ID:SoAcTpCIその俺様evalをマクロで再定義するんだな。
0765デフォルトの名無しさん
2014/04/06(日) 17:22:01.96ID:s8bztINgttp://www.fireproject.jp/feature/common-lisp/details/function.html
0766デフォルトの名無しさん
2014/04/07(月) 10:30:58.34ID:kcDbzeNyへ?
へへへのへ?
まさか、最初から
(define foo
(lamda ()))
だからとか?
0767デフォルトの名無しさん
2014/04/13(日) 21:19:18.03ID:opL5E73o作ったりしているからってホント?
それとも基本的には純粋に道楽で使うものなの?
0768デフォルトの名無しさん
2014/04/13(日) 21:44:45.71ID:mU5oY4uE皆シャイなんだってばよ!
0769デフォルトの名無しさん
2014/04/13(日) 21:48:51.21ID:M5T5p9cM0770デフォルトの名無しさん
2014/04/13(日) 22:00:17.73ID:mU5oY4uEおいらはCommonLispは作り込めないけど己をLisp使いだと思うけどなー
自前CommonLisp作れないと駄目とか言うと世界に何人いるんだろう?
#自前で多倍長整数とかRational表現組むだけで泣けるんですけど
0771デフォルトの名無しさん
2014/04/13(日) 22:05:46.65ID:Wi1Vhylz0772デフォルトの名無しさん
2014/04/13(日) 22:27:31.17ID:CGkCJpU8そう、使おうとする心こそがLISP使いがLISP使いであるためのただひとつの資格さ!
0773デフォルトの名無しさん
2014/04/13(日) 23:04:02.85ID:+E8lLswP0774デフォルトの名無しさん
2014/04/13(日) 23:05:39.98ID:kn+IksNB同じくマクロで使われるVBAもプログラマが使うわけじゃないし。
0775デフォルトの名無しさん
2014/04/13(日) 23:59:56.09ID:eO4xe9Ol0776デフォルトの名無しさん
2014/04/16(水) 01:22:56.76ID:JV30JiXQお前の言うマクロて何よ?
0777デフォルトの名無しさん
2014/04/16(水) 01:34:48.64ID:4SiUGY6uCGオーサリングツールにはLispのってるんじゃね??
0778デフォルトの名無しさん
2014/04/16(水) 05:50:50.47ID:w7+StrcBEmacs Lispとかxyzzy Lispみて
マクロ言語とか言ってるんじゃないのか?VBA持ち出してるし
Lispの意味でのマクロの意味で使っているとは思えないな
0779デフォルトの名無しさん
2014/04/16(水) 18:18:55.45ID:n6/2QqwfLispは組み込みマクロ言語としても使えるが汎用言語だぞ
基本何にでも使える
0780デフォルトの名無しさん
2014/04/16(水) 22:19:02.54ID:unZv5lM60781デフォルトの名無しさん
2014/04/17(木) 01:24:10.54ID:IbvTFaeDおれもlispを知らない頃はそう思ってた
0782デフォルトの名無しさん
2014/04/17(木) 16:51:59.12ID:zyw99q6wいつまでTECO引きずってんだ。
elispに今もあるマクロはdefmacroとkeyboard macroの二つだけ。
elisp infoやemacswikiのglossaryで確認しろ。
0783デフォルトの名無しさん
2014/04/17(木) 17:04:38.50ID:xMLxyHMVemacsのエディタマクロとlispのmacroが混線してない?
0784デフォルトの名無しさん
2014/04/17(木) 17:22:44.64ID:NyU+/LXv今あるのはキーボードマクロだけ。
0785デフォルトの名無しさん
2014/04/17(木) 20:33:44.45ID:xMLxyHMV0786デフォルトの名無しさん
2014/04/17(木) 20:37:34.78ID:zyw99q6w0787デフォルトの名無しさん
2014/04/18(金) 17:15:18.23ID:Tf5Wc60A0788デフォルトの名無しさん
2014/04/18(金) 18:33:29.25ID:32S9ba0jVBもPythonもエディタマクロに使われているけど全否定?
0789デフォルトの名無しさん
2014/04/18(金) 19:08:27.69ID:RLtKHaB0Excelのマクロ言語はVBAであるとか
wzeditorはC言語ライクなマクロ言語を持つとか
そういう意味じゃないからなあ
0790デフォルトの名無しさん
2014/04/18(金) 19:29:41.00ID:32S9ba0jelispはマクロじゃ無いって話の流れからついに一週してしもたかんじやね。
0791デフォルトの名無しさん
2014/04/18(金) 19:42:43.89ID:Mcdvxl1Memacs lispではLispのMacroが使用できる
emacsにはKeyboard Macroと呼ばれるキー入力シーケンスを保存して再現する機能がある
emacsの名前の由来になったMacroとは、かつてテキストエディタTECO上で動作する特殊なマクロ言語でemacsが実装されたことによる
上記四つのMacroは全部別のモノ
emacsの話を出すとMacroがややこしくなる
0792デフォルトの名無しさん
2014/04/18(金) 21:29:22.37ID:RJBDeLhqelispみたいな本格的なプログラミング言語のコードをマクロとは言わない。
0793デフォルトの名無しさん
2014/04/18(金) 21:31:08.69ID:RJBDeLhqもはや死語に近いだろうな。
0794デフォルトの名無しさん
2014/04/18(金) 23:11:58.90ID:GBzJyQo40795デフォルトの名無しさん
2014/04/19(土) 10:31:46.12ID:SVxJm38+>マクロって命令の羅列のこと。
より正確には、「拡張操作をパッケージ化したもの。またはその機能」
プログラミング言語での「操作」を、命令の羅列で表現する事がよく有るという事。
何に(言語、ツール)言及しているかによって、「拡張操作」の対象が変わるというだけ。
0796デフォルトの名無しさん
2014/04/19(土) 13:56:07.37ID:z/3w4FOmA name (possibly followed by a formal�arg�list) that is equated to a text or symbolic expression to which it is to be expanded (possibly with the substitution of actual arguments) by a macro expander.
This definition can be found in any technical dictionary; what those won't tell you is how the hackish connotations of the term have changed over time.
The term `macro' originated in early assemblers, which encouraged the use of macros as a structuring and information-hiding device.
During the early 1970s, macro assemblers became ubiquitous, and sometimes quite as powerful and expensive asHLLs, only to fall from favor as improving compiler technology marginalized assembler programming (see�languages of choice).
Nowadays the term is most often used in connection with the C preprocessor, LISP, or one of several special-purpose languages built around a macro-expansion facility (such as TeX or Unix's [nt]roff suite).
Indeed, the meaning has drifted enough that the collective `macros' is now sometimes used for code in any special-purpose application control language
(whether or not the language is actually translated by text expansion),
and for macro-like entities such as the `keyboard macros' supported in some text editors (and PC TSR or Macintosh INIT/CDEV keyboard enhancers).
0797デフォルトの名無しさん
2014/04/19(土) 18:57:11.15ID:2TBNSLSb0798デフォルトの名無しさん
2014/04/20(日) 02:33:59.70ID:jJiPXZnf「パッケージ管理システム」の"パッケージ"に限定しない話だろ?
0799デフォルトの名無しさん
2014/04/20(日) 11:52:28.66ID:ikGZm3gSマクロ化にパックの意味なんてない。
0800デフォルトの名無しさん
2014/04/21(月) 02:27:11.46ID:fGRnx6yv教えて下さい。初歩的な質問で申し訳無い。
0801デフォルトの名無しさん
2014/04/21(月) 08:47:59.11ID:lFeTo/mg0802デフォルトの名無しさん
2014/04/21(月) 13:34:42.74ID:bZ7teAnE対話応答システムを作ってみたら
ゲロゲロの悲惨なものになった。ウーム。知らなさすぎる中で創るとわやになるな。
表示はdisplayのみ
キーボードからの入力はreadのみ
0803デフォルトの名無しさん
2014/04/25(金) 18:03:13.94ID:6BEElz8i無料版だけで事足りますか
0804デフォルトの名無しさん
2014/04/25(金) 18:52:24.46ID:NEPb//MGオンライン版を読んでから考えてみたら?
0805デフォルトの名無しさん
2014/04/25(金) 19:11:55.61ID:6BEElz8i継続まで読んだんですが両方一通り読んだことがある人の意見が欲しいんです
0806デフォルトの名無しさん
2014/04/25(金) 19:28:44.13ID:Lv/ArU8B0807デフォルトの名無しさん
2014/04/25(金) 20:07:20.89ID:+TF8D1gCいろいろ気になる奴は書籍買え
0808デフォルトの名無しさん
2014/04/28(月) 10:23:07.40ID:vtVIy75a0809デフォルトの名無しさん
2014/04/28(月) 10:29:57.05ID:mheEU0a2折れは1今、継続、勉強中
なんかわけわからんな、なんだこれは!
と勉強してたら
col is short for collection
;"continuation"
とか出できて
「おお、これが継続ちゅうもんかい!」
とある意味感激した
折れも継続身につけるとこまで来たんやあ
「カーカー、おまえはカラスかい!
人間、なめとんのか!、()ばかりやないカー!」
とリスプに喧嘩売ってた時がなつかしい
0810デフォルトの名無しさん
2014/04/28(月) 21:22:46.02ID:k3LtCAjBClojure……(震え声
0811デフォルトの名無しさん
2014/04/29(火) 17:51:41.95ID:UBPAuzy/0812デフォルトの名無しさん
2014/04/29(火) 19:19:10.84ID:NGZ8LFiM持ち歩いてちょっと汚れや痛みが付いてきた頃の風合いも良い。
0813デフォルトの名無しさん
2014/04/29(火) 21:19:52.31ID:TDR4lejK原典、翻訳本、どっち買ったの?
0814デフォルトの名無しさん
2014/05/04(日) 02:53:08.77ID:6dfFx+9aオーム社から出てる紙の本か電子版を買った方がいいとおもう
onlispの継続の実装ってsbclに入れると警告出まくるよね
実際にはcl-contを使うのがよい
0815デフォルトの名無しさん
2014/05/22(木) 20:36:07.46ID:l7dCfkj7xyzzyで
(ceiling 120)
120
0.0
(ceiling 312 2.6)
121
-2.599988
なぜ後者は120にならないのか、初歩すぎて検索しても見つからない TT
0816デフォルトの名無しさん
2014/05/22(木) 20:56:24.23ID:Fu9GuZb0負の無限大に向けて丸めたければfloor、
0に向かって丸めたければtruncate、(小数部破棄=切り捨て)
一番近い整数に近づけたければroundです。(四捨五入)
0817デフォルトの名無しさん
2014/05/23(金) 01:09:56.04ID:gWh9LE9uコンピュータ上でほとんど小数は近似値だよー、312/2.6=120.00001になっちゃうよー、って絡みの話では?
0818デフォルトの名無しさん
2014/05/23(金) 19:34:03.35ID:WVZoxCv3Lisp的に書くなら関数内で局所関数を定義すると思う
(defun member* (x lst)
(labels ((iter (lst cnt)
(cond ((null lst) 0)
((eq (car lst) x) cnt)
(t (iter (cdr lst) (1+ cnt))))))
(iter lst 1)))
Schemeの名前付きletを移植するとか (Let over Lambdaより)
(defmacro nlet (n letargs &rest body)
`(labels ((,n ,(mapcar #'car letargs)
,@body))
(,n ,@(mapcar #'cadr letargs))))
(defun member* (x lst)
(nlet iter ((lst lst) (cnt 1))
(cond ((null lst) 0)
((eq (car lst) x) cnt)
(t (iter (cdr lst) (1+ cnt))))))
0819デフォルトの名無しさん
2014/05/23(金) 22:01:37.79ID:nAFYJDzWtoroの817からのログを失うのはもったいない
0820移転前ログ 1/6
2014/05/23(金) 23:34:12.06ID:VIeF9Nr2>>817
なるほど 120.00001 になるんだったら120にならないのは当然ですね
近似値になるって事を考えて試行錯誤し
2.6 を 2.6001にすると言う適当な事で対処しました・・・
819 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 08:31:19.17 ID:S9ZhBRpZ
じゃなくて、四捨五入にしないと危ないだろそれ。
820 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 08:41:53.80 ID:UMGtPnEJ
ラウンドやな
821 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 08:58:33.93 ID:UMGtPnEJ
リスプ勉強始めました。まだリスプらしい発想ができず知識もないのですが、C言語でいう静的局所変数の実現方がわからず次のようにしてみました。
もっと、まともな方法有るでしょうか?
;;;隠れ引数cntを利用して静的局所変数を実現する
;;;
;;;目的のatomが与えられたlistの何番目にあるか?
;;;なければゼロを返す
;;;(member* 'c '(a b c d )) -> 3
;;;(member* 'x '(a b c d )) -> 0
(defun member* (x lst &rest cnt)
(if (null cnt) (setq cnt '(1)))
(cond
((null lst) 0)
((eq (car lst) x)
(car cnt))
(t
(member* x (cdr lst) (+ (car cnt) 1)))))
08212/6
2014/05/23(金) 23:35:29.81ID:VIeF9Nr2>>819
なんて説明したら良いんだろう・・・
あるブラゲのカードの攻撃力を求める計算を良くするので
それを簡単に求めれないかと xyzzyのLisp入門見て関数作ったのです
Lv1時数値の0.08倍ずつLvUp毎に増えるので
Lv1からLv?の計算は簡単でした
(defun st計算 (ステ Lv) (decf Lv)
(+ Lv ステ (* Lv 0.08 ステ))
)
しかしLv10とかLv20とかからLv?で躓きました
LvUp済み数値は切り捨てられているため
その数値から計算した数値は必ず求めたい数値以下になる
なのでceilingで切り上げたのですが
丁度の場合 (/ 312 2.6) に落とし穴が><
後、四捨五入も最初試しましたが
Lv3のカードとか低Lv時にまずい結果となりダメでした
もっとスマートなやり方あるのでしょうが
現在問題なく計算出来てるため良しとしています
日本語入ってたり段落が・・・初心者丸出しですが晒します TT
(defun st (ステ 現L L) (decf 現L) (decf L)
(setq X (ceiling (- ステ 現L) (+ 1.001 (* 0.08 現L))))
(+ L X (* 0.08 L X ))
)
ステ = 現在のステータス値
現L = 現在のLv値
L = 求めたいLv値
08223/6
2014/05/23(金) 23:36:52.93ID:VIeF9Nr2>>820
この例ではカウンタを引数渡しでいいと思う。
C言語でいう静的局所変数に相当する機能としてはクロージャがある。
ttp://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp11.html
クロージャを使ってmember*を実装しようとするとこうなる。
(let ((cnt 1))
(defun member* (x lst)
(cond ((null lst)
(setq cnt 1)
0)
((eq (car lst) x)
(prog1 cnt
(setq cnt 1)))
(t (setq cnt (1+ cnt))
(member* x (cdr lst))))))
08234/6
2014/05/23(金) 23:37:31.47ID:VIeF9Nr2(defun member* (x lst &hidden (c 1))
(cond
((null lst) 0)
((eq (car lst) x) c)
(t (member* x (cdr lst) (1+ c)))))
(member* 3 '(1 2 3 4 5) 1) => ERROR
(member* 3 '(1 2 3 4 5)) => 3
みたいな砂糖が欲しい
825 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 11:14:23.71 ID:EZ1gF0i3
>>823
どうも有り難うございます。書いてもらったSample睨みながら勉強してみます。
826 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 11:15:49.84 ID:SQmi/tAr
nthに合わせて0オリジンじゃないと気持ち悪いな。
08245/6
2014/05/23(金) 23:37:56.54ID:VIeF9Nr2>>821,824
Lisp的に書くなら関数内で局所関数を定義すると思う
(defun member* (x lst)
(labels ((iter (lst cnt)
(cond ((null lst) 0)
((eq (car lst) x) cnt)
(t (iter (cdr lst) (1+ cnt))))))
(iter lst 1)))
Schemeの名前付きletを移植するとか (Let over Lambdaより)
(defmacro nlet (n letargs &rest body)
`(labels ((,n ,(mapcar #'car letargs)
,@body))
(,n ,@(mapcar #'cadr letargs))))
(defun member* (x lst)
(nlet iter ((lst lst) (cnt 1))
(cond ((null lst) 0)
((eq (car lst) x) cnt)
(t (iter (cdr lst) (1+ cnt))))))
08256/6
2014/05/24(土) 01:55:42.59ID:78dmexXG>>827
たびたびサンクスです
どうも有り難う
829 : デフォルトの名無しさん[] 投稿日:2014/05/23(金) 11:46:22.83 ID:/J+wV7gv
できるだけ無駄をはぶきたくてライブラリ解読して、書き換えて自前のライブラリつくっていってるんだが、usocketの内部をだれか解説してけろ。
830 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 12:54:38.32 ID:3Eda7qDb
usocket-0.6.1/backend/使ってる実装.lispを参考にしてください。
"U"niversal部分はいらないだろうから。
0826デフォルトの名無しさん
2014/05/24(土) 08:21:03.00ID:DTqC/a46誰も騒がないところを見ると
本当にもう2ちゃんには人居ないんだな
0827デフォルトの名無しさん
2014/05/24(土) 16:21:26.68ID:rBEx7EtVd
0828デフォルトの名無しさん
2014/05/29(木) 01:43:29.39ID:Qf2MT9JXsbclのwindows fork(32bit)をgnupack12.03のhomeディレクトリ直下に置いて使っています
https://github.com/akovalenko/sbcl-win32-threads/wiki
11 MiB ~ sbcl-ci-exe-1.1.4.0.mswin.1288-90ab477-x86.zip: Stand-alone executable for 32-bit Windows (ia32)
OSSはアルミニウムの翼で飛ぶ: gnupack devel 12.03 非公式アップデート
http://aikotobaha.blogspot.jp/2014/05/gnupack-devel-1203.html
です
逆引きCommon Lisp: Quicklispを使う
http://tips.lisp-users.org/common-lisp/index.cgi?Quicklisp%E3%82%92%E4%BD%BF%E3%81%86
のとおりに入力すると
CL-USER(1): (load "./quicklisp.lisp")
CL-USER(2): (quicklisp-quickstart:install)
CL-USER(3): (ql:add-to-init-file)
debugger invoked on a SB-INT:SIMPLE-READER-PACKAGE-ERROR in thread
#<THREAD "main thread" RUNNING {24238849}>:
(ql:add-to-init-file)で止まります
./sbclrcはあらかじめ作成してあります(ただし空)
何か追加で設定しなければならないのでしょうか
0829デフォルトの名無しさん
2014/05/31(土) 20:17:59.71ID:68RLDo7OWindowsでやるなら Clozure CL のがトラブルなくていいと思うよ。
と、アドバイスしつつ、エラーが断片的すぎてよくわからんゾ、といいたい。
0830デフォルトの名無しさん
2014/06/02(月) 14:21:49.03ID:Q2JN1vdj再帰的に呼びだされるって説明があるけどいまいちよく分からない
readでrecursive-pがtだとreadの中でreadが呼びだされてnilだと呼びだされない?
それだとread-charもそうなのかな
ググっても例が見つからないし困った
0831デフォルトの名無しさん
2014/06/02(月) 15:38:30.88ID:H3ihprqshttp://www.mat.uc.pt/~pedro/cientificos/funcional/lisp/gcl_23.html#SEC1349
リーダーマクロ関数からの呼び出しをもっぱら想定しているみたい。
0832デフォルトの名無しさん
2014/06/02(月) 17:26:57.64ID:Q2JN1vdj英語苦手だしよくわからないよ
(set-macro-character #\@
(lambda (stream char)
(list 'quote (read stream))))
で
@(1 2 @(4 5 6))
としたら
(1 2 '(4 5 6))
となるし再帰的に処理されてるんだけどなあ
でも
@(#3=(1 2) @(#3#))
とかだと#3#が無いと怒られるしこれが再帰的に呼ばれないってことなのかな
0833831
2014/06/02(月) 22:02:17.48ID:H3ihprqsじゃあこちらで。
http://g000001.cddddr.org/1289223233
0834デフォルトの名無しさん
2014/06/02(月) 22:20:10.83ID:hdza40A5ありがとう
結局処理系によって動作が微妙に違って有耶無耶になってるね
0835デフォルトの名無しさん
2014/06/02(月) 23:28:47.81ID:Evci24oh内部で再帰的に呼び出すかどうかを呼び出し側で制御するための引数じゃないよ。
この呼び出しはトップレベルでの呼び出しではないう意味のフラグ。
内部処理でこのフラグを使う。
set-macro-character等で定義したコード内でも同様。
分かりにくい名前だけど。
preserving_whitespaceのケースが分かりやすい。
0836デフォルトの名無しさん
2014/06/02(月) 23:43:50.79ID:hdza40A5readに再起されてることを教えるためにrecursive-pをtにするのか
すっきりした
0837837
2014/06/03(火) 00:08:51.38ID:cDJn8bWQこんなものはプログラマーに見せる必要はないのだ。
逆に言うと、CL使う時はプログラマがいつも言語屋に近いことをやらされるというか、
出来るということを想定してないと意味が分かりにくいものが結構ある。
だからCLの本はマニアックなものが多い。言語屋思考が前面に出てる。
0838デフォルトの名無しさん
2014/06/03(火) 00:30:35.72ID:Mp2Ed1vv(defclass foo ()
((a :accessor foo-a)))
(defvar *bar* (make-instance 'foo))
(let ((obj *bar*))
(setf (foo-a obj) 1))
(foo-a *bar*)
=> 1
このとき、obj は let の中で操作されてるのに、何で外側の実態まで変わっちゃうんでしょう??
いっぽうで、
(let ((a (foo-a *test*)))
(setf a 2)
a)
=>2
(foo-a *bar*)
=>1
このときはちゃんとlet内でのみ束縛されてるみたいです。
0839837
2014/06/03(火) 10:40:12.45ID:uQjrLyNgプログラミング入門的な本から始めることをオススメします。
ヒープオブジェクト、バインディング、ポインター辺りのキーワードから。
(setf (foo-a obj) 1)はオブジェクトの破壊的変更ですが、
(setf a 2)はバインディングを変更しただけです。
0840はちみつ餃子 ◆8X2XSCHEME
2014/06/03(火) 15:10:40.12ID:hEzMKve3#include <iostream>
class foo {
private:
int a;
public:
int& foo_a(void);
};
int& foo::foo_a(void) {
return a;
}
foo bar;
int main(void) {
foo& obj = bar;
obj.foo_a() = 1;
std::cout << bar.foo_a() << std::endl;
return 0;
}
0841デフォルトの名無しさん
2014/06/04(水) 13:22:11.96ID:smqAeE2Q便乗でききたいんだけど、
(let ((a b)) ...)
ってした時に、a に束縛されるものが、bそのものなのか、bの参照先なのか、ってどうやって判断するんですか?
0842デフォルトの名無しさん
2014/06/04(水) 13:38:11.71ID:HmwUcklbletの場合、aに束縛されるのは、bを評価した結果だよ
0843デフォルトの名無しさん
2014/06/04(水) 18:07:09.18ID:rdwm0BrHbそのもの
という場合は、シンボルbの意味になるな
値と参照先の対比で言えば
シンボルbが値として有ることはない。あくまでシンボルbは或る値へのポインタを保持する
代入と言わずに束縛という理由の一つでもある
0844デフォルトの名無しさん
2014/06/05(木) 10:31:29.17ID:MplfPKH6バインディングの場合は、シンボルが値を保持してるわけじゃない。
環境上でバインディングされてるだけだ。
0845デフォルトの名無しさん
2014/06/05(木) 10:34:36.82ID:2vI6486Pそうどけどそう読めない文だったかな
0846デフォルトの名無しさん
2014/06/05(木) 16:40:47.76ID:eDcskf88ここは破壊的かどうかよりも、let が何を束縛するかが重要だろ。
0847デフォルトの名無しさん
2014/06/05(木) 16:55:00.43ID:MplfPKH6変数aにsetfしたらaの束縛の変更にすぎないのは同じ。
それより問題なのは「*test*」
0848デフォルトの名無しさん
2014/06/15(日) 13:05:35.20ID:b/Fd0dwYcygwinにClozure Common Lispを入れています
ターミナルからClozure Common Lispを動かして
drakmaをquickloadで入れようとしたらエラーになりました
? (ql:quickload :drakma)
To load "drakma":
Load 1 ASDF system:
drakma
; Loading "drakma"
> Error: Unable to load foreign library (LIBSSL).
> Error opening shared library libssl32.dll : 指定されたモジュールが見つかりません。 .
> While executing: CFFI::FL-ERROR, in process listener(1).
which libssl32.dll や which openssl
でパスが帰ってくるのでそれらへのパスは通っているようです
どうすれば解決しますか?
0849デフォルトの名無しさん
2014/06/15(日) 13:46:45.14ID:yc4x9J1B0850デフォルトの名無しさん
2014/06/16(月) 00:09:49.68ID:mOjr4QnDcffiの仕組みがよく分からないので調べてみます
0851デフォルトの名無しさん
2014/06/16(月) 00:50:05.70ID:E9WcDStGcffi というより cygwin の話。
cygwin 経由でファイル操作しようとした場合、 cygwin のランタイムライブラリは cygwin 上のパスから windows のパスへの変換をかけて処理する。
cygwin 用にビルドされていないアプリケーションは cygwin 上で動かしても cygwin のランタイムを経由しないので、 cygwin 上の設定を必ずしも反映しない。
Clozure にはロードパスを明示して指定するオプションがあるはずなので、それでライブラリの場所を直接に指定するといいと思うよ。
0852デフォルトの名無しさん
2014/06/21(土) 04:07:00.31ID:3WmZPTyQ科学技術計算用のライブラリとしてものすごくよさそうだけど
ダウンロードの項目とかないしまだ開発中なのかな
0853デフォルトの名無しさん
2014/06/23(月) 22:01:30.53ID:/DPPu1fUまたは、ヒントになるウェブ上の文章など
ご存知なら記入していただきたい。
lispは、関数がファーストクラスオブジェクトである。
だから、あーしたりこーしたりできる。
なにをもってファーストクラスオブジェクト
とする条件が整うのですか?
またそうでない場合は何と呼ばれるのですか?
セカンドクラスは存在しますか?
そもそもファーストクラスオブジェクトという存在の
起源はいつ、どこで、だれが発端なのですか?
0854デフォルトの名無しさん
2014/06/23(月) 23:23:47.15ID:sN8Q1H3I印刷できたり、ネットワークで送ったり出来れば、
ファーストクラスオブジェクト。
他のデータとくらべて、なにか大きな制限があれば
ファーストクラスオブジェクトではない。
「大きな」制限がないという意味は、例えば同じオブジェクトを二回送信して二回受信して、
eqにはならないがequalくらいにはなるというような類いのこと。
数字の1ならeqになるけど、リストならeqじゃなくてもいいかみたいな話。
そうでないものをセカンドクラスと呼びたければ呼んでもいい。
単なる英語で特別な意味は無い。
起源はたぶんLispだろう。他にこの手のことが話題になる言語は長い間なかったので。
0855デフォルトの名無しさん
2014/06/24(火) 15:16:59.52ID:5xWJp1EJデータと同じ様に扱えればファーストクラスとのこと。
lispのプログラムとは究極的には
1, 関数の定義
2, 関数の実行(データを与えられて)
なので、すごく自由なんですね。
0856デフォルトの名無しさん
2014/06/24(火) 15:28:20.23ID:JJ61LHPxS式を送って受け手で評価するってこと?
0857デフォルトの名無しさん
2014/06/25(水) 10:16:59.34ID:99OqZGTiあくまでプログラミング言語の表現上でできることによる分類だと理解してるんだけど
まあ厳密な定義がない言葉だから人によって違うのかもしれんが
0858デフォルトの名無しさん
2014/06/25(水) 11:12:08.10ID:Fqus7fR8ネットで贈るって環境込みでクロージャー送らないの意味なくね?
よくわからん
0859デフォルトの名無しさん
2014/06/25(水) 13:21:27.03ID:WPn8ToeQhttp://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E9%96%A2%E6%95%B0
ファーストクラス (第一級) とかの区分は、ALGOL な人の、ALGOL の関数はそうではない、という説明で初出するらし。
http://en.wikipedia.org/wiki/First-class_citizen#History
0860デフォルトの名無しさん
2014/06/25(水) 21:00:35.08ID:APzd6ej5表示的意味論のStracheyさんだな。
0861853
2014/06/25(水) 22:06:41.59ID:bfUMIbrs854さんへ返事をした855も私です。
859を見て驚きました。
まさかウィキペディアに項目があるとは「灯台下暗し」でした。
3つ目のリンク(英語のウィキペディア)を、たどれそうですね。
特にそのリンク先の項目
Historyの、First and second class objects.からはじまる10行分の引用元は
おそらく以下の論文32ページの下の方、
Fundamental Concepts in Programming Languages
https://www.itu.dk/courses/BPRD/E2009/fundamental-1967.pdf
に存在していて疑問のキモに近づけている気がします。
そもそも10行分の引用の後ろにある... [4] この索引4番。
上の論文を含む論文集の様なコレ(ググると出てきました)。
Higher-Order and Symbolic Computation
https://cs.au.dk/~hosc/vol13/contents.html
これは、何なのでしょうね?
サブタイトルに
Volume 13, Issue 1/2 (April 2000) Special Issue in memory of Christopher Strachey
とあり、860さんも指摘するこの名前が、インメモリーオブの後にある。
とりあえずは、皆様のおかげです。ありがとうございました。
2ちゃんてスゴイ。
0862デフォルトの名無しさん
2014/06/28(土) 10:41:12.09ID:KURc4R4I0863デフォルトの名無しさん
2014/06/28(土) 14:25:31.24ID:3k/D2XmS0864デフォルトの名無しさん
2014/06/28(土) 19:12:53.31ID:KURc4R4Iいくしかねぇだろうが
0865デフォルトの名無しさん
2014/06/28(土) 19:24:15.63ID:6G7Aa+Xt\ |.|
ト\ /| ト
| トヽ / | | ト
| | トヽ\/| | | ト /
| | | ト\≧三ミゞ=イ/
ム彡''´ ̄ ̄  ̄ ヽ{__..
/ V´
ノ __ ',
,. == y ̄, __、\_ ) 世 界 的 で す も ん ね
|i }-| ゝ二 |/ ̄ ̄ /ニ,l
ヽ__ノ/ヾ _ ノ > }}
/ >≦'__ し / 乗 る し か な い
Vて二オカ (_,/}
Yこ二ノ!!| } こ の ビッ グ ウ ェ ー ブ に
Y⌒ 从 ∠)
从从从トミ _.ィニ二 ̄丶
ミ三三彡 ' ´ \ \
/ \ヽ
/ ミ;,. ', ',
| _ _ __ \',.',
ノ! | V7\ ´/
/ l /_ゝ| ト >__/ /
| ヽン ´ ヽー'
i| l
|:! ヽ |
| ト、 `ミ, l
0866デフォルトの名無しさん
2014/06/28(土) 23:41:57.76ID:WOd9pXsxILCってなに?ググっても分からんかった
0867デフォルトの名無しさん
2014/06/29(日) 00:29:18.53ID:GtYVa+TG0868デフォルトの名無しさん
2014/06/29(日) 11:37:18.19ID:gwVdKsQj"ILC Lisp" でググれば直ぐに出てくるんだが
情報リテラシー能力が欠如しているのかw
0869デフォルトの名無しさん
2014/06/29(日) 13:50:05.95ID:kMofjRV8後出しはぶざま。
0870デフォルトの名無しさん
2014/06/29(日) 18:31:52.01ID:jxL17uOJ0871デフォルトの名無しさん
2014/06/29(日) 18:37:51.84ID:rSPW55Gi後出しとかw
0872デフォルトの名無しさん
2014/06/29(日) 19:39:51.80ID:gwVdKsQjILCだけで絞れなかったら次に思いつくのはLispだろ?
ここは何のスレだと思ってるんだよwww
0873デフォルトの名無しさん
2014/06/29(日) 21:51:23.27ID:vXcDBpcb0874デフォルトの名無しさん
2014/06/29(日) 22:25:15.24ID:jxL17uOJ0875デフォルトの名無しさん
2014/06/29(日) 23:42:13.17ID:3G00hY9C>>868
ありがとう
確かに情報リテラシー能力は足りてないと思う
人の検索キーワード見てると勉強になってる
0876デフォルトの名無しさん
2014/06/30(月) 07:38:38.04ID:YSr0d58i0877デフォルトの名無しさん
2014/06/30(月) 07:52:00.62ID:f7mL4vcKエキスパートたちは楽しんできてくれ
「驚異のエロトーク、君の彼女を越える?!人工彼女三号アケミチャン、今、Lispの可能性がここに具現する!!」
とか発表されるのかなあ
0878デフォルトの名無しさん
2014/06/30(月) 08:33:15.78ID:S7PnoB7N0879デフォルトの名無しさん
2014/06/30(月) 13:51:44.06ID:7FoUPvVO信仰心!
あ、くず
そりゃ、くず
まじ、くず
くずの3乗!
0880デフォルトの名無しさん
2014/06/30(月) 21:55:50.88ID:aNL5GHv40881デフォルトの名無しさん
2014/06/30(月) 22:30:33.88ID:WSGOXIMG0882デフォルトの名無しさん
2014/06/30(月) 22:40:49.62ID:r0HKSexR0883デフォルトの名無しさん
2014/06/30(月) 22:42:26.17ID:r0HKSexRそんなんをさらっと日本語メールで送ってくるなって思った
0884デフォルトの名無しさん
2014/06/30(月) 23:09:54.32ID:aNL5GHv4モントリオールだとフランス語わからんと生活ままならん
英語だけだとちょっといぢめ入るんだよあそこ。
非常口とか全部フランス語
0885デフォルトの名無しさん
2014/07/02(水) 02:56:41.39ID:lG4D7CHThttp://ja.wikipedia.org/wiki/%E3%83%95%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%AE%E8%A8%80%E8%AA%9E%E6%94%BF%E7%AD%96
0886デフォルトの名無しさん
2014/07/03(木) 01:21:37.94ID:/42+xN9zエディタなのかそれともlimpやlispboxみたいなIDEなのかとか
それと文字入力の組合せはiBus+Anthyよりuim + Anthyの方がいいのでしょうか?
iBus+Anthyでvim使おうと思うとキーボードで日本語入力への切替が出来ず、とても面倒だったので皆さんどうしてるのでしょうか?
0887デフォルトの名無しさん
2014/07/03(木) 06:44:45.68ID:9NgNqjgv0888デフォルトの名無しさん
2014/07/03(木) 10:43:30.36ID:m1ee/I8B日本語入力は ddskk
0889デフォルトの名無しさん
2014/07/03(木) 11:04:55.82ID:dl+rXwegemacsでし、日本語はATOKXなんだけど最近の環境に移行するのにはATOKマンドクサイ
0890デフォルトの名無しさん
2014/07/03(木) 11:28:14.55ID:CYaxL5870891デフォルトの名無しさん
2014/07/03(木) 15:19:42.61ID:zQnvFAz40892デフォルトの名無しさん
2014/07/03(木) 15:35:47.42ID:dl+rXweg0893886
2014/07/04(金) 05:55:47.78ID:a+Sm66UTlispboxを使わずにemacsでプログラミングしてるってことですか?
windowsではlispboxインストールしたけど、linuxもとりあえずemacsでやったほうがいいのかな
0894デフォルトの名無しさん
2014/07/05(土) 06:39:46.85ID:uz94kqwx俺はemacs+slime+auto-complete+ac-slime+paredit+popwin
0895デフォルトの名無しさん
2014/07/06(日) 17:40:45.12ID:pTttFthd書き終わってみてなんか実際の使いどころが思いつかなくて休日を無駄にした気分です
日記
0896デフォルトの名無しさん
2014/07/06(日) 18:06:04.92ID:aspDWAp6副作用許容するCLだと使いどころあんまないでしょ。
Loopマクロ完全理解とかの方がよっぽどお得、というかあれ完全に使いこなす人見てるといつも羨望のまなざししちゃう。
0897デフォルトの名無しさん
2014/07/06(日) 20:36:26.95ID:pTttFthdそうですね、やっぱりloopで自然に書けるところはそれで書いちゃうので
あと関数的でも名前長いとなんかいまいち読みやすくなった感がなかったように感じました
単純な関数の組み合わせは結構すっきり書けるようになったんでまあ無駄ではなかったと思いたいです
(-> last-page (+ i) (- 1))
(->> url (ppcre:split "/") #'last #'car (ppcre:split "\\.") #'cadr)
0898デフォルトの名無しさん
2014/07/07(月) 09:48:07.76ID:6na4sCwWemacs24からスコープの扱いが変わったんじゃなかったっけ?
0899デフォルトの名無しさん
2014/07/07(月) 12:36:51.74ID:KxgY/iodスコープがレキシカルな変数、レキシカル変数のことでしょうかね?
0900デフォルトの名無しさん
2014/07/07(月) 14:10:16.29ID:eRMueaNX従来の動的スコープから変更になったわけじゃなくて、デフォルトは動的で、
何らかの指定をするとレキシカルスコープになる
動的スコープの関数からレキシカルスコープの関数を呼ぶこともできるし、逆も可能
ただしこのスレで今話題になってるのは、emacsでlisp使うと言っても、
emacs lispを使うわけじゃなくて外部のlispをemacs上で使う話でしょ?
0901デフォルトの名無しさん
2014/07/07(月) 16:09:01.70ID:dUgWwPpk昔のlispマシンみたいにclosure構文にしたほうがよかったと思う
0902デフォルトの名無しさん
2014/07/09(水) 01:21:29.27ID:/8/fqD8z0903デフォルトの名無しさん
2014/07/10(木) 13:47:07.90ID:HShQwxB+そうか。
ってのむかつくんだけど
なにがむかつくってスレ開いて新着レスキタ - .∵・(゚∀゚)・∵. - ッ!!とかおもったら
そうか。
だよ
結構イライラするからやめてくれ
でまた
そうか。
だろ?やめろ
0904デフォルトの名無しさん
2014/07/10(木) 14:54:39.60ID:np89A9e3そうか。ってレスつくの期待してんの?
0905デフォルトの名無しさん
2014/07/10(木) 18:53:26.27ID:b8uVYlJ50906デフォルトの名無しさん
2014/07/11(金) 11:00:59.19ID:tKSWivTs創価
0907デフォルトの名無しさん
2014/07/11(金) 11:11:41.71ID:VpP/Y7620908デフォルトの名無しさん
2014/07/11(金) 14:25:42.24ID:9W9RigEI0909デフォルトの名無しさん
2014/07/13(日) 23:35:05.18ID:Nc6h/Xfp1 yyyy-mm-dd
...
n yyyy-mm-dd
というテキストから、各行を名前に持つディレクトリをn個
生成するのはどうしたらできますか?
iphoneで撮影してdropboxのcamera uploadsに溜まっている
写真を整理しようと思い、
ls -h
cut -c-11
uniq
を調べながら使って冒頭のテキストを作るところまでできたところです。
誘導や「それならそもそもこういうやり方をすればもっと上手い」とかでも構いません。
よろしくおねがいします。
ubuntu 11.20です。
0910909
2014/07/13(日) 23:46:36.68ID:YbxcgjxG移動するうまいやり方ってありますか?
ファイル名の頭がyyyy-mm-ddとなっているのと、exif情報があります。
当方プログラミングはほとんどわかりませんが、以上よろしくおねがいします。
0911デフォルトの名無しさん
2014/07/14(月) 00:02:20.05ID:AQ9cUEpThttp://peace.2ch.net/test/read.cgi/unix/1404204950/
0912909
2014/07/14(月) 00:42:44.66ID:QYx8kOpF0913デフォルトの名無しさん
2014/07/15(火) 06:15:03.36ID:59xep59Q0914デフォルトの名無しさん
2014/07/16(水) 10:51:34.91ID:zYYJ84NZ0915デフォルトの名無しさん
2014/07/16(水) 12:28:38.67ID:AJ7uNsXY0916デフォルトの名無しさん
2014/07/16(水) 13:21:29.13ID:Y98WTq58cl-fadとかを使って頑張るよりもシェルスクリプトを書いたほうが早いと気づいた。
こうして僕はまた一つ、大人になった
0917デフォルトの名無しさん
2014/07/16(水) 20:49:53.01ID:4BExK8tUパスネーム作るのもめんどくさいしファイルディレクトリ操作関連の関数名前長いし
0918デフォルトの名無しさん
2014/07/16(水) 21:02:18.92ID:3aowtiLrマウス使えない人?
0919デフォルトの名無しさん
2014/07/16(水) 21:17:26.36ID:4BExK8tU単に名前長いとコードが横に長くなるし見た目がごちゃごちゃして嫌いなんだよ
まあ何をする関数なのかがわかりやすいのは利点だけど
0920デフォルトの名無しさん
2014/07/16(水) 21:23:10.16ID:3aowtiLr横に長いと読めないと言いたいだけ?
0921デフォルトの名無しさん
2014/07/16(水) 21:40:20.88ID:4BExK8tUおやすみ
0922デフォルトの名無しさん
2014/07/16(水) 21:45:24.08ID:2gGxGOPYpythonとかでもシェルスクリプトより冗長になるけど
0923デフォルトの名無しさん
2014/07/16(水) 22:13:02.78ID:4BExK8tU厳密に比較したわけじゃないけど
不満があるなら自分でなんとかしろってのがLispなので少し考えてみるか
0924デフォルトの名無しさん
2014/07/17(木) 03:31:45.45ID:9RVv4Ujx0925デフォルトの名無しさん
2014/07/17(木) 14:29:12.84ID:zA0F2tu6ただでさえ情報が少ないんだから何とかしてよう
0926デフォルトの名無しさん
2014/07/18(金) 01:09:52.06ID:vTAgXceiぐぐったら普通に出てきたぞ
0927デフォルトの名無しさん
2014/07/18(金) 01:26:15.65ID:FVnspc/u0928デフォルトの名無しさん
2014/07/18(金) 21:55:16.76ID:BDBW/1YIslimeの上で動かすのは無理だから端末で動かしてるけどエラーが出たら表示が乱れるし
間違ってる箇所の特定が困難
0929デフォルトの名無しさん
2014/07/19(土) 11:16:55.15ID:0HpoPve0端末でやってるなら、stferrをファイルにリダイレクトとかで出来ないかな?
もしくは、teeとか使ったらどうだろう
0930デフォルトの名無しさん
2014/07/19(土) 13:47:07.28ID:Cah7tT4pこれで少し楽になりそう
0931デフォルトの名無しさん
2014/07/20(日) 16:36:48.15ID:c+tbRQVcUnix 系の OS だと
1) slime/emacs 以外の端末を一枚開く
2) 上記端末で, tty コマンドを使って tty デバイスを調べる
3) 端末の shell 上で, sleep 86400 とかの長時間寝るコマンドを発行[1]
4) slime 側で "/dev/pty/<N>"(上で調べた tty デバイス) をオープンして
*standard-input* と *standard-output* を切り替えて実行
てな, ことをやっても slime からデバッグできないかな?
試したわけじゃないけど...
[1] 通常 shell は read で寝てるので, 端末からの入力を shell に食われる
shell が read で寝ないようにするために sleep 実行しておく
0932デフォルトの名無しさん
2014/07/21(月) 03:54:58.65ID:BUK6QChG0933デフォルトの名無しさん
2014/07/21(月) 13:13:57.09ID:1PP1q7+H(let ((args (remove-if
(lambda (arg) (member arg lambda-list-keywords))
(mapcar (lambda (arg) (if (consp arg) (car arg) arg)) lambda-list))))
`(lambda ,lambda-list (declare (ignorable ,@args)) ,@body)))
こんなのを書いたんですが、lambdaみたく#'(iglambda (x) x)でエラーにならないようにする方法ってありますか
普段は#'つけなければいいだけなんですが、他のマクロで#'(iglambda (x) x)みたいに展開されちゃうとエラーになっちゃうので
0934デフォルトの名無しさん
2014/07/24(木) 22:33:25.53ID:YIQWfIP00935デフォルトの名無しさん
2014/07/29(火) 21:07:54.86ID:lnaxbNJ+0936デフォルトの名無しさん
2014/07/29(火) 22:17:13.99ID:HvnnWmTYたぶんlispレベルでも相当するスペシャル変数があるんじゃないか
0937デフォルトの名無しさん
2014/07/29(火) 23:00:40.88ID:FSsnLBrEttp://sourceforge.net/p/clisp/clisp/ci/default/tree/src/edit.lisp
ソース見るとわかるけど
(defparameter *editor* "your-editor")
これで行けるんじゃね?
0938デフォルトの名無しさん
2014/07/29(火) 23:31:36.89ID:lnaxbNJ+おお!
さっきダウンロードしてソース検索したのに見つからなかったから諦めてました
まさか.lispに書いてあったとは
0939デフォルトの名無しさん
2014/07/30(水) 03:14:08.25ID:ymOvaeuAドイツ語だあ、嬉しいなあ
Liefert den Namen des Editors
かっこええなあ
わかりやすいなあ
しね英語!やで
0940デフォルトの名無しさん
2014/07/30(水) 18:22:47.39ID:g1c+taJs0941デフォルトの名無しさん
2014/07/30(水) 18:34:08.84ID:fUMWxb+n0942デフォルトの名無しさん
2014/07/31(木) 22:09:56.94ID:2NEmh/Ubプログラマの人ってUS配列使ってる人多いよね?
0943デフォルトの名無しさん
2014/07/31(木) 22:27:02.03ID:e1kodKvW0944デフォルトの名無しさん
2014/08/01(金) 02:08:14.90ID:ARdX3qTq無変換はHyper,変換はSuperに当てるのが普通んでもってaの左横はCtrl
親指の自由度って凄いからCtrlを変換キーに当てるのは妥当なんだけどやっぱりalt以外にsuper,hyperは欲しい
漢字変換?んなものはTCODEに限る
0945デフォルトの名無しさん
2014/08/01(金) 05:31:22.48ID:XLYd3eQb0946デフォルトの名無しさん
2014/08/07(木) 11:28:13.48ID:HQ4TEMVi0947デフォルトの名無しさん
2014/08/07(木) 20:11:39.49ID:E8mbsF1hターミナルでスクリプトを実行し
入力している文字を表示させない状況で入力させて
その値を取得したいのですが可能でしょうか?
標準入力からは*standard-input*を使えば値を取れることは分かりました
シェルのreadコマンドの、read -s PASSのような機能を想定しています
0948デフォルトの名無しさん
2014/08/08(金) 13:46:48.16ID:qccrcm1Uread -sを使ってキー入力を受け取り
lispスクリプトに引数として文字列を渡せば良いことに気づきました
失礼しました
0949デフォルトの名無しさん
2014/08/08(金) 14:08:50.77ID:LVetnHZi0950デフォルトの名無しさん
2014/08/20(水) 10:47:40.69ID:5yBlZ/IM学生のうちにLisper名乗ってみたいから使ってみる
モチベ向上のためにアカデミック以外の現場でLisp使う、便利なのか先輩方教えて下さい
0951デフォルトの名無しさん
2014/08/20(水) 10:53:31.03ID:8CcAuI4d0952デフォルトの名無しさん
2014/08/20(水) 11:25:51.51ID:d2pZ5gy3Lisperはなろうとしてなるものではないのだ、なっちまうのだよ
0953デフォルトの名無しさん
2014/08/20(水) 11:27:18.03ID:5yBlZ/IMそうすか 覚える必要はないからいいけど(´・ω・`)
ただ数式処理なんかでMathematicaやMaximaみたいな関数型言語に密接な環境には常日頃お世話になってるんで本格的に特性を理解したいんだよね
0954デフォルトの名無しさん
2014/08/20(水) 11:34:36.71ID:Ar4bcC3qLISP - Wikipedia
関数型言語に分類されるが、ほとんどのLISP方言は、変数への束縛だけでなく、代入やデータ構造の破壊的操作も可能という、手続き型言語の性格ももっている。
Mathematica - Wikipedia
プログラミング言語としての Mathematica は、項書き換えを基本として関数型と手続き型の両方をサポートするマルチパラダイム・プログラミング言語である。
Mathematica は、ウルフラムらが1979年頃に開発した Symbolic Manipulation Program を起源とし[5]、プログラミング言語 ALGOL・LISP・ APL、および、数式処理システム Macsyma の影響を受けている[6][7]。
0955デフォルトの名無しさん
2014/08/20(水) 23:59:45.83ID:7ZTzP0p/ワラタw
確かに自分もそうだ
0956デフォルトの名無しさん
2014/08/28(木) 21:56:13.74ID:+EU13Tgrリスパーって言われたいのに
ぜんぜんなれない俺
0957デフォルトの名無しさん
2014/08/28(木) 22:30:25.06ID:Nk/Y1yrfあんたが必要とされてないか、どっちかだろう
0958デフォルトの名無しさん
2014/08/28(木) 22:56:00.95ID:Gw1dAD8rマトリックスのモーフィアスが言ってただろう、感じろ!
0959デフォルトの名無しさん
2014/08/29(金) 08:10:40.48ID:IguOVOzJバカにレスされたくない
0960デフォルトの名無しさん
2014/08/29(金) 08:11:23.52ID:IguOVOzJはぁい
0961デフォルトの名無しさん
2014/09/04(木) 23:27:36.02ID:IshzZhlV外側のマクロに対して内側のマクロから例外を出して書き換えるやつなんだけど
(iterator (x '(1 2 3 4))
(collecting acc x))
みたいなマクロからcollectingのところで例外を出して
iteratorで例外を補足してから
(iterator (x '(1 2 3 4))
(let ((acc nil))
(collecting acc x)))
みたいにコードを変えて例外処理のリスタートでcollectingの処理に戻るみたいなやつ。
0962デフォルトの名無しさん
2014/09/04(木) 23:47:41.63ID:IshzZhlVhttp://qiita.com/guicho271828/items/2852196ddf4c48ff0e3c
0963デフォルトの名無しさん
2014/09/05(金) 00:27:28.37ID:xOBKBssIhttp://blog.practical-scheme.net/shiro?20121227b-lisp-hare-tortoise
0964デフォルトの名無しさん
2014/09/08(月) 10:14:08.39ID:VPTlsC/M0965デフォルトの名無しさん
2014/09/09(火) 12:08:12.95ID:YU9mY7gPなんでマクロの展開は
macroexpand -> eval -> macroexpand ...
みたいな構造になるんだろう?そっちの方が作りやすいのかな?
lispの実装をしたことがある人は一杯居るだろうからその辺教えてほしいな
0966デフォルトの名無しさん
2014/09/09(火) 13:13:33.09ID:xSuWWikN0967デフォルトの名無しさん
2014/09/09(火) 14:21:39.62ID:3jKRZ45aいいなこれ、ほしい
0968デフォルトの名無しさん
2014/09/09(火) 14:53:22.81ID:YU9mY7gP自分が思っていた事としてマクロはコンパイル時に実行される関数としか考えていなかった。
なんで当然common lispの関数で使える機能(例外、ライブラリとして実装したバックトラック機能)もマクロでも使えると思っていた。
だから何故コンパイル時と実行時でできることが違うようになってるのか気になった。他のlispどうなってるのかとかね。
0969デフォルトの名無しさん
2014/09/09(火) 17:52:36.36ID:FZ79e7BAそれもあるよ
0970デフォルトの名無しさん
2014/09/09(火) 20:12:58.42ID:/ZjY2rNK0971デフォルトの名無しさん
2014/09/09(火) 23:44:21.53ID:OOYpvr4f0972デフォルトの名無しさん
2014/09/17(水) 02:49:53.97ID:C4OaNAqf(defun foo ()
(let ((x #'(lambda () x)))
(funcall x)))
としたときに (foo) を評価すると 123 が返ることを期待したのですが、
実際に SBCL で評価してみると、
* (foo)
#<FUNCTION (LAMBDA () :IN FOO) {10044EEACB}>
のように関数が返ります。
1 行目の defparameter の代わりに setq にすると期待通り 123 が返るのですが、
動作の違いがわからなくなってしまいました…。
どなたかわかる方教えて頂けますでしょうか?
0973デフォルトの名無しさん
2014/09/17(水) 07:07:25.82ID:qtKu3tUsこれが原因. defparameterで宣言すると, ダイナミック変数になる. こういうミスを減らすために*x*のような名前を付けるマナーがある.
トップレベルでsetqだと大丈夫だがこれも微妙. (define-symbol-macro x 123)しても良いがこれも微妙だが、この場合はこっちのが良いか.
0974デフォルトの名無しさん
2014/09/17(水) 21:06:13.39ID:C4OaNAqfありがとうございます。スペシャル変数とレキシカル変数の違いが十分理解できてなかったです。
(funcall x)により#'(lambda () x)が評価されて、xの値が返るのですが、
xはdefparameterでスペシャル変数になっているため、そのときに参照しているxの値、
つまり#'(lambda () x)が返っているようですね。
0975デフォルトの名無しさん
2014/09/18(木) 12:08:50.47ID:esVVPZkH0976デフォルトの名無しさん
2014/09/18(木) 12:33:40.03ID:gl5GJBEB0977デフォルトの名無しさん
2014/09/18(木) 13:56:39.79ID:jUxkvtnX「環境」の一時上書き。
0978デフォルトの名無しさん
2014/09/19(金) 00:10:23.14ID:5yTgoIyx0979デフォルトの名無しさん
2014/09/19(金) 06:46:54.26ID:O3QZpvkM基本,単に大域変数としてつかわれる.
便利なのは関数の引数をずらずら列べなくても良いところじゃない? 他の言語と一緒だね.
0980デフォルトの名無しさん
2014/09/19(金) 10:37:36.39ID:X120Ti+Xマルチスレッドの時も振る舞いは大域変数と全く異なる。
0981デフォルトの名無しさん
2014/09/19(金) 11:58:41.45ID:mBwsz/nFほうほう
0982デフォルトの名無しさん
2014/09/19(金) 20:42:10.71ID:7xkfrLWDおっぱいあると捗るのに
オマンコご褒美なら捗るのに
0983デフォルトの名無しさん
2014/09/19(金) 22:52:50.09ID:O3QZpvkM逆では? ローカルに未束縛な状況は,スペシャル変数でしか作れない.
マルチスレッドでのスペシャル変数の振舞いは規格の外だから,処理系間である一定のコンセンサスがあるだけ.
スペシャル変数と対置して語られる大域変数とは何を指しているのか.トップレベルのsetqは未定義だし.
基本,と前置きしてるのに.
0984デフォルトの名無しさん
2014/09/20(土) 00:28:02.56ID:rTgfsjb+レス数が950を超えています。1000を超えると書き込みができなくなります。