トップページtech
984コメント303KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2013/02/20(水) 15:31:16.00
Lisp Schemeスレでは恥ずかしくて聞けないようなことを質問したり、
Lisp 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.65
< `∀´>ニダー
0003デフォルトの名無しさん2013/02/21(木) 01:11:18.80
初心者です
0004デフォルトの名無しさん2013/02/21(木) 01:15:25.68
小心者です
0005デフォルトの名無しさん2013/02/21(木) 01:21:09.62
>>3
そうか
0006デフォルトの名無しさん2013/02/21(木) 05:59:51.54
404 Blog Not Found:(笑) - 書評 - Land of Lisp
http://blog.livedoor.jp/dankogai/archives/51854832.html
0007デフォルトの名無しさん2013/02/21(木) 10:06:46.88
NetwalkerにCL乗せたいなぁ
ポケットサイズのlispマシン欲しい
0008デフォルトの名無しさん2013/02/21(木) 22:59:55.53
>>7
Netwalkerは普通のlinuxマシンじゃないの ?

Vaio Pとかいろいろ買ったけど
Macbook Airが一番無難で可搬性の高いUnix(lispの動くプラットフォーム)
なんじゃないかと現状思う。

AndroidがLinuxだと思ってNECのLife Touch Note買ったけど
shellなくてわろた
000982013/02/21(木) 23:02:51.05
8はNetwalkerは普通のLinuxだからCommon Lispは簡単に
インストールできるんじゃないの ?という意味で書きました。

わかりにくい書き方ですみません
0010デフォルトの名無しさん2013/02/21(木) 23:18:26.42
common lispの入門にon lispを読んでるんだけどしらない関数ばかりで入門には向いてない気がしてきた
他に系統的に学べるサイトはないかな
0011デフォルトの名無しさん2013/02/21(木) 23:34:49.50
本ってどの言語にしてもそこそこ自力で何か書けるレベルで読まないとあんまり続かない気がする
0012デフォルトの名無しさん2013/02/21(木) 23:50:39.13
practical common lispをさっと読んでからCLtL2を読み始めるとよいと思う
0013デフォルトの名無しさん2013/02/22(金) 00:15:08.83
英語読めないから本買わないと駄目なのか
結構値がはるしキツいな
0014デフォルトの名無しさん2013/02/22(金) 00:19:45.76
ちょっと前最初のほうだけ英語で読んでみたけど
そこまで難しい英語じゃなかったので
読もうと思えば読めるレベル
0015デフォルトの名無しさん2013/02/22(金) 17:29:22.11
>>11
その点手続型言語は基本的な文法をちょろっとやれば
そこそこ自力で書き始められて、壁にぶち当たったら本を読んで、
とできるけど、lispはそれが難しかった
0016デフォルトの名無しさん2013/02/22(金) 17:57:40.92
他にもともと別の手続き型言語を知ってたとかではなくて?
0017デフォルトの名無しさん2013/02/23(土) 00:31:27.17
最初はcar、cdrとか再帰だけで色々練習問題解いてたけど
それだけでも色々できて面白かったけどなあ
0018デフォルトの名無しさん2013/02/23(土) 01:57:48.09
>>15
手続き型・・・小学校で習う表記に似てるからじゃね?
0019デフォルトの名無しさん2013/02/23(土) 02:10:07.98
おれはPAIPを勧めるがなぁ。
あと、lisp をできるようになりたいだけなら日本語版でもいい。でも、凄いエンジニアになりたいのなら、英語力は必須だよ。
逆に考えればlispと英語が同時に学べるチャンスだ。
0020デフォルトの名無しさん2013/02/23(土) 13:34:08.23
>>10
xyzzy Lisp Programming
http://www.geocities.jp/m_hiroi/xyzzy_lisp.html
0021102013/02/23(土) 13:58:28.39
>>20
やっぱりこれがいいのか
読んでみる、ありがとう
0022デフォルトの名無しさん2013/02/23(土) 16:08:30.02
緑のナマモノ本、Amazonで発売日に在庫切れか
でもまさか予約分しか入荷して無かったってオチじゃないよな
0023デフォルトの名無しさん2013/02/23(土) 16:23:40.08
そんなもんじゃない?発売当日に在庫ありになってないのは珍しくない
予約してた人は今日届くのかな
0024デフォルトの名無しさん2013/02/23(土) 22:55:28.84
予約してたけど届くには月曜…
0025デフォルトの名無しさん2013/02/24(日) 04:01:59.03
新宿の紀伊国屋とかに行けばあるかな。
しかし正直コードのある本は電子書籍で出してほしい。
0026デフォルトの名無しさん2013/02/24(日) 12:05:25.33
emacs + slime の環境なんですが
C-c C-d h と同じことを他のライブラリでやれるようにするものってありませんかね?
0027デフォルトの名無しさん2013/02/24(日) 13:14:51.50
木のそれぞれの値を2倍にする関数を教えてください。。。
(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
>>26
ドキュメント方面で共通の仕組みがdocstringくらいしかないから、
C-c C-d dくらいしかないと思う。CCLだとdocstring表示されんけど。
それ以上が欲しいならレッツ自作。

>>27
自分が知る限りない。レッツ自作。
0031デフォルトの名無しさん2013/02/24(日) 13:39:36.10
MaximaがLispで書かれていると聞いてちょっと感動した
0032デフォルトの名無しさん2013/02/24(日) 14:05:07.09
>>27
初心者の俺も練習がてら書いてみた。

(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
>>27
(defun f (x)
(if (listp x)
(mapcar #'f x)
(* 2 x)))

(mapcar #'f '((1 2) 3))
0034デフォルトの名無しさん2013/02/24(日) 14:11:53.35
なるほどmapcarで再帰するなんて方法があるのか・・・
0035デフォルトの名無しさん2013/02/24(日) 14:14:36.81
> mapcarで再帰する
定石だと思うぞ
0036デフォルトの名無しさん2013/02/24(日) 14:25:29.92
mapcarとかreduceとか既存のものを利用していかに楽するかを考えるんだ。
働きたくないでござる。早くニートになりたい。
0037デフォルトの名無しさん2013/02/24(日) 14:41:47.35
他人のソースを殆ど見ないので全然定石を知らないなあ
0038デフォルトの名無しさん2013/02/24(日) 19:38:17.41
>>29,30,32,33
ありがとうございます!
mapcarで再帰は自分も知らなかったので眼から鱗です。
0039デフォルトの名無しさん2013/02/24(日) 23:38:24.35
よくある木の再帰だと思うけど
0040デフォルトの名無しさん2013/02/25(月) 00:23:46.97
マクロとかXMLとかの処理を書くときに嫌ってほど出て来るな。
0041デフォルトの名無しさん2013/02/26(火) 01:44:26.04
sbclのwindows fork版ライセンスについて質問します
https://github.com/akovalenko/sbcl-win32-threads/wiki
ここで入手できるバイナリと自作のlispソースを一緒に配布するとき、
どのようなライセンスにしなければならないのでしょうか
sbcl自体は public domain + BSD-style licenses のようですが…
0042デフォルトの名無しさん2013/02/26(火) 18:17:17.01
Land of Lisp原著持ってたから立ち読みで済ませるつもりだったのだけど
リストリテラルを書きかえるのはよくないって注に書いてあって
ドキっとしたのでついレジに持っていってしまった

あと訳した人が元ヤンキーである可能性が微レ存
0043デフォルトの名無しさん2013/02/26(火) 22:13:22.48
はぁ?Shiroさんだぞ?
0044デフォルトの名無しさん2013/02/28(木) 00:35:27.69
>>41
昔書いたやつどぞー。責任は持てんので、あくまでも参考程度に。

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。
0045412013/02/28(木) 01:27:01.72
>>44
ありがとうございます。わかりました。
0046デフォルトの名無しさん2013/02/28(木) 16:16:19.02
slimeのC-M-,に割り当てられているslime-previous-locationとはどういう関数なのでしょうか?

説明には "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
(setq parameter '(`(,a ,b) `(,c ,d) `(,e ,f)))
というリストがあったとして

`(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.36
無駄がない形に最適化してくれてるんじゃないの。知らんけど。
0049デフォルトの名無しさん2013/03/02(土) 23:11:53.84
>>47
仕様はコレ。
http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm
処理系は好きに最適化してよいそうです。
0050デフォルトの名無しさん2013/03/02(土) 23:29:30.98
>>48,49
ありがとうございます。`(`(,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
`(`(,a))は`((,a))と等価じゃなくね?

(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.64
わけがわからないよ
0053デフォルトの名無しさん2013/03/09(土) 23:17:33.27
CCL 1.9出たで。

公式
http://ccl.clozure.com/

リリースノート訳
http://qiita.com/items/968166dde6a820ebb97e
0054デフォルトの名無しさん2013/03/11(月) 21:57:44.02
java等のようにクラスの中にメソッドを定義する
オブジェクト指向ができる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
>defclass class-name ({superclass-name}*) ({slot-specifier}*) ({method-specifier}*)
ここまで決まってたら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
Javaのようにクラスの中でメソッドを定義するマクロを作りました

(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
先輩方すげっwww
簡単にできちゃうのか。。
なんでこういう方向でいかないんですかね?
今のoop慣れした世代にはこっちの方が親近感あるから
とっつきやすいと思うんだけど
0058デフォルトの名無しさん2013/03/12(火) 20:55:24.88
マクロは大勢で共同作業するときには C++ のテンプレート並みに諸刃の刃ぁぁぁ
なんです
0059デフォルトの名無しさん2013/03/12(火) 21:00:59.93
諸刃の剣っていいたかったのか?
0060デフォルトの名無しさん2013/03/12(火) 21:31:28.50
テンプレよりもオペレータオーバロードによくたとえられる気がするけど
0061はちみつ餃子 ◆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
>>62
再帰を使わずに書きたいのね、多分
こんな感じだろうか。

(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
CLはマルチパラダイム言語というが、
いったんCLOSの機能を使い出すと副作用でまくりで
関数プログラミングとの共存など不可能のように思える。
0065デフォルトの名無しさん2013/03/14(木) 14:37:36.56
純粋関数型パラダイムはちょっと特殊だからなぁ
0066デフォルトの名無しさん2013/03/14(木) 21:10:25.24
>>65
式と文が別物ってところに山ほど違和感がある >いわゆる普通の言語
# 高級アセンブラの C は除く
0067デフォルトの名無しさん2013/03/14(木) 21:47:43.67
その C だって、GCC なら ({ ... }) で囲めばなんでも式になるぞw
そもそも、代入が式だし。
0068デフォルトの名無しさん2013/03/14(木) 22:12:50.89
> GCC なら ({ ... }) で囲めばなんでも式
いや、それは極論だし
0069デフォルトの名無しさん2013/03/14(木) 22:47:11.34
H
0070デフォルトの名無しさん2013/03/15(金) 19:38:17.80
land of lisp まだ来ねー
0071デフォルトの名無しさん2013/03/15(金) 21:24:32.91
昔のDOSの表計算アプリみたいな画面を
REPLで実現してくれるライブラリってない?
0072デフォルトの名無しさん2013/03/16(土) 00:51:53.81
>>71
*curses.so あたりを ffi すればいいのではあるまいか?
0073デフォルトの名無しさん2013/03/16(土) 09:18:52.30
cl-ncursesっていうのを見つけた
ありがとう
0074デフォルトの名無しさん2013/03/16(土) 14:14:13.11
CLOSで名前の衝突に気を使うのがかったるい
たとえば、パッケージ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
read-lineで入力を求める際に
初期値として任意の値をセットしておくことはできませんか?
0076デフォルトの名無しさん2013/03/16(土) 19:16:56.09
>>75
どこかのユーティリティライブラリにありそうですけど、
自分の使ってるものには見当たらなかったので書いてみました。
こういう感じので良いですか?

http://paste.lisp.org/+2WZC
0077デフォルトの名無しさん2013/03/16(土) 19:42:23.35
>>74
自分ならだるさを許容するかパッケージプリフィックスで手を打つと思う。
0078デフォルトの名無しさん2013/03/16(土) 21:33:03.10
>>76
ありがとうございます。
やりたいことは初期値をセットしておいてその一部を書き換えてread-lineさせる
という動作なので、"default value"が表示されてる状態にしたいのです。
0079デフォルトの名無しさん2013/03/16(土) 21:49:19.62
これに対するマクロor関数を作っていただけますか?
以下の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
(defmacro nnnnnnth (obj &rest indices)
(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からデータを取ってこようとしているからです

厚かましいお願いですが、XMLで属性からデータを取得できるやり方も教えていただけないでしょうか
0082デフォルトの名無しさん2013/03/16(土) 22:07:48.91
>>80
完璧です!ありがとうございます
畏れ入りました

自分のレベルがあまりに低いからかもしれませんが
なぜこんな短時間でマクロを考えつけるのでしょうか?
やっぱり経験ですか?
0083デフォルトの名無しさん2013/03/16(土) 22:16:15.56
>>78
自分はあまりその辺りに詳しくないのですが、おそらく端末制御の領分になると思います。
難易度がかなり上がりますが、それでもその方式にこだわりがあるのなら、
>>72-73で挙がっている情報を調べてみると手がかりが掴めるかもしれません。
0084デフォルトの名無しさん2013/03/16(土) 22:44:43.37
>>79
XMLのツリーを操作するときにリストとして直に扱うのはあまりお勧めしません。
(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.01
何も考えず(ql:quickload "xpath")したら
ttp://common-lisp.net/project/plexippus-xpath/examples.html
これ入ったのでこれ使うといいと思う。依存関係でClosure XMLも入るし
0086デフォルトの名無しさん2013/03/16(土) 23:06:11.04
>>84
>>85
なるほど。勉強になります。
それらを踏まえ、もう一度作りなおしてみます。

ご教授ありがとうございました!
0087デフォルトの名無しさん2013/03/16(土) 23:25:06.33
逆引きCommonLispに結構例が載ってるんで、参考にどうぞ。
こういう例が欲しいとか、そういうのがあったら教えて下さい。

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
>>87
ありがとうございます。早速ブックマークに登録しました。
0089デフォルトの名無しさん2013/03/17(日) 07:44:14.36
>>78,83
ncurses に libform ってのがくっついてて,
こいつの set_field_buffer() とかをffiして使えば何とかなるのかな?
後は自前で作りこむくらいしか思いつかない
0090デフォルトの名無しさん2013/03/17(日) 09:20:40.67
>>83,89
ヒントありがとうございます!
その辺を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
(defun mkstr (&rest args)
 (with-output-to-string (s)
 (dolist (a args) (princ a s))))
こういうこと?
0093デフォルトの名無しさん2013/03/18(月) 09:45:42.47
それです!ありがとうございました
0094デフォルトの名無しさん2013/03/18(月) 18:07:16.64
thunkってどういうときに使うんですか?
0095デフォルトの名無しさん2013/03/18(月) 18:41:36.92
感謝したとき
0096デフォルトの名無しさん2013/03/18(月) 18:49:13.61
thanks!
0097デフォルトの名無しさん2013/03/18(月) 21:46:13.46
>>94
めちゃくちゃ大雑把に言えば
「今評価しないで後で評価されるかも知れない式」
全般のことじゃね?
0098デフォルトの名無しさん2013/03/18(月) 23:14:34.67
CLOSあんま好きじゃない派の人って
やっぱ構造体使うんですか?それともリスト?
0099デフォルトの名無しさん2013/03/19(火) 00:32:11.47
両方使ってる気がします。
0100デフォルトの名無しさん2013/03/20(水) 15:00:45.68
質問です。

value に格納されている文字列

"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
>>100
それEmacs Lispだと思うんで、Emacsのスレで聞いてください。

てーか、そういうときはM-x describe-functionで関数を調べてみてください。
"Replace all matches for REGEXP with REP in STRING."って書いてます。
0102デフォルトの名無しさん2013/03/23(土) 01:58:05.19
list*とconsは全く同じものですか?
0103デフォルトの名無しさん2013/03/23(土) 02:31:29.01
consは2引数やで
0104デフォルトの名無しさん2013/03/23(土) 09:47:49.14
たしかにそうでした
0105デフォルトの名無しさん2013/04/07(日) 23:35:25.85
みなさんは作った実行ファイルの大きさとか気にならないですか?
0106デフォルトの名無しさん2013/04/08(月) 04:27:40.74
>>105
なんで気になるの?
自分はMegademoで4Kとか64Kでも作らない限り気にもしないけど
0107デフォルトの名無しさん2013/04/08(月) 16:44:33.11
>>105
16G とか 32G の主記憶が当たり前の時代に, 組み込み物とか >>106 のような
用途でもない限り, 実行ファイルの大きさとか気にしてもしょうがないじゃん.
組み込み物だって, 1G とか 2G の主記憶積んだやつあるのに...
0108デフォルトの名無しさん2013/04/08(月) 17:12:57.85
コンパイラが吐き出す実行ファイルの大きさよりも、実行時のメモリ消費量のほうが気になります。
01091/22013/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/22013/04/09(火) 01:47:29.07
コンパイル&実行結果


CL-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.18
>>110 コンパイラが賢くないとしか言えないんだが...
disassemle すると, 型宣言した方は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.96
http://permalink.gmane.org/gmane.lisp.steel-bank.devel/17159
GSoC2013
ガチリストになってて面白いけど、どれぐらい応募あるのかな。
01141092013/04/10(水) 01:29:29.92
>>111
>>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
>>114
> 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
>>114
ごめん。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.25
(A B C D E) のcadddrがDになるのは何故ですか?
0118デフォルトの名無しさん2013/04/26(金) 20:44:58.23
(car (cdr (cdr (cdr '(A B C D E))))
(car (cdr (cdr '(B C D E))))
(car (cdr '(C D E)))
(car '(D E))
D
0119デフォルトの名無しさん2013/04/26(金) 20:55:17.77
cdrのcdrのcdrのcarだから
逆順に読めばいい
0120デフォルトの名無しさん2013/04/26(金) 22:39:28.61
カドゥドゥドゥラァ
0121デフォルトの名無しさん2013/04/28(日) 13:39:23.14
コマンドラインから
$ sbcl --script sample.lisp

と実行するとき、sample.lispの中の
quicklispたちは別ファイルに分けたりするべきなのですか?

あまりプロジェクトに関わったりしたことないので
ファイル配置の勘所がわからないです
0122デフォルトの名無しさん2013/04/28(日) 13:58:00.87
Quicklispたちっていうのは(ql:quickload :foo)みたいな式のこと?
sample.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
>>122

とても理解できました

例えば、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.24
>>123

ASDFファイル(sample.asd)に、実行時に必要になるライブラリを
明記しておくのが多いということでしょうか?
0126デフォルトの名無しさん2013/04/28(日) 17:56:12.85
>>124
スクリプトでは自然だと思います。

>>125
プロジェクトという言葉があったり、ファイル構成を気にしてらしたので、
一定以上の規模のソフトウェアも作りたいのかも、と思い、追記しました。
スクリプト用途ならASDFに対応する必要はないです。

ASDFに対応すると便利なのは、ソフトウェアのビルドに手順が必要だったり、
書いたソフトウェアを配布したいときです。ビルド用にcompile-fileするスクリプトを書いたり、
マクロを使うときにeval-whenで:comple-toplevel指定したりって面倒じゃないですか。
そういうときに利用するとその辺りを良きに計らってくれるので楽です。
makeとかrakeとかmvnとかantとかその辺に該当します。
0127デフォルトの名無しさん2013/04/28(日) 23:01:16.97
>>126
とてもよくわかりました

ありがとうございました!
0128デフォルトの名無しさん2013/05/09(木) 20:17:14.37
ブラウザゲーム作りたいです(´・ω・`)
0129デフォルトの名無しさん2013/05/09(木) 22:15:46.82
ゲーム内部のバックエンド部分なら問題なく書けると思うから頑張れ。
ユーザインターフェイス(画面周りとか操作周りとか)は、
多分JavaScriptの力を借りることになる。
0130デフォルトの名無しさん2013/05/09(木) 22:47:45.81
Common Lisp から JavaScript のコードを生成するとかどうよ。
0131デフォルトの名無しさん2013/05/11(土) 20:15:46.77
>>130 parenscript の話?
0132デフォルトの名無しさん2013/05/24(金) 11:45:04.97
ついでにnode.jsも使わせて
0133デフォルトの名無しさん2013/05/29(水) 02:04:18.66
lispをjavascriptに変換してからv8で動かしたら
stalinより高速なんじゃないのかな
0134デフォルトの名無しさん2013/05/29(水) 03:05:21.97
事前に型付けしまくってAOTコンパイルで頑張るCommon Lispと
実行時情報を元にJITコンパイラが頑張るJavaScriptだと、
アプローチ的にはむしろ対極にある気がするけど
0135デフォルトの名無しさん2013/05/29(水) 04:19:34.86
v8はプロファイラで速度のボトルネック探してから
そこだけ型推論かけてNativeにコンパイルするそうだ
0136はちみつ餃子 ◆8X2XSCHEME 2013/05/29(水) 12:08:35.87
asm.js は Common Lisp 的アプローチって言えるんじゃね。

>>133
JavaScript って毎回ソースコードを読込むところからスタートして実行するところまでやらなきゃならないから、
コンパイル・最適化が実行時間に含まれるわけで、あまり気合入れた最適化も出来ないんだよな。
つまり、めいっぱい頑張って最適化すればいいわけじゃなくて、
全体として一番よくなるほどほどのところを目指すトレードオフの見極めが重要な JS は
Common Lisp とは目標が違うから高速化のために組合わせるのはうまくない気がする。
0137デフォルトの名無しさん2013/05/29(水) 12:15:29.28
asm.jsはrabbit compiler的だよ。
部分言語である小さいcore言語を設定してて。

それからJITは気合入れたい所に目一杯気合入れることが可能なフレームワークです。
実行時プロファイルが使えるので。
0138デフォルトの名無しさん2013/06/07(金) 01:56:27.51
何でもいいので仕事くだされ
twitter.com/g000001
0139デフォルトの名無しさん2013/06/07(金) 01:59:19.02
PHPでよければ
0140デフォルトの名無しさん2013/06/08(土) 21:18:23.73
(A B C D)は
なんで (A . (B . (C . D))) じゃなく (A . (B . (C . (D . nil)))) なの?最後の nil は何なの?
0141デフォルトの名無しさん2013/06/08(土) 21:32:26.56
長さ0のリスト
0142デフォルトの名無しさん2013/06/08(土) 21:33:48.63
nilはなにもないことを表す特殊な記号
() と書くこともある
0143デフォルトの名無しさん2013/06/08(土) 21:36:06.91
乳首じゃないからな
0144デフォルトの名無しさん2013/06/08(土) 21:59:34.33
コンスセルはcar部とcdr部とで構成されており
cdr部に別のコンスセルを入れることでリストを構成する
また、そのようなコンスセルの連鎖がリストであるので
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.42
いや、nilそのものの意味を訊いてるわけじゃなくてdana
0146デフォルトの名無しさん2013/06/08(土) 22:04:11.74
(A . (B . (C . (D . nil)))) →  (A . (B . (C . (D . ()))))

ということだ
01471442013/06/08(土) 22:05:18.70
ああ、全然ちがう!!
恥ずかしくて死にそう・・・orz
0148デフォルトの名無しさん2013/06/08(土) 22:09:38.51
最後がなぜnilなのかは、リストの定義がそうだからとしか言いようがない。
01491442013/06/08(土) 22:10:00.86
(B (C . D))と勘違いしてた><
0150デフォルトの名無しさん2013/06/08(土) 22:13:52.89
(A B) は (A . B) であり (A . (B . nil)) ではない
(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.66
3つ以上並んだやつの略記リストは最後はnil
0152デフォルトの名無しさん2013/06/08(土) 22:20:23.30
Lispは難解だな
0153デフォルトの名無しさん2013/06/08(土) 22:33:31.41
(A . (B . C)) は A と (B . C) の2つで構成されるリストと解釈される つまり略式は (A (B C)) となってしまう
(A . (B . (C . nil))) は A と B と C と nil の4つで構成されるリストと解釈される
0154デフォルトの名無しさん2013/06/08(土) 22:37:08.95
同様に (A . (B . (C . D))) は (A B (C D)) のことになる (A B C D)にはならない
0155デフォルトの名無しさん2013/06/08(土) 22:38:31.42
(A) => (A . nil)
で、
(A (B C)) => (A . ((B . (C . nil)) . nil))
であってる?
0156デフォルトの名無しさん2013/06/08(土) 22:41:43.13
>>154
違う
×  (A B (C D))
○ (A (B (C D)))

(A B (C D)) は (A . (B . ((C . D) . nil)))
0157デフォルトの名無しさん2013/06/08(土) 22:43:29.82
なんだかオラ混乱してきたぞ
01581552013/06/08(土) 22:46:45.98
>>151,153,154
は違うように思う。
(A . (B . (C . D))) は (A B C . D)
0159デフォルトの名無しさん2013/06/08(土) 22:49:35.87
厳密なS式なんて時代遅れ
0160デフォルトの名無しさん2013/06/08(土) 22:59:16.31
Lisp (programming language) - Wikipedia, the free encyclopedia
https://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
>>150
(a b)は(a . (b . nil)) だよ。
(a . b)はあくまで(a . b)だ。
そもそも(a)が(a . nil)なのに、要素数が2のときだけ例外になんかせんよ。
0162デフォルトの名無しさん2013/06/09(日) 00:58:48.17
(A B)と(A . B)は別物ってことか
0163デフォルトの名無しさん2013/06/09(日) 01:09:24.59
lispの論文読めば分かる

Recursive Functions of Symbolic Expressions
http://www-formal.stanford.edu/jmc/recursive/node3.html
0164デフォルトの名無しさん2013/06/09(日) 01:26:29.46
リストとは2つの値のペアのことであり、3つ以上は無い
0165デフォルトの名無しさん2013/06/09(日) 06:42:57.75
盛り上がっているのかと思ったらパルプンテかかってる。
0166デフォルトの名無しさん2013/06/09(日) 12:02:22.61
(A . (B . (C . D)))
(A . (B . (C . (D . nil))))
それぞれについて一要素づつ表示する関数でも書いてみたら?
どっちが便利か?
どっちを採用したくなるか?
0167デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
CFFIの使い方解かりやすい日本語サイトか
簡単な例など何方か教えていただけますか?
0168デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
>>167
CFFI - Common LISP users jp
cl.cddddr.org/index.cgi?CFFI
0169デフォルトの名無しさん2013/07/03(水) NY:AN:NY.AN
>>168
ありがとございます。
0170デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
On Lispのtrec関数が単なる遅延評価の言い換えなだけな件
0171デフォルトの名無しさん2013/07/09(火) NY:AN:NY.AN
そうか。
0172デフォルトの名無しさん2013/07/12(金) NY:AN:NY.AN
Lisp in Summer Projectsに参加してる方、いますか?
0173デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
日本語版のLet Over Lambdaは難しくて読めないっていうか、
読んでるとだんだんイライラしてくる。
0174デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
気合で読んだぜ
0175デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
そうか。
0176デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
CLOSあったらいらないよね
plamdaとか
>Let Over Lambda
0177デフォルトの名無しさん2013/07/17(水) NY:AN:NY.AN
まあマクロの使用例ってところじゃねーの
0178デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
it this self
もうアナフォリックマクロに使えそうな名前が残ってない
0179デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
下のunwind-protectのプロテクト節の部分で、ストリーム sはきちんと閉じられるでしょうか?
それとも、変数lazyが他の値に再束縛され、sがガーベジコレクトされるまで開いたままなのでしょうか?
0180デフォルトの名無しさん2013/07/18(木) NY:AN:NY.AN
CL-USER> (let ((s (make-string-output-stream)))
(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
そのコードだと unwind-protect から抜けた時点で close されるよ。
(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.AN
:-(
0184デフォルトの名無しさん2013/07/20(土) NY:AN:NY.AN
:-(8-D)
0185デフォルトの名無しさん2013/07/31(水) NY:AN:NY.AN
common lisp処理系はエラー時に行番号を教えてくれないんだけどどうやってエラー箇所を特定すればいいの?
0186デフォルトの名無しさん2013/07/31(水) NY:AN:NY.AN
あやしげなとこにprint・・・
0187はちみつ餃子 ◆8X2XSCHEME 2013/07/31(水) NY:AN:NY.AN
処理系によってはデバッグモードに突入したりするんじゃないの。
処理系によって賢い機能がある場合もあると思うので、もうちょっと詳細を書くとよいかも。

マクロがあると「行番号」で表すのが難しかったりするんだよね。
マクロ定義の方が間違ってるかもしれないし、
そのマクロ定義もマクロで生成されてるかもしんない。
エラーが発生したときにどこを示していいんだか処理系には判断付けるのが難しい。
0188デフォルトの名無しさん2013/08/01(木) NY:AN:NY.AN
clispとかsbclの話なんだけどちょっとした失敗なのに行を教えてくれないせいで無駄に時間食うんだよ
行番号はマクロ展開後でいいと思うんだけど何が駄目なのかな
C言語もそうだし自作処理系でもそうやったけど特に不都合はなかったな
0189デフォルトの名無しさん2013/08/01(木) NY:AN:NY.AN
自分が言いたいのはなにかいい方法があれば教えてくださいってことね
0190デフォルトの名無しさん2013/08/01(木) NY:AN:NY.AN
>>188
slime 使えば?
エラーが起こった箇所のソースに色けて
^N とか ^P でその場所にカーソルが飛んで
該当エラーの内容も表示してくれるぞ
0191デフォルトの名無しさん2013/08/01(木) NY:AN:NY.AN
>>188
slime 使えば?
エラーが起こった箇所のソースに色けて
^N とか ^P でその場所にカーソルが飛んで
該当エラーの内容も表示してくれるぞ
0192デフォルトの名無しさん2013/08/01(木) NY:AN:NY.AN
それはslime-compile-defunでコンパイルした時のことなの?
自分はslime-eval-defunで評価してそれをreplから実行してたんだけど
それよりコンパイルしたほうがいいのかな
0193デフォルトの名無しさん2013/08/02(金) NY:AN:NY.AN
関数コンパイルするタイミングでコードの位置覚えてくれるんで、
編集中やデバッグ中に定義してる位置にジャンプしたりできる。

てーか、マクロ展開後の行番号とか教えられたりしても途方に暮れるだけだと思うな。
Seriesとか試せば分かるけど、とんでもない行数に展開されることとかあるし。

行番号なくてもスタックトレースあるからそれでコンディション発生した関数は分かる。
あとは適当な位置にbreakつっこんで止めたり、printで出力したりすりゃ結構すぐ分かるよ。
0194デフォルトの名無しさん2013/08/02(金) NY:AN:NY.AN
>>187
処理系によっては、じゃなくて、Common Lispは規格でデバッガの存在が要求されてる。
ブレークポイントとかステップ実行とかディスアセンブラとかも同様。
0195はちみつ餃子 ◆8X2XSCHEME 2013/08/02(金) NY:AN:NY.AN
>>194
存在が要求されてるのは知ってたけど、
挙動がどの程度細かく規定されてるのかは知らなんだ。
ステップ実行まであるのか。 CL さんマジかっけー。
0196デフォルトの名無しさん2013/08/03(土) NY:AN:NY.AN
common lisp
slimeいれておおすごいと思った所で熱が覚めて辞めてしまい1年ほど経過

マクロとか使いこなせると楽しいんだろうけれど、何かそのために面白い題材とか無いものか
0197デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
何も言わずにOn Lispを読み通せ
0198デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
プログラミングのために本読むの嫌いだけど読むか・・
0199デフォルトの名無しさん2013/08/04(日) NY:AN:NY.AN
ふつーにwebアプリ作るといいよ。動的に変更できるのが面白い。
0200デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
lispbox入れて始めてみたんだが、
コンパイルして関数を実行したら日本語が文字化けする
普通にslimeに直に入力したら日本語でも出力されるのに
こんな状況
i.imgur.com/A0pGoRn.png
0201デフォルトの名無しさん2013/08/05(月) NY:AN:NY.AN
Shift JIS を使うのは情弱
0202デフォルトの名無しさん2013/08/06(火) NY:AN:NY.AN
Allegro CLをEmacsからfi:common-lispで使っても日本語が文字化けする
なんでだろう
0203デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
http://jp.franz.com/base/technology_japanese.html
ここら辺は読んだ?
0204デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
>>203
直接alispを起動して日本語のシンボルや文字列を扱うのは問題ないんだ
0205デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
ttp://fast-uploader.com/file/6931362683171/
こんな感じ
0206デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/ACLTutorial.html#sec13
設定はこんな感じなの?
0207デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
>>206
うん 一番下のset-buffer-process-coding-systemが怪しくて消したりしたけど
起動した時のメッセージが微妙に変わったくらいだった
0208デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
;;; Note: The emacs-mule external-format, used to transmit international (non-ascii) characters for the emacs-lisp interface, is not being loaded due to lack of heap space in this
;;; Lisp session.
起動した時にこんなメッセージ出るんだけど英語苦手でよくわからん
なんかexpress版だとヒープ領域の制限で日本語化は無理とかかな
0209デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
clojureのREPL使っている人がいて
分からない関数carがあったら
(doc car)としてポンポン調べていたのですが
common lispにはこういう関数ありませんか?
0210デフォルトの名無しさん2013/08/07(水) NY:AN:NY.AN
(documentation 'car 'function)

SLIME使ってたらキー操作でHyperSpec引ける
0211デフォルトの名無しさん2013/08/08(木) NY:AN:NY.AN
>>210
2画面で片方ブラウザにしてるんだけど、新規タブでばんばん開いちゃうのやめる方法ないかしら
0212デフォルトの名無しさん2013/08/08(木) NY:AN:NY.AN
firefoxみたいに引数で新規タブかどうか指定できるブラウザ使うか、w3使うか。
0213デフォルトの名無しさん2013/08/11(日) NY:AN:NY.AN
(setq x 1 y 2 z 3)
(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.AN
evalは一番外の環境を使って評価するんじゃなかったっけ
0215デフォルトの名無しさん2013/08/11(日) NY:AN:NY.AN
>>213
HyperSpec のevalのとこに書いてるよ
何故そうなってるか、という質問だとおれは答え難いなぁ。そんなものだ、と思って使ってた。詳しい人解説ヨロシク
0216はちみつ餃子 ◆8X2XSCHEME 2013/08/11(日) NY:AN:NY.AN
前スレの 407 から 414 あたりで同じような話題が出てるよ。
02172132013/08/12(月) NY:AN:NY.AN
>>214,215,216
ありがとうございます。
前スレ見ました。最適化をしやすくするためにローカル環境を使わないようですね。
ちょうど去年の今頃の自分のレスでした。

(ICFPの時だ(そして今も))
0218デフォルトの名無しさん2013/08/12(月) NY:AN:NY.AN
なんだと?
0219デフォルトの名無しさん2013/08/12(月) NY:AN:NY.AN
お前は相変わらず成長しないな
0220デフォルトの名無しさん2013/08/12(月) NY:AN:NY.AN
ワロタ
そんなことあるもんなんだな
0221デフォルトの名無しさん2013/08/13(火) NY:AN:NY.AN
eval はあんまり使ったことないな
0222デフォルトの名無しさん2013/08/16(金) NY:AN:NY.AN
(find-if (lambda (lst) (find-if #'oddp lst)) '((2 4 6 8) (2 1 3)))
;=> (2 1 3)

ここで1を返すにはどう書くのがよいでしょうか?
02232222013/08/16(金) NY:AN:NY.AN
(defun trec (rec &optional (base #'identity))
  (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))
02242222013/08/16(金) NY:AN:NY.AN
(defun find-if-rec (fn lst)
  (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.AN
いきなりそっちにいくのか(困惑)
02262222013/08/16(金) NY:AN:NY.AN
そっち、とはもっと単純な方法があったということでしょうか
0227デフォルトの名無しさん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
ちょっとお尋ねします。arrayの一部を新たにarrayを作らずに切り出すことってできないんでしょうか?
新たにnewしないで、もとのarrayを直接参照するsubseqを探しているんですが、そういったものはないんでしょうか?
0229デフォルトの名無しさん2013/08/20(火) NY:AN:NY.AN
元のリストが(0 1 2 3 4)だったとして、これはデータ構造を正確に表すと
(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.AN
と書いてみたがarrayの話か・・
0231デフォルトの名無しさん2013/08/20(火) NY:AN:NY.AN
あれ〜?
0232デフォルトの名無しさん2013/08/20(火) NY:AN:NY.AN
>>230
レスありがとうございます。そうなんです、arrayの話なんです。

>>231
(^^;

とりあえず、自己解決しました。
displaced-arrayでいけそうです。make-arrayのオプションとは、盲点でした。
0233デフォルトの名無しさん2013/08/21(水) NY:AN:NY.AN
緑のモンスターの本買いました。
コーディングは適当なエディタに書いてclispにペースト実行ってやってるんですが、もっといいやり方ないですか?
Emacsにslime?がいいのですかね?
0234デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
鉄板→emacs&slime
0235デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>233
slime の環境は quicklisp というライブラリ管理ツールを使って簡単にできるよ
0236デフォルトの名無しさん2013/08/22(木) NY:AN:NY.AN
>>234
おお、やっぱりこの組み合わせが1番なんですね。
本読んでると特にそのあたりの記載がなくて、最初はTerminalからclisp立ち上げて直に長文コード打ってました。(コピペで、ですが)
emacsでコード書いて保存してslimeで実行って感じがデファクトなんでしょうか?

>>235
quicklisp初めて知りました。これは管理が楽になりそうでいいですね。
私の環境はMacなのでbrewでclisp入れてますが、slime使うなら管理も含めてquicklispがいいですね。移行します。
ご教示ありがとうございました。
0237デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
(defun add (x y)
(+ x y))←ここでctrl+xを押し、ctrl+eを押すと関数が定義される

(add 8 5)←ここでctrl+xを押し、ctrl+eを押すと13が表示される

書きながらどんどん実行していく。
02382362013/08/23(金) NY:AN:NY.AN
>>237
便利過ぎて鼻血が出ました。
これでLisp本がさくさく進められます!!ありがとうございました!
0239デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
sbcl 1.0.55.0でquicklispからcxml-stpを使おうとしたんだけど、
次がコンパイルできないんですが同じ症状の人いますか?

(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload :cxml-stp))
0240デフォルトの名無しさん2013/09/02(月) 23:22:36.07
CommonLisp初心者なんですけど
Clojureの->みたいのを実装したいのですがどうやったら綺麗に書けますか?

想定してる動作としては
(-> '(10 20 30) (mapcar #'1+ _) car 1+)
;; => 12

書いてみたのですがあと一段階…
(defmacro -> (&amp;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
(defun build-> (forms)
(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.25
>>241
thx. やっぱ愚直に書くべきなのかな

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
githubのclojure/src/clj/clojure/core.cljにある->のソースを参考にしたら、こんなんなった。
(defmacro -> (x &amp;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
>>222
大分おそくなったちゃったけど、こんなのはどうだろう。

(some (lambda (lst) (find-if #'oddp lst)) '((2 4 6 8) (2 1 3)))
=> 1
0248デフォルトの名無しさん2013/09/05(木) 21:25:01.23
someとfind-ifって同じ?
0249デフォルトの名無しさん2013/09/05(木) 22:44:31.71
ざっくり言うと、find-ifはpredが非nilとなる`要素'を返す。
一方、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
Maximaで黄金比を計算しようと思って
(%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
>>250
仕様です。
その式、マニュアルにそのまま出てます。
tp://maxima.sourceforge.net/docs/manual/en/maxima_29.html
0252デフォルトの名無しさん2013/09/08(日) 15:22:56.42
仕様というか、例としてはそうなっているけど、なぜ2にしているかの理由は書いてないんじゃね?
0253デフォルトの名無しさん2013/09/11(水) 04:26:19.84
clojureのthreading macroってquicklispにあったりしませんか?
threadなどで検索をかけてもこれといってひっかかるものがありません
0254デフォルトの名無しさん2013/09/11(水) 08:01:21.21
>>253
threading macroって -> と ->> のことでいいのかな。
それなら以下のパッケージに含まれているようです。

quickdocs.org/cl-arrows/
quickdocs.org/backports/
0255デフォルトの名無しさん2013/09/11(水) 23:19:11.68
>>254
ありがとうございます
clojureと挙動が少し違いましたがcl-arrowsが使えそうです
backportsも試してみたかったのですがquickloadがコケるのであきらめました
0256デフォルトの名無しさん2013/09/12(木) 22:08:33.23
quickutilにも、->と ->>があったらいいな。
0257デフォルトの名無しさん2013/09/13(金) 01:42:41.16
CLにclojureの#()やschemeのcutのようなものってありますか?
0258デフォルトの名無しさん2013/09/13(金) 05:38:54.24
Lisperはこの世のごみ屑
今すぐ消えるべし
0259デフォルトの名無しさん2013/09/13(金) 07:32:11.22
>>258
俺は特定のLisperにネタミがあるがおまえは一体何が原因でそんなことを言ってるんだ?
0260デフォルトの名無しさん2013/09/13(金) 07:59:09.35
そういうbotなんだよ
0261デフォルトの名無しさん2013/09/13(金) 19:03:33.23
>>257
CLの規格には無いけれど、
ユーティリティライブラリの 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
>>259
ああいう人は心の病気なんだから専門家に丸投げして関わらない方がいいとおもうなー
0263デフォルトの名無しさん2013/09/14(土) 14:56:52.03
>>261
さんくす!

しかしこういうのが外部にしかないということはCL書く人は毎回lambdaを書くということなんでしょうか
0264デフォルトの名無しさん2013/09/14(土) 17:51:46.45
Land of Lispの最難関はどう考えても環境構築
0265デフォルトの名無しさん2013/09/14(土) 22:34:58.88
Win8+CLISP+emacs+SLIMEでやってる人っていますか?
CLISPとemacsのインストール後emacsのsite-lisp(?)フォルダにslimeをリネームしてコピーまではしたもののその後がわかりません。
ユーザーフォルダの奥の方にあるinit.elがWindowsではemacsの設定として扱われる、ということまでは調べました。
0266デフォルトの名無しさん2013/09/14(土) 23:05:11.94
そのレベルで詰まってるなら
lisp box使ってみたら?
http://common-lisp.net/project/lispbox/
win8で動くかわからないけどね
0267デフォルトの名無しさん2013/09/15(日) 02:44:41.82
double-float の simple-vector が作れないのは何で?
ついでに float の simple-vector に
double-float の値、例えば 0.0d0 を代入できてしまうのは何で?
0268デフォルトの名無しさん2013/09/15(日) 03:05:52.70
(make-array 3 :element-type 'double-float)
で作れるけど

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.93
gaucheとguileの違うところを教えてください。
0270はちみつ餃子 ◆8X2XSCHEME 2013/09/15(日) 11:02:18.21
>>269
ここは Common Lisp スレだよ。
0271デフォルトの名無しさん2013/09/15(日) 12:38:54.81
* (type-of (make-array 3 :element-type 'double-float))
=> (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
sbclとcclでは上のようになりました。
しかし、clispでは
[1]> (type-of (make-array 3 :element-type 'double-float))
(SIMPLE-VECTOR 3)
となります。
一体全体どうゆうこったい??
0273デフォルトの名無しさん2013/09/15(日) 13:07:50.90
型指定の類は最適化のヒントでしかないから、処理系によっては無視される。
clisp はあんまり最適化してくれない処理系。
02742672013/09/15(日) 13:25:28.67
ええと sbcl だと

(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
>>272
要素型が 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.95
ありがとうございます!
simple-vectorと型要素の関係がすっきりしました。
clispがあまり最適化してくれない、というのも勉強になりました。
0277デフォルトの名無しさん2013/09/15(日) 16:04:58.89
macroを勉強したいんですがon lispとlolがやはり定番なんでしょうか?
0278デフォルトの名無しさん2013/09/15(日) 16:25:38.78
LOLでは「マクロを構築する上で、良いリファレンスやチュートリアルはほとんどない。Paul GrahamのOn Lispはその例外の1つである。」って書いてあるね
0279デフォルトの名無しさん2013/09/15(日) 19:59:38.09
>>274
> でエラーになってしまう。大量の代入をすると 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
>>266
動きました、ありがとうございます。
これでいちいちTerminalに一文字も間違えないように打つことから解放されました。
Land of Lisp もサクサク進められそうです。

ところでこのlispboxはClozureという処理系を利用していると書いてありましたが、CLISPと何か違いはあるのでしょうか?
Land of LispではCLISPを前提としているので。
0281デフォルトの名無しさん2013/09/17(火) 01:09:39.63
common lispで名前空間にユーザー側で別名をつける機能ってありますか?
clojureみたいに
(require 'alexandria :as 'alex)
alex:alist-plist
のように機能を探してます。

>>280
land of lispの範囲だと少なくともサーバのソケット周りが違うんじゃないかな、clisp使うか、ningleとかusocket使ってサーバ書き直すとかしなきゃいけないじゃない
本持ってないけど、サンプルコード感じだと他はclosure clでも動くんじゃない?
0282デフォルトの名無しさん2013/09/17(火) 06:55:03.39
>>281
そういう機能は無いけど、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
>>282
ありがとうございます。
例示していただいたコードを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
>>283
ありゃ。確認不足でしたすみません。

次のような記事もありましたが、壊れていて動きませんでした。
こちらはリーダーマクロで実現しようとされているようです。

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
Lisperはこの世のごみ屑
早く死滅せよ
0286デフォルトの名無しさん2013/09/18(水) 00:56:24.36
cl-annotと組み合わせてadd-nicknameを使ってみます。
(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.95
cl-dbiでtimestamp型が読み込めないよう
0288デフォルトの名無しさん2013/09/19(木) 16:32:48.74
common lisp の room 関数は 結果を標準出力に出力しますが、標準出力ではなく変数にセットすることは可能でしょうか?
0289デフォルトの名無しさん2013/09/19(木) 17:26:51.97
>>288
そういう場合 *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
>>284
おかげさまで取得できました。

ありがとうございました。
0291デフォルトの名無しさん2013/09/19(木) 19:39:46.57
>>289
番号まちがえました。

おかげさまで取得できました。

ありがとうございました。
0292デフォルトの名無しさん2013/09/20(金) 20:43:58.30
Linuxで環境構築したらclisp,emacs,slimeをインストールするだけで終わった
Land of LispからLispを始める人は絶対Linuxでやるべきかと
0293デフォルトの名無しさん2013/09/20(金) 21:49:57.07
graphvizとかも必要になるから断然Linuxのがいいよ
0294デフォルトの名無しさん2013/09/21(土) 00:29:53.35
LispプログラマはMacよりLinuxなイメージ。
とはいえ現実にはアプリを走らせる環境と同じOSで開発するのが一番リスク少ないんだが。
0295デフォルトの名無しさん2013/09/21(土) 14:39:52.68
land of lispを読んで環境構築しようと思ったらいつのまにかinit.elを一日中いじっていた
何をいっているかわからねえと思うが
0296はちみつ餃子 ◆8X2XSCHEME 2013/09/21(土) 15:20:00.33
よくあること。
0297デフォルトの名無しさん2013/09/21(土) 17:28:12.20
環境構築は断然 Linux か Mac がお勧め
Win なら、VMWare Player 入れて Linux の OS から入れなおしても
充分お釣りがくるよ
0298デフォルトの名無しさん2013/09/21(土) 17:28:38.62
今CLでマルチスレッドをやろうとしたらBordeaux-threadsなんだろうか。
ちなみに処理系はSBCL on Linux
0299デフォルトの名無しさん2013/09/22(日) 10:52:36.33
SBCL 専用でいいんだったら, SBCL のスレッド直接使えばいいと思う
0300デフォルトの名無しさん2013/09/27(金) 01:54:59.83
cygwin導入すらばいいだけだろ
0301デフォルトの名無しさん2013/09/27(金) 03:39:33.10
こんなところでスラバヤ殿下に会えるとは…
0302デフォルトの名無しさん2013/10/02(水) 17:59:30.81
clhsとcltl2の関係ってどうなってんの?教えて偉い人
0303デフォルトの名無しさん2013/10/02(水) 19:22:06.05
clhs は正式標準で, cltl2 は標準になる前に出版されて,
cltl2 出版後の改定が反映されてないだけだと認識してるが...
0304デフォルトの名無しさん2013/10/02(水) 21:03:41.63
横から口を挟んで申し訳ないのだけれどclhsって何ですか?
0305デフォルトの名無しさん2013/10/02(水) 21:17:00.15
Common Lisp Hyper Sex
0306デフォルトの名無しさん2013/10/03(木) 07:40:05.40
>>302
WikiのX3J13(http://en.wikipedia.org/wiki/X3J13)の中に、まんま
Relation to "Common Lisp the Language"
という項目の説明があります。
0307デフォルトの名無しさん2013/10/03(木) 07:53:32.13
clhshs
0308デフォルトの名無しさん2013/10/03(木) 19:40:18.49
>>306
ありがとうございます読んでみます
03093042013/10/03(木) 22:50:20.33
なるほど Common Lisp HyperSpecのことでしたか
0310デフォルトの名無しさん2013/10/05(土) 13:20:12.60
Wikipedia を Wiki と略しちゃう男の人って…
0311デフォルトの名無しさん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.24
>>311
Land of Lispは読んでなくて手元にCommon Lispはないけど...

(/ 4 6) = 2/3
は正確な値だけど
(/ 4.0 6) = 0.66666....
は何らかの丸めの入る近似値

有理数で計算しているうちは正確な値で結果が得られるけど
少数が混じると近似値になってしまうということではなかろうかと存じます。
03133122013/10/09(水) 18:49:23.69
読み返したら、あまり、回答になっていなかったか。

ここでいう「汚染」というのは、上記のこれ以降近似値という
質の低いデータになってしまうということだけど、
確立されたプログラミングの専門用語ではないと思う。

Webプログラムとかでデータにユーザが入れた値が入る等
安心して使えず、そのデータから派生したデータを使う場合
セキュリティに気をつけなくてはいけないデータになることを
汚染という使い方をしたのを見たことがある。
0314デフォルトの名無しさん2013/10/09(水) 18:55:09.68
>>311
浮動小数点数のいろんな問題を含めて汚染といっているのだろうけど、
代表的なもののひとつに桁落ちというのがあって、
(x+1/N)という実数をN回足し合わせれば必ず(N*x+1)になると期待してしまうけど、
浮動小数点数の場合、xとNがそれぞれ大きい場合にはN*xになってしまう場合があったりする。
Cなんかで数値計算をやる場合には、浮動小数点演算の特性を頭に叩き込むのがまず基本だけど、
Lispの場合は有理数が使えるんだから、速度を気にしない場面では有理数を使うべきってことではなかろうか。
0315デフォルトの名無しさん2013/10/09(水) 19:05:48.69
有理数と浮動小数点を計算すると浮動小数点になる
全部が有理数なら計算結果も有理数で得られるが、たったの1個でも浮動小数点が混ざっていると、計算結果は浮動小数点になってしまう
安全な食材の中に、たった1つでも有毒なものが混ざっていると、結果できた料理は有毒なものになってしまう様に喩えて、汚染とかいう
03163112013/10/09(水) 20:34:03.34
>>312, 313
ありがとうございます。
>少数が混じると近似値に〜
正確な値を清浄ととらえた上で、近似値を"汚染"と表現しているのですね。

「汚染」というのは、確立されたプログラミングの専門用語ではなく、
文脈によってニュアンスが変わると把握できました。

>>314
ありがとうございます。
>桁落ち
なるほど。桁落ちにより誤差が発生することがあるので"汚染"と表現しているのですね。
ためになります。

>>315
ありがとうございます。
>安全な食材の中に、たった1つでも有毒なものが混ざっていると〜
この比喩で、納得できました。

このように考えると、313さんが教えてくれた
「Webプログラムとかで〜」という用法とも、大きなズレは感じませんね。

"汚染"というのは、正しい状態を前提として不正な状態になることをいうのかなと
みなさんにいただいた内容をもとに自分なりに結論してみました。

また、何かあったら質問させてください。ありがとうございました。
0317デフォルトの名無しさん2013/10/10(木) 00:40:52.84
汚染っていうのはヘンだろ。
0318デフォルトの名無しさん2013/10/10(木) 00:43:25.30
値が誤差に汚され染められる
0319デフォルトの名無しさん2013/10/10(木) 00:48:22.98
英語の contamination なんだろうけど。

純粋だったものが汚されるってニュアンスかな。
0320デフォルトの名無しさん2013/10/10(木) 00:48:56.48
変かどうかは分からないけど、>>315の言うような意味だと思うよ。
少しでも混ざると全体がそうなってしまう。一度混ざると取り除けない。
0321デフォルトの名無しさん2013/10/10(木) 01:11:08.17
日本語にするとおかしいね。
haskell界隈で使われる純粋と不純ってのも、日本語ではどうにも違和感がある。
不純ってのは、日本語の文脈では悪い意味でしか使われないから。
0322デフォルトの名無しさん2013/10/10(木) 01:46:24.89
>>317
>"汚染"というのは、正しい状態を前提として不正な状態になることをいうのかなと

この理解が変でしょ。
「正しい」状態とかじゃなくて、ある種のデータはこういう内部表現をされて
います、ってそれだけのことだから。
0323デフォルトの名無しさん2013/10/10(木) 01:55:36.45
再帰関数で相互に関数を呼んでいる場合に
ファイルをロードするとエラーメッセージ(片方の関数が存在しないと言われる)
が出てしまうのはどうやったら消えてくれるのでしょうか
動くので問題ないのですがエラーが気になるのです
0324デフォルトの名無しさん2013/10/10(木) 03:48:38.33
あっあっ有理数汚染されちゃうっ誤差入っちゃうよぉ…
0325デフォルトの名無しさん2013/10/10(木) 09:20:18.54
>>321
英語だって否定辞付きだろ。どうやって肯定的な意味に使うんだ。
0326デフォルトの名無しさん2013/10/10(木) 10:26:12.15
CLで一般的かどうか知らないけど、Schemeにはは「正確数」と「非正確数」があって、
非正格数を演算した結果は非正格数になる。
0327デフォルトの名無しさん2013/10/10(木) 11:47:50.50
正確に言えや
0328デフォルトの名無しさん2013/10/10(木) 11:55:49.08
>>325
あの人ら、不純を悪い意味じゃなくて非純粋の意味でバンバン使うじゃん
(setq *x* (1+ *x*))
(nreverse ...)
これ全部不純な計算ね
でも、日本語で不純っていわれると、何かよこしまな悪い考えを咎められているようにも聞こえるw
0329デフォルトの名無しさん2013/10/10(木) 13:10:02.09
その式はよこしまな悪い考えだと思う
0330デフォルトの名無しさん2013/10/10(木) 20:52:47.95
>>328
あの人らは「んなもん使うなぼけ !!」って意思を込めて
「不純」って使ってるのかと思った。
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
>>331
意味的に何を言いたいかは充分すぎるほど分かるけど、感覚的には全くわからんね
ああ、これまたどうしようもなく下手くそな英訳の濫用だなあとしか思わん
0334デフォルトの名無しさん2013/10/11(金) 03:45:20.83
俺は感覚的にもよくわかるけどな
煽りじゃないけど、もっと適切な言葉があるなら知りたいから教えて
0335デフォルトの名無しさん2013/10/11(金) 11:47:03.73
副作用
0336デフォルトの名無しさん2013/10/11(金) 18:33:52.99
副作用ってのも違和感のある表現だが英語だとどうなってるの?
0337はちみつ餃子 ◆8X2XSCHEME 2013/10/11(金) 18:35:40.62
side effects
0338デフォルトの名無しさん2013/10/11(金) 18:38:29.23
副作用や不純に違和感を覚えるってただ慣れてないだけだろ
何にでも突っ込みたい人なのかな
0339デフォルトの名無しさん2013/10/11(金) 18:44:59.85
>>333
ばかなんだね
ふう
0340デフォルトの名無しさん2013/10/11(金) 21:09:23.52
>>338
副作用はもうなれたけど、コンピュータ系のcontextで聞き出した頃は、
薬とかの副作用っていう、「悪いもの」、「必要外のもの」的な
意味合いを感じて違和感があった。

というか、むしろ、これで気づいた。副作用なんて、他にあんまり用いないし。

ただ、慣れと言われればそれまでだよね。
0341デフォルトの名無しさん2013/10/11(金) 21:19:11.89
東山水上行
0342デフォルトの名無しさん2013/10/11(金) 23:37:31.50
「低レベル」とかも別に悪い意味じゃないよねぇ。
0343デフォルトの名無しさん2013/10/12(土) 04:36:52.83
いつまでも訳された日本語で考えてないで英語本来の意味で考えましょう
0344デフォルトの名無しさん2013/10/12(土) 04:38:31.93
文脈次第
0345デフォルトの名無しさん2013/10/12(土) 04:45:30.98
英語本来の?!
なにいってんだか
概念に日本語も英語もない
逆に英語でも日本語でも
文脈上の意味、ないし定義から離れて語素から意味を類推するというアホーなことをすることが問題。
どうも言葉自体になにかしら本来の意味があるなんて思っているやからが何人か書き込んでるな

LISP使いとしては、とっても恥曝しだぞ
0346デフォルトの名無しさん2013/10/12(土) 09:28:06.14
>>340
「副作用」って表現は関数型の言語以外では今でも見かけない気がするが
0347デフォルトの名無しさん2013/10/12(土) 09:33:12.96
新しい語義を翻訳する場合も、新しい語義として割り当てる努力は必要
0348デフォルトの名無しさん2013/10/12(土) 09:56:36.40
>>346
そこらへんのプログラマは使ってなくても、標準規格における重要な用語で、
「副作用完了点」とかあるから。
0349デフォルトの名無しさん2013/10/12(土) 14:26:15.07
>>345
英語では違和感ないのに、日本語に訳した言葉に違和感があると言ってるやつに対して言ってるだけだが?
LISPの前にまず英語と日本語勉強しろよ(笑)
0350デフォルトの名無しさん2013/10/12(土) 14:32:06.21
>>349
わかってないのにレスするな低脳君
馬鹿はおれ、嫌いなの
0351デフォルトの名無しさん2013/10/12(土) 14:37:56.31
>>350
指摘が全くもって的外れなの気付かないのかな?おバカさんなのかな?
0352デフォルトの名無しさん2013/10/12(土) 14:50:31.62
>>351
だから君にはわからんって
偏差値60以下だったろ?
レスするなよ、馬鹿は嫌いなの
0353デフォルトの名無しさん2013/10/12(土) 14:58:47.73
>>352
そんな低い偏差値の大学に通われていたのですか?
文脈の違いにすら気付かずに恥ずかしいレスをしてしまう程度なので仕方が無いですね
感情論でしか語れなくまともに議論すらできないお馬鹿さんはどちらでしょうか?
偏差値コンプレックスのお馬鹿さんは黙ってろよ
0354デフォルトの名無しさん2013/10/12(土) 15:00:55.24
まずは朝型の生活にな
0355デフォルトの名無しさん2013/10/12(土) 16:06:29.33
Amazonで「よこしまなきもち」で検索したらいやん
0356デフォルトの名無しさん2013/10/12(土) 16:12:11.74
折角の休みなのに喧嘩すんなって
0357デフォルトの名無しさん2013/10/12(土) 18:20:38.39
WindowsのLisp開発環境でお勧めはなんでしょうか
0358デフォルトの名無しさん2013/10/12(土) 21:17:16.89
1.ちょっとLispを触ってみたい、とかならLisp Boxがとっつきやすいのではないでしょうか。
導入の仕方は検索してみてください。

2.しっかりLispと愛し合うなら、次のリンク先の動画が参考になるはずです。
[Installing Common Lisp, Emacs, Slime &amp; Quicklisp] www.youtube.com/watch?v=VnWVu8VVDbI
0359デフォルトの名無しさん2013/10/12(土) 22:02:07.90
>>358
lispbox-0.7をインストールしてみました
Lisp環境を効率よく使うのにはEmacsが必須のようでうね・・・
0360デフォルトの名無しさん2013/10/12(土) 22:20:05.45
windowsならlispboxとlispcabinet,どっちがいいんだろう?
0361デフォルトの名無しさん2013/10/12(土) 23:04:59.68
>>346
昔の職場で普通にレビューとかで副作用って言葉使ってたな
関数型言語なんかの厳密な意味の副作用じゃなくて、
モジュールが何か目的以外の悪さしてるんじゃないかとかそんな意味で
0362はちみつ餃子 ◆8X2XSCHEME 2013/10/13(日) 00:02:39.88
一般用語としてなら、例えば文字を表示することを目的とした手続きで文字が表示されるのは「作用」で、
何か値が返ってきてもそれはついで (副作用) のことっていうニュアンスになるよね。

だけど、技術用語というものはそういったニュアンスを排除して定義によって意味を確定するものだから、
領域によって定義が異なるとかいうのもそういうものとして受入れるしか仕方ない。
最初に用語を決めるときに慎重に定めるべきではあるけど、後になってわかることだってあるし。
0363デフォルトの名無しさん2013/10/13(日) 00:12:23.57
>>359
emacsは慣れるまで時間がかかるので、手っ取り早くlispいじりしたいなら、
カッコの対応表示してくれる適当なエディターで、
しこしこlisp書いてみたほうが楽しいかもしれません。
ちなみに、vim派にはslimvがあります。

ああ、そういえば、xyzzyってwindowsだったはずです。
0364デフォルトの名無しさん2013/10/13(日) 00:45:34.08
emacsはチュートリアルに少し時間割けばわりかし早く慣れる(気がする)
0365デフォルトの名無しさん2013/10/13(日) 00:49:53.99
emacsは好きになるまで2年ぐらいかかった
0366デフォルトの名無しさん2013/10/13(日) 10:45:04.24
>>361
「薬の副作用」のイメージで考えてる人多いからね。
まあ、薬の副作用自体間違った言葉なんだが。
0367デフォルトの名無しさん2013/10/13(日) 11:54:13.15
薬の方の副作用を二次作用って言うことにしよう。
0368デフォルトの名無しさん2013/10/14(月) 01:28:12.61
初心者以前の質問で申し訳ないのですが、
Haskell でいう Hoogle, Python でいう公式の library reference のような、
標準で定義されてる関数やパッケージの総覧みたいなものとしては何を利用するのがいいでしょうか?
0369はちみつ餃子 ◆8X2XSCHEME 2013/10/14(月) 01:48:48.62
eldoc
0370デフォルトの名無しさん2013/10/14(月) 10:55:51.04
眠くなるのが「副作用」の薬とかは、眠れないという症状がある場合、
副作用もついでに期待して使われたりするぞ。花粉症の抗ヒスタミン剤とか。
0371デフォルトの名無しさん2013/10/14(月) 11:30:14.76
風邪はウイルス性だから抗生物質飲んでも治らないけど、
痰を切って喉をスッキリさせることを目的として処方されたり場合もあるしな。
0372デフォルトの名無しさん2013/10/14(月) 11:38:59.09
>>355
アカウントログイン状態で検索しちまったじゃねぇかwwwwww
この本を検索した人はのこの本にLispとかプログラム関係の本ばっかりの中にシマシマパンツが出てくるようになったらどないすんねんwwww
03733722013/10/14(月) 11:40:18.04
ちなみに期待したのは猫関係の本だった
0374デフォルトの名無しさん2013/10/14(月) 12:06:55.50
不純Lisp
0375デフォルトの名無しさん2013/10/14(月) 13:10:09.97
>>368
次の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
Common Lispで何か作りたいのですが
面白いアイデアてありますか?
0377デフォルトの名無しさん2013/10/14(月) 13:35:40.00
http://www.slideshare.net/amachang/ss-9119621
ネット上に転がってるやってみたを習作してみると、要望が来るかもよ
0378デフォルトの名無しさん2013/10/14(月) 18:04:11.67
>>369
>>375
ありがとうございます!
0379デフォルトの名無しさん2013/10/18(金) 23:05:03.66
Mac に SBCL を コンパイル&インストールしています。
しかし途中で警告が出てしまいます。

自分でもネットで調べたりしましたが、この警告がなぜ発生するのかわかりません。(英語力の問題かもしれませんが)
この警告はなぜ発生するのでしょうか。

環境: 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.99
>>379
Mac Ports とか使ったら
0381デフォルトの名無しさん2013/10/19(土) 00:12:41.60
>>379,380
Brewの方が、Mac Portsに比べて、無関係のものを毎回入れないから楽。
0382デフォルトの名無しさん2013/10/19(土) 17:14:01.48
>>380
>>381
ありがとうございます。
HomeBrew でインストールしました。

悩んでイライラしていたのが嘘みたいにあっさりインストールできました。
ありがとうございました。
0383デフォルトの名無しさん2013/10/22(火) 19:47:20.58
Common Lispでmysql操作のサイト、書籍
などありますか?
0384デフォルトの名無しさん2013/10/22(火) 23:29:24.61
https://github.com/dss-project/dswm
clのwmだって
0385デフォルトの名無しさん2013/10/22(火) 23:43:20.30
http://blog.8arrow.org/entry/2013/10/22/135427
なんかDB操作のライブラリ作ってるようだ

DBまわりはRailsだなんだと使っていると、migreteとcrudとARぐらいは欲しいなとおもってしまう。
0386デフォルトの名無しさん2013/10/23(水) 06:20:25.03
>>384

新しいのが、また出来たのかと思ったら、

> DSWM is a fork of StumpWM

じゃん。

ttp://dss-project.org/?DSS:DSWM:Screenshots
03873722013/10/23(水) 14:56:19.56
>>384
WMをワードマスターと読んでしまって涙目
リンク先みるまでWindow Managerとは思わなかった。

clとかでGenericなエディタとかどうやって作るんだろうって思って昔のLispエミュとか見てるのだけど、そういうのにはむいてないよね。(Cursesとかの世話になるって意味ね)
0388デフォルトの名無しさん2013/10/23(水) 15:20:16.85
>>387
>clとかでGenericなエディタとかどうやって作るんだろうって思って昔のLispエミュとか見てるのだけど、そういうのにはむいてないよね。(Cursesとかの世話になるって意味ね)

その論調だとcursesがC言語で実装されてるから、C言語以外はエディタ作るのに向いていないってことになんじゃね?
0389デフォルトの名無しさん2013/10/23(水) 16:16:54.40
>>385
ありがとうございます。
他にないですか?
0390デフォルトの名無しさん2013/10/23(水) 18:06:41.05
>>389
//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
>>390
ありがとうございます。
0392デフォルトの名無しさん2013/10/25(金) 11:23:11.42
Common Lispでリズムマシンみたいなものをつくろうとしているのですが、
0.1ミリ秒ほどの分解能があるタイマーって存在するんでしょうか?
0393デフォルトの名無しさん2013/10/25(金) 12:40:12.91
OSとか処理系を書かないと答えられないんじゃないか?

それと余計なお世話なんだけど、”Common Lispでリズムマシン”を作ることに意味があるならいいけど、リズムマシンを作ってみたいだけならpuredataとかを検討したほうがいいんでないかい?
0394デフォルトの名無しさん2013/10/25(金) 15:20:17.28
>>393
すみません
書いてませんでした

処理系はClozure CLで、OSはLinuxです
Windowsでも利用可能なら、そのほうがいいかなという感じです

最終的にMIDIシーケンサに発展させるつもりでおり、その習作という位置付けです
Common Lispを選んだのはシュミですが…
0395デフォルトの名無しさん2013/10/25(金) 17:24:45.69
一番ユーザが多いとであろうと思うcommon lispの処理系って何なの?
できれば根拠というかアンケートサイト何かを示してもらえば嬉しいが
0396デフォルトの名無しさん2013/10/25(金) 17:26:17.60
   m m
  ( ゚∀゚) カモン
  (  ∩ミ  シュッシュッ
   | ωつ,゙
   し ⌒J
0397デフォルトの名無しさん2013/10/25(金) 17:29:39.80
>>394
あなたがcommon lispでアプリケーションを書くことに価値を置いているのかD™等のプログラムを書くことに価値を見出しているのかに依って違うんだけど
余りこだわりをこだわりというか邪見を持たずやりたいようにやったほうがいいと思うけどな
わけわかんなくてスマソ
0398デフォルトの名無しさん2013/10/25(金) 17:31:49.26
そんなことを知ってどうするっていうんだい。
0399デフォルトの名無しさん2013/10/25(金) 17:33:08.64
気にするな
とりあえずチンチンしごけ


   m m
  ( ゚∀゚) イクゾ
  (  ∩ミ  シュッシュッ
   | ωつ,゙
   し ⌒J
0400デフォルトの名無しさん2013/10/25(金) 17:38:47.77
 >>398
スマヌOSとかによっても違うのに余り意味がないかも知れないな、
俺はSBCLがユーザが多いよな気がしてなんとなくSBCLを選んだのでなんとなく引け目があったんだ
0401デフォルトの名無しさん2013/10/25(金) 23:46:33.07
処理系の選び方について
ttp://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
>>392
楽しそう。clojure の overtone みたいなの目指してがんがれ!
0403デフォルトの名無しさん2013/10/27(日) 11:22:30.85
>>392
http://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.74
メモリの取り方の図解のサイト、書籍などございますか?
0405デフォルトの名無しさん2013/10/31(木) 23:23:27.69
common lispで、参考になるようなきれいなソースコードとかありませんかね?
0406デフォルトの名無しさん2013/10/31(木) 23:30:38.32
最初はポール=グレアムのコードからじゃね?
0407デフォルトの名無しさん2013/11/01(金) 00:29:05.65
>>405
PAIP が教科書的に美しいよ。あとはlispのwebサーバ hunchentoot もかなり綺麗なコードだった。
0408デフォルトの名無しさん2013/11/01(金) 01:24:07.50
LandofLispの絵に惹かれて買ってからちょこちょこ読み進めてるけどCommonLispって使い道あるんだろうか...
半分終わったくらいから気になりだした
0409デフォルトの名無しさん2013/11/01(金) 01:58:10.42
pythonやruby使うのと同じように使えばいいんじゃないの?
0410デフォルトの名無しさん2013/11/01(金) 08:45:31.45
Common Lisp じゃなきゃいけないって事態はそんなにないと思うけど、
Common Lisp では駄目だって事態もそれほどない。
0411デフォルトの名無しさん2013/11/01(金) 19:01:32.53
同じコードを何度か書いたりして、他の言語の抽象化機能に疑問を感じた時?
0412デフォルトの名無しさん2013/11/01(金) 22:16:19.35
format使いたい時
0413デフォルトの名無しさん2013/11/01(金) 23:46:46.24
相変わらず暗いの
最も明るく行ったら
面白くないスレ減ると思います。
0414デフォルトの名無しさん2013/11/02(土) 16:05:00.79
LISPって一人で書いているときはまあ良いとして、共同開発で使うと混乱したり、収拾着かなくなったりしないのなんとなく。
0415デフォルトの名無しさん2013/11/02(土) 17:43:03.78
そこまで大人数のプロジェクトの経験者は少ないだろうしなあ。
コアの上に他の言語が乗ってるようなものだから、
gtkやobjC、Railsその他と変わらんと予想するが。
マクロも書くライブラリ層設計者と、非マクロのみのアプリ層設計者は分離した方が良いのかも?
0416デフォルトの名無しさん2013/11/02(土) 17:46:35.18
ライブラリ層というよりDSL層か。
0417デフォルトの名無しさん2013/11/02(土) 19:17:34.20
>>414
なる。
グレアムが言うには Viaweb 開発時には分担が完全に分かれてて、
自分の開発したところはユーザーサポートまで含めて自分でやる方式でまわしてたらしい。
新機能もバグ修正も常に行なわれながら発展する進化的モデルでの開発で、
仕様とコードを一体にして決断を下せる立場だったからこそ上手くいったと考えられてる。
ガチガチの仕様を多人数で厳密に満たしていくような開発スタイルじゃ混乱するだろうね。
0418デフォルトの名無しさん2013/11/02(土) 20:55:28.96
ガチガチの仕様ならコードもガチガチになるから混乱しないような。
ガチガチの仕様ではLispの柔軟性の価値がないだけで。
0419デフォルトの名無しさん2013/11/02(土) 22:06:28.29
グレアムのはこれだっけ?
http://practical-scheme.net/trans/hp-j.html
検索ついでに、こっちも同じ理念語ってたことに今更気づく、、、
http://satoshi.blogs.com/life/2007/10/post-4.html
0420デフォルトの名無しさん2013/11/02(土) 23:20:57.50
「Viawebは3人で書いた」
http://practical-scheme.net/trans/road-j.html
0421デフォルトの名無しさん2013/11/03(日) 01:54:23.57
まあでも飯は渡された仕様書を実装することで食べる人が圧倒的に多いわけで、LISPなんて役に立たないと思ってもしょうがないですな。
0422デフォルトの名無しさん2013/11/03(日) 02:30:04.81
ほとんどは既存のシステムの焼き直しだから、
ライブラリが多いものの方が有利だしなぁ。
結局、ユーザが多い言語の方が有利ってことになる。
0423デフォルトの名無しさん2013/11/03(日) 08:27:59.63
LISPで作った面白いものありますか?
0424デフォルトの名無しさん2013/11/03(日) 09:12:11.08
ecLISP
0425デフォルトの名無しさん2013/11/03(日) 09:12:21.13
>>421
アジャイルには向いているんじゃないの?
0426デフォルトの名無しさん2013/11/03(日) 16:27:56.71
ソシャゲがLispで書かれる時代が
0427デフォルトの名無しさん2013/11/03(日) 23:13:52.91
(psetq a b b a)は

(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.74
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3A%E3%83%9E%E3%82%AF%E3%83%AD%3Apset!
0429デフォルトの名無しさん2013/11/03(日) 23:48:42.07
上のpsetqの定義はこれ
(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
>>428
手続型でaとbを変換するときに
t = a
a = b
b = t
のtをgensymに置き換えてるだけなんだな
多分解決したありがとう
0431デフォルトの名無しさん2013/11/04(月) 01:25:45.99
いや、letが初期値を全て評価してから、変数に束縛するから。
本体部分でのみ有効=束縛部分では外のが見える。
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
>>432
ごめん、合ってた。二重評価避けのgensymだ。
0433デフォルトの名無しさん2013/11/04(月) 02:48:34.58
>>433
全て自己レス
試したけど、やはりいらない気がする。
0434デフォルトの名無しさん2013/11/04(月) 15:58:57.63
433が永久ループに陥っている
0435デフォルトの名無しさん2013/11/04(月) 18:05:01.71
誰か末尾再帰してあげてー!
0436デフォルトの名無しさん2013/11/04(月) 18:19:33.43
tail call optimizationをするとスタック溢れがおこらないぶんより深刻な事態におちいるじゃない
0437デフォルトの名無しさん2013/11/05(火) 05:41:21.68
大丈夫、CLだからそのうち落ちる
0438デフォルトの名無しさん2013/11/08(金) 10:19:10.88
信号処理やらうと思うんだが
CLても簡単にできるもんなのかな
0439デフォルトの名無しさん2013/11/08(金) 21:40:53.08
言語としてやり難いということはないはず。
ライブラリがなくて自作かcffi書いたり、パフォーマンスのためにCみたいなコードに、はあるかも。
0440デフォルトの名無しさん2013/11/09(土) 18:03:22.84
信号処理できそうなのは分かったがgnuplot plplot以外にグラフ描画するライブラリないよな
0441デフォルトの名無しさん2013/11/09(土) 22:22:41.72
和田先生みたくPostScriptを直接書けば何の問題ない
0442はちみつ餃子 ◆8X2XSCHEME 2013/11/09(土) 22:38:26.17
近頃なら SVG も有りじゃないの。
0443デフォルトの名無しさん2013/11/10(日) 00:05:53.28
>>440
Processingは使えないのかな?
0444デフォルトの名無しさん2013/11/10(日) 01:46:36.05
和田ってのはアホなんだな
0445デフォルトの名無しさん2013/11/10(日) 01:58:33.59
ライブラリがないのが問題になる程度の腕なら、マイナー言語全般あきらめて、メジャー言語でやるべき。
0446デフォルトの名無しさん2013/11/10(日) 08:41:39.02
ネイティブのライブラリをffi経由でラッパー作ったり。
ClojureみたいなVM言語だと、VM上のライブラリも少し楽に使える。
0447デフォルトの名無しさん2013/11/11(月) 23:52:07.15
ニュー速VIP爆撃中の2ch定期書き込みツールqsocks
lispで書かれたこのツールを誰か改造してください。
他板でも使えるようにしてください。
お願いします。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
この投稿その他lisp方言のスレにもあるな
どの方言かも知らない奴がそこら中に書き込んでるな
0451デフォルトの名無しさん2013/11/12(火) 09:19:43.16
興味ない話題はスルーしとけよ
結果的にそれが一番早く事態を収拾させる方法だよ。
一々食って掛かると某「自称本スレ」みたいになる。

もしかして、わざとそうやってここを荒れさせるのが狙いなら
もうこれ以上言うべきことは無いけど。
0452デフォルトの名無しさん2013/11/12(火) 14:16:33.61
そもそもソースも読めないのに
悪意を持った素性の知れない人間に作られた悪意のツールを使うなよ
0453デフォルトの名無しさん2013/11/12(火) 19:21:51.74
初心者の物ですがLinxにSynapticでclispをインストールしたのですが
どうしてもclipをインストールした場所が検索出来ません
何方かLinuxのファイル検索上手く出来る方法を教えて頂けませんか?
0454デフォルトの名無しさん2013/11/12(火) 19:28:14.62
$ whereis clisp
0455デフォルトの名無しさん2013/11/12(火) 19:30:36.74
↑ありがとうございました。
0456デフォルトの名無しさん2013/11/12(火) 19:50:17.95
>>454
しつこいようですが
処理系てコマンド扱いなんですか?
0457デフォルトの名無しさん2013/11/12(火) 19:57:33.64
lisp以前に必要な前提知識が足りない
素直にwindows使ってたほうがいいな
0458デフォルトの名無しさん2013/11/12(火) 20:14:22.10
>>457
前提知識のお勧めサイトなどありますか?
0459デフォルトの名無しさん2013/11/12(火) 20:33:21.56
http://www.google.co.jp/
0460デフォルトの名無しさん2013/11/12(火) 21:13:10.93
>>458
https://www.archlinux.org/
こいついっぱしに使えるようになったら余裕になれる
0461デフォルトの名無しさん2013/11/12(火) 22:39:11.13
>>453
454です。
初心者なら知らなくて当たり前です。これから学べばいいのです。
まず、知っておくことは「わからないことを調べる方法」を学ぶことです。
459の言うように、まずは人に聞く前にGoogleなどで検索する習慣をつけることです。
qiitaやstack overflowなども参考になります。

あなたの質問の内容を見ると、lispとlinuxを同時に学ぼうとしているように見えます。
457の言うように、どちらか一つに絞るのも一つの方法ですが、
個人的には、やる気があれば、なんとかなるのではないかと思います。
0462デフォルトの名無しさん2013/11/12(火) 22:52:47.00
まずは、linuxのコマンドをざっと覚えましょう。
www.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/
0463デフォルトの名無しさん2013/11/13(水) 01:47:11.72
>>461
>>462
本当にありがとうございます。
0464デフォルトの名無しさん2013/11/13(水) 01:47:53.48
>>461
>>462
本当にありがとうございます。
0465デフォルトの名無しさん2013/11/13(水) 01:59:38.37
>>463
どういたしまして
>>464
どうしたしまして
0466デフォルトの名無しさん2013/11/13(水) 06:45:39.61
lispとlinuxを同時に勉強か、最初はタイヘンだけど、いいんじゃないかな。
いろいろ言語用にOS側の環境作ったり調べたり質問したりすれば、すぐ両方使えるようになるよ。
0467デフォルトの名無しさん2013/11/13(水) 08:38:55.68
>>454
find grepで検索出来なかったのですが
どうしてwhereisなんですか?
0468デフォルトの名無しさん2013/11/13(水) 09:02:13.53
スレ違い
0469デフォルトの名無しさん2013/11/13(水) 09:28:02.02
>>467
くだらねえ質問はここに書き込め! Part 208
http://engawa.2ch.net/test/read.cgi/linux/1383465939/
0470デフォルトの名無しさん2013/11/13(水) 11:16:32.04
>>467
find grep whereis でググると次のページがすぐに見つかりました。

www.practicatechnical.com/computer-tips/ubuntu-tips/find-grep-locate-whereis

人に聞く前に、まずは自分で調べるべし。
0471デフォルトの名無しさん2013/11/13(水) 13:23:46.13
>>470
ありがとうございます。
0472デフォルトの名無しさん2013/11/16(土) 19:55:00.08
>>458
これとかどう?
http://www.lpi.or.jp/linuxtext/text.shtml
0473デフォルトの名無しさん2013/11/23(土) 21:29:56.10
schemeはr7rsとか出てるので更新されてるのがわかるんですけど
common lisp の方は1994年の標準化以降更新はないんですかね
0474デフォルトの名無しさん2013/11/26(火) 00:35:00.59
ランド・オブ・リスプ読もうと思うんだけど、
Lisp CabinetっていうのでCLISPにチェック入れれば全部動くのかな?
0475デフォルトの名無しさん2013/11/26(火) 17:44:55.18
randomの実装ってどうなってるかわからんかな
線形合同法だとは思うんだけど、具体的に
0476デフォルトの名無しさん2013/11/26(火) 19:07:45.37
HyperspecとCLTLチラ見したけど、規格に無さげだし、処理系毎に調べるしか無いんでね?
0477デフォルトの名無しさん2013/11/26(火) 19:31:33.37
mjk
lispworks、一応簡単な実験で乱数の範囲は0〜8388607のようなんだがなあ、周期がわからぬ
とりあえずthx
0478デフォルトの名無しさん2013/11/26(火) 21:15:46.51
lispworksならドキュメントにあったんだが。
ttp://www.lispworks.com/documentation/lw50/LWRM/html/lwref-326.htm
0479デフォルトの名無しさん2013/11/26(火) 21:24:01.69
mt-
0480デフォルトの名無しさん2013/11/27(水) 17:14:36.67
(defmacro my-lambda (&amp;rest body)`(lambda (_ _2 _3) ,@body))
(mapcar (my-lambda (* _ 2)) '(1 2 3))
;=>(2 4 6)

こういう事がしたいのですが、引数の数が足らずエラーが出ます。
(defmacro my-lambda (&amp;rest body)
`(lambda (&amp;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
>>481
普通の(lambda args body)に対し(my-lambda body)だけの記述で
引数に_1 _2 _3が裏で束縛されてbody内で使えるというものです。
0484デフォルトの名無しさん2013/11/27(水) 18:50:00.91
>>482
bodyを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
LOLに似たようなリードマクロがあったな
あっちは引数の数指定してたけど
0487デフォルトの名無しさん2013/11/28(木) 22:36:41.41
配列でarray-total-size-limit以上のデータを扱うとしたら、普通はどうするんでしょうか?
0488デフォルトの名無しさん2013/11/29(金) 23:14:16.94
あんまりないケースみたいですね。
仕方ないので、配列の配列をバッファとして持つクラスを作って、アクセサに
工夫をして凌ぐことにしました。
0489デフォルトの名無しさん2013/11/30(土) 07:43:28.02
>>488
array-total-size-limitって一千万を超える値だけど、そんなデカイ配列何に使うのか興味津々
0490デフォルトの名無しさん2013/11/30(土) 12:06:01.99
>>489
時系列の実験データを入れるのに使おうかと。使っている処理系が諸事情でclozure clなんですが、
limitが他に比べて小さいですね。
以前はpython使っていたんですが、pythonは自前のループで書いた処理が遅いので、好みのclでやりたくて、移行中です。
pythonはいい言語ですが、強制インデントがどうも性にあわない...
0491デフォルトの名無しさん2013/11/30(土) 17:07:10.72
強制インデントかー。最近の言語は何々が出来ないが売りが増えて何だかなーがあるな。
表現が制限されるという事は、うまく抽象化できない概念が増えるという事だと思うのだけど。
手続き概念を書きたいのに、素直に書けないとか。
いかなる表現も自由で、抽象化方法も簡単に実装できるLisp系が、もっとも表現力のある言語。
0492デフォルトの名無しさん2013/11/30(土) 20:19:45.92
>>490
http://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.09
おれなら sqlite に突っ込むかな
0495デフォルトの名無しさん2013/12/05(木) 00:20:45.60
どうして
``(,`(,x ,x) ,`(,x ,x))を評価すると
`((,X ,X) (,X ,X))になるんですか?
0496デフォルトの名無しさん2013/12/05(木) 21:28:07.42
なりません
04974952013/12/05(木) 22:50:52.92
なりませんか?こちらではsbcl、clispで同様になりました。

(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.33
うちの環境だと

clisp 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.29
仕様はコレ。
http://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.89
ほー
0502デフォルトの名無しさん2013/12/06(金) 14:27:37.21
>準クォートはバッククォートの引数だけ評価するから
>,`(,x ,x) は (,x ,x) になって

その理屈だと
,'(,x ,x) も (,x ,x) になるから違うよ
0503デフォルトの名無しさん2013/12/06(金) 14:37:32.78
>If the backquote syntax is nested, the innermost backquoted form should be expanded first.
>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
もしバッククオートシンタックスがネストしていた場合、
最も内側のバッククオートが最初に展開されなければならない。
これは以下のことを意味する。
複数のカンマが文の中に現れた場合、
最も左のカンマは最も内側のバッククオートに属する。
05055032013/12/06(金) 17:26:52.36
>>504
トンクス。r5rsの「準引用形式は入れ子にしてもよい。置換は,最外のバッククォートと同じ入れ子レベルで
現れる被 unquote 要素に対してだけ行われる」
最外と最も内側だから、schemeとCommon Lispで動作がちがうん?
0506デフォルトの名無しさん2013/12/06(金) 17:29:42.21
the leftmost one belongs to the innermost backquote.ってどういう意味だ?
05074952013/12/06(金) 18:18:51.48
>>500
なるほどバッククオートもただのマクロなので
普通のマクロと同じく展開の過程を考えれば分かりやすいですね
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度目評価される
05084952013/12/06(金) 18:20:48.66
*レスありがとうございました。
0509デフォルトの名無しさん2013/12/06(金) 20:31:16.88
lisp勉強し始めたんだけどdisassembleできるんだねこれ(驚嘆)
0510デフォルトの名無しさん2013/12/06(金) 21:26:47.55
ディスアセンブラが規格に入ってる唯一の言語 Common Lisp
0511デフォルトの名無しさん2013/12/06(金) 21:40:00.42
common lispの闇は深い
0512デフォルトの名無しさん2013/12/06(金) 23:20:44.61
>>506
```,,,0 みたいのがあったとき、右端の`と左端の,がペアになるよ、という意味だと思う。

>>505
r5rs の場合 ```,,,0 == ``,,0
CL の場合 ```,,,0 == 0
というわけで違う。
05135032013/12/07(土) 07:23:03.95
>>512
ありがと。今迄どちらも同じだと思いこんでた。
0514デフォルトの名無しさん2013/12/07(土) 12:44:23.23
なに、CLとschemeってバッククオートの挙動違ったのか!
0515デフォルトの名無しさん2013/12/07(土) 21:44:31.74
初歩的でスマンのだけど、floatのビット表現ってどうやって出すんだろ
formatで出来るかなと思ったんだがggってもよくわからんかった
0516デフォルトの名無しさん2013/12/07(土) 23:54:57.88
>>515
これかな。

浮動小数点数のIEEE754形式への変換
d.hatena.ne.jp/sile/20101023/1287829698

「"Common Lisp" float bit」でググって発見。
0517デフォルトの名無しさん2013/12/08(日) 16:58:21.34
>>516
ありがとうありがとう・・・!single-floatもちょっと調べてできた
ggり方が悪かったようだ、反省
0518デフォルトの名無しさん2013/12/08(日) 23:45:31.37
clisp
acl
ecl
ccl
cmucl
sbcl
maximaで使いたいけどれが最速ですか?
0519デフォルトの名無しさん2013/12/09(月) 04:42:12.69
maximaはよくわからないが
とりあえずacl cmucl sbcl が早い
aclは高いから論外だな
0520デフォルトの名無しさん2013/12/09(月) 05:05:19.45
ありがとうございます。
aclは無料版です。
Macのダウンロードしたら派手なGUIでビックリ
0521デフォルトの名無しさん2013/12/15(日) 23:18:14.13
(let* ((para1 3)
(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.12
途中で送ってしまった。
clozure 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
sbclは
#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
>>523
検証ありがとうございます。ideone(clisp)でもそうなりました。
またdotimesのpara1を3に変えると、なぜか正解になるので、やっぱりバグみたいですね。
0525デフォルトの名無しさん2013/12/16(月) 23:48:39.98
arm linux clozure cl ver 1.9が出ていたので、インストールして確認したら、
ちゃんと修正されていました。
0526デフォルトの名無しさん2013/12/20(金) 21:31:16.63
(c == '-')ってすごく顔文字みたい
0527デフォルトの名無しさん2013/12/20(金) 21:35:22.36
かわいい
0528デフォルトの名無しさん2013/12/20(金) 21:53:59.66
誤爆しました
0529デフォルトの名無しさん2013/12/21(土) 10:13:46.31
和んだ
0530デフォルトの名無しさん2013/12/21(土) 18:25:01.78
`(,`(,`(,"-"))) 僕イモムシ

((("-"))) ワワッ評価されちゃった
0531デフォルトの名無しさん2013/12/21(土) 20:29:24.35
リストの区切りが空白文字なのは地味に嬉しい
0532デフォルトの名無しさん2013/12/25(水) 04:26:58.07
最近気が付いたんだがLispがあればCSVとかいらなくなるんだな
始めに(defun つけてうまくかっこつけてスペースでデータ分けれるし
これがデータとしてのコードとか言われる由縁なのか
0533デフォルトの名無しさん2013/12/26(木) 21:32:26.90
はぁ?
0534デフォルトの名無しさん2013/12/26(木) 22:15:20.06
ひぃっ!
0535デフォルトの名無しさん2013/12/26(木) 22:16:08.90
ふぅ…
0536デフォルトの名無しさん2013/12/26(木) 22:28:47.47
へぇー
0537デフォルトの名無しさん2013/12/26(木) 22:46:00.55
ほ、ほーっ、ホアアーッ !! ホアーッ !!
0538デフォルトの名無しさん2013/12/27(金) 20:06:48.14
deleteってcar部消えないの?hyperspec読んでもよくわからんかった

(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
>>538
与えた配列は結果を構築するために再利用されうるという意味で破壊的なのであって、あくまで返り値が delete の結果。
Side Effects の項に書いてあるのはそういう意味。
0540デフォルトの名無しさん2013/12/27(金) 20:24:14.87
まあ、nconcとnsubstitute以外は副作用を期待して使うなって話もあるしね
0541デフォルトの名無しさん2013/12/27(金) 21:37:08.52
なるほどねーthx
0542デフォルトの名無しさん2013/12/31(火) 22:58:19.55
・setq のような special form ってユーザー定義可能なんでしょうか?
・以下のクロージャを (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.10
・以下のクロージャを (myfun 10) のようにコールする方法はありませんか?

setqじゃなくてsetfを使うならsymbol-functionを使って
(setf (symbol-function 'myfun)
(let ((cnt 0)) (lambda (delta) (setq cnt (+ cnt delta)))))
0544デフォルトの名無しさん2014/01/01(水) 00:59:21.51
(setf (fdefinition 'myfun) (let (lambda (.....
じゃだめですかね?
0545デフォルトの名無しさん2014/01/01(水) 01:00:22.05
まちがえた
0546デフォルトの名無しさん2014/01/01(水) 01:04:13.61
lispビギナーより迎春
ttp://ideone.com/WsMzJM
0547デフォルトの名無しさん2014/01/01(水) 03:07:30.19
・setq のような special form ってユーザー定義可能なんでしょうか?
special formと呼ばれるものは仕様で決まっていてユーザー定義できないが、使う側から見ればspecial formとマクロとは変わらないのでマクロを定義すれば望むことはできるはず
0548デフォルトの名無しさん2014/01/01(水) 03:14:08.32
テキストデータを高速にパースして読み込むライブラリって何か定番あるんですかね
適当にread-lineとか使って自分で書くと数十MBくらいのファイルでもう速度が気になりだしてしまう
05495422014/01/01(水) 10:33:34.61
みなさん、ありがとうございます。
マクロの使い方も分かってきました。
(defmacro mysetq (x val) `(set 'x ,val))
05505422014/01/01(水) 13:27:09.69
訂正、
(defmacro mysetq (x val) `(set ,x ,val))
でした。
05515422014/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
>>551
(defmacro mysetq (x val) `(set ',x ,val))
setqというのはset + quoteらしい。
0553デフォルトの名無しさん2014/01/02(木) 18:56:45.45
closのインスタンスのプロパティーを表示させたいんだけどいい方法ない?
例えば、クラスfooのインスタンスがa=1,b=2のプロパティーを持っていたとすると。
#<foo (a=1, b=2)>
みたいに表示される関数が欲しいんだけど。
0554デフォルトの名無しさん2014/01/02(木) 18:58:35.64
書き込んだ瞬間に思い出したinspectでいいね。
スレ汚しすまん。
0555デフォルトの名無しさん2014/01/03(金) 13:48:08.21
>>552
ああ、defmacro テンプレートでの「,」(評価する)は対応するパラメータ記述そのままに置き換えられるんですね。
最初混乱しましたが、やっと分かってきました。
0556デフォルトの名無しさん2014/01/04(土) 15:23:56.51
パッケージの使い方ややこしすぎて混乱する
何か良い説明してる所はないのかな
0557デフォルトの名無しさん2014/01/04(土) 20:12:58.18
解決しました
0558デフォルトの名無しさん2014/01/06(月) 18:02:32.72
common lispのループマクロは
pythonのリスト内包表記のように
[(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.28
単純に考えたら2重ループになってしまった。
Common 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
やっぱりloopを二重にしないと出来ないんですね
納得しました
0561デフォルトの名無しさん2014/01/09(木) 17:43:04.87
(defmacro loop* (a b c x-max d e f y-max)
`(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.58
次は3重以上も対応するようにしてみよう
0563デフォルトの名無しさん2014/01/09(木) 19:22:39.83
(defmacro loop* (&rest arg) (gen-nested-loop (group arg 4)))

(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
Common Lisp で ssh 用のライブラリはありますか?
ネット上を探してみたのですが見付かりませんでした。。。
0565デフォルトの名無しさん2014/01/11(土) 18:36:57.00
"hoge"を:hogeにする方法ってありますか?
0566デフォルトの名無しさん2014/01/11(土) 19:36:18.76
(intern (format nil ":~a" "hoge"))
こーゆーこと?
0567デフォルトの名無しさん2014/01/11(土) 19:41:57.68
それだと|:hoge|になるので違います
0568デフォルトの名無しさん2014/01/11(土) 20:41:40.60
(intern "HOGE" :keyword)
;=> :HOGE

:hoge は keyword:hoge の略記。
0569デフォルトの名無しさん2014/01/11(土) 20:47:37.44
おお!
勉強になりましたありがとうございます
0570デフォルトの名無しさん2014/01/11(土) 21:13:58.46
>>568
素晴らしい
0571デフォルトの名無しさん2014/01/13(月) 11:19:27.04
苫米地英人って胡散臭い人だと思っていたけど、LISPでは偉い人なの?

Wikipediaの引用で悪いけど
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.66
凄そうに書いてはあるけど、凄いうちに入るのかなぁ?
0573デフォルトの名無しさん2014/01/13(月) 16:19:36.03
ジャストシステムの時点でショボイが
その海外事務所のサブはかなりショボイ感
0574デフォルトの名無しさん2014/01/14(火) 00:13:40.43
ファールマン教授、そんなショボイとこの所長やってたの?
0575デフォルトの名無しさん2014/01/14(火) 00:41:55.93
お前らの所属と経歴はどうなんだよw
0576デフォルトの名無しさん2014/01/14(火) 09:37:10.21
省略名がMITな日本の大学の僕からみればCMUに行けるだけでもすごいなぁ
0577デフォルトの名無しさん2014/01/14(火) 13:38:27.14
苫米地すごいな
0578デフォルトの名無しさん2014/01/14(火) 14:21:05.51
室蘭?
0579デフォルトの名無しさん2014/01/14(火) 18:43:04.48
なんで経歴そんなにすごいのにインチキおやじになっちゃったんだ?
0580デフォルトの名無しさん2014/01/14(火) 18:55:11.89
鳩山とか見てたらだいたい理解できる
0581デフォルトの名無しさん2014/01/14(火) 22:52:58.99
>>580
すげー納得した
0582デフォルトの名無しさん2014/01/14(火) 23:31:28.02
苫米地ってkeyholetvも作ったんだよな。
アナログテレビ時代にアナログテレビが全部ネットで見れたソフト。
裁判になったら放送法の問題点があらわになるから訴えられるのを
待っていると言っていたが結局訴えられないままアナログ放送終わった。
0583デフォルトの名無しさん2014/01/15(水) 08:01:21.37
アスミンおめでとう
0584デフォルトの名無しさん2014/01/15(水) 08:38:11.01
なんでや!Lispとは関係な……くもないのか
0585デフォルトの名無しさん2014/01/15(水) 09:22:10.06
イメージキャラクターをLispエイリアンにしなかったのが敗因
0586デフォルトの名無しさん2014/01/16(木) 01:25:38.35
声優と結婚って楽しいのかなぁ?
0587デフォルトの名無しさん2014/01/16(木) 09:47:17.67
やっぱりエッチの時の声がな

ちびまる子ちゃんはやめてけれ
0588デフォルトの名無しさん2014/01/17(金) 08:20:56.32
コバペロ「ンーwwwwwwwwwwwwwwwwwwwwwwww」
0589デフォルトの名無しさん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+"はどうでしょう。

通常^は対象文字列の先頭のみにマッチします。
そこで、(?m)によって^が対象文字列中の改行後にもマッチするようにします。
\\sは(スペース、タブなどの)空白文字一般にマッチします。
0591デフォルトの名無しさん2014/01/18(土) 13:55:02.64
>>589
(regex-replace-all (create-scanner "^\\t" :multi-line-mode t) string "")
05925892014/01/19(日) 01:09:03.37
>>590-591
ありがとうございます
複数行にわたる処理のオプションを適切に指定しなければならなかったのですね
\sについてもありがとうございました
0593デフォルトの名無しさん2014/01/19(日) 15:54:28.21
Lispエイリアンがすごく愛らしく思えてきた。疲れてるのかな
0594デフォルトの名無しさん2014/01/19(日) 17:41:08.96
>>593
スカリーさんが居ないのがLisp界隈の不幸なのかもしらん
0595デフォルトの名無しさん2014/01/22(水) 19:25:06.40
lispacheって何がすごいの?
http://www.crl.co.jp/crlodev/product/SUN_Lispache.pdf
これの特徴みると突っ込みどころばっかりだけど
0596デフォルトの名無しさん2014/01/23(木) 00:15:59.45
>>595
とりあえず突っ込みどころをつっこんでくれ
0597デフォルトの名無しさん2014/01/26(日) 00:52:35.16
仕事でcommon lisp使ってる人ってその前に何の本読んでから使ってるんでしょう
実践/実用 Common Lisp のどちらか読んでるのか、あるいはSICPとかから入っていろいろと読んでいるのか
どれくらい読んでると最低限仕事に使えてるものなのかが知りたいです
0598デフォルトの名無しさん2014/01/26(日) 01:26:07.91
処理系のマニュアルも結構読むのでしょうか
0599デフォルトの名無しさん2014/01/26(日) 11:46:27.34
>>597
CLTL2
処理系のソース
各種ライブラリのソース

いつでも参照するのが CLHS
実践/実用 Common Lisp とかは, ずっと後になって斜め読みした程度.

>>598
> 処理系のマニュアルも結構読むのでしょうか
ふつう読むだろ?
gcc とかだって, 処理系マニュアル読まないと使えないんじゃないの?
0600デフォルトの名無しさん2014/01/26(日) 15:35:46.00
"~/hoge/huga.lisp"を"/home/user/hoge.lisp"にする関数を教えて下さい。
elispではexpand-file-nameで出来たのですが。
0601デフォルトの名無しさん2014/01/26(日) 15:47:06.90
ずっとLinux上でコードを書いていて
ファイル中で(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.93
ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/tutorial/cl-file-system.pdf
0603デフォルトの名無しさん2014/01/26(日) 18:22:50.31
>>602
レスありがとうございます。
ふむふむ、この方はディレクトリを監視するプログラムにおいて
監視先ディレクトリを#+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
>>603
パスネームを使えばいいのでは。どうしても文字列と "~/" を使わないと駄目なの?

(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.79
あと、>>603のコードが「どちらでも動く」というのは、たまたまその処理系が
Windowsでも "/" をディレクトリ区切り文字として解釈する実装になっている
からではないかと。厳密には可搬性は無いと思う。
0606デフォルトの名無しさん2014/01/26(日) 20:54:37.61
>>602
hogeキチガイは早く消えろ。
ふむふむじゃねーよクズが。
0607デフォルトの名無しさん2014/01/26(日) 22:01:26.53
>>599
>CLTL2
>処理系のソース
>各種ライブラリのソース
> CLHS
なるほど、規格とか処理系自体に関することの方なんですね。

>マニュアル
読むか読まないかだったらそうでしたね…(つまらない質問ですみません)。読むというのは必要になった時都度該当箇所を読む感じなのでしょうか、それとも頭から読んでしまっていますか?

どの程度の人数・期間の、(差し支えなければ)どういった種類のプロジェクトで使ったのかも興味があるので教えてもらえると嬉しいです
0608デフォルトの名無しさん2014/01/26(日) 22:25:03.12
>>607
業務で CL 使うなんてのは,

o やたら, 仕様がコロコロ変わるけど, 納期の壁はいかんともしがたい
o 該当jobに精通したエキスパートが少ない
o マクロ, リーダーマクロに頼りきりって取り敢えず動作させる

てな, プロジェクトにしか使えないっす

現実的には, 実験要素てんこ盛りの研究開発用のプロトタイピングが
ほとんど. メンバー数も, 多くて 5人程度

もしくは, 一人で思いっきり趣味に走れるプロジェクトとか
0609デフォルトの名無しさん2014/01/26(日) 22:29:32.33
lispは神秘のベールに包まれてるけど魔法じゃないからね
0610デフォルトの名無しさん2014/01/26(日) 22:34:19.41
>>607
追加

> 読むというのは必要になった時都度該当箇所を読む感じなのでしょうか
とりあえず, 目は通します.
少なくとも, 性能ネックになった場合,何とかなるかならないかを判断できる程度には
0611デフォルトの名無しさん2014/01/26(日) 23:37:53.95
>>607
はるか大昔、ある特殊なプログラミング言語環境(今で言うDSL)を Lisp で作ったり、
ウェブサーバ(HTTPサーバ)の開発プロジェクトに関わった事があるなぁ(どちらも
民間企業の業務)。Lisp じゃないけど Scheme(STk) で弁当屋の売上管理システム
作ってた人がいたっけ。雑誌名は忘れたけど紹介記事が載ってたな。何で Scheme
で!?って思ったけどw

>>608
だよね〜
0612デフォルトの名無しさん2014/01/28(火) 01:15:12.96
>>608
>>611
なるほど、やはりそういうピーキーな使い方になるんですね。
質問を重ねて申し訳ないのですが、業務で使うという場合だと他の言語と比べるとどのへんが使いにくい点になるんでしょう? ライブラリとかノウハウの充実度なのでしょうか。それとも納品の都合なども絡んで来るのでしょうか。
0613デフォルトの名無しさん2014/01/28(火) 11:53:32.44
>>612
> 業務で使うという場合だと他の言語と比べるとどのへんが使いにくい点
メンテナーの確保
0614デフォルトの名無しさん2014/01/28(火) 11:56:30.75
ライブラリについては良く聞く話だな
ライブラリに依存しない部分的な処理だけLispで書いてもいいのかもしれんが
0615デフォルトの名無しさん2014/01/28(火) 18:43:19.25
fooからbar,barからfooパッケージを使いたいときに
http://codepad.org/kQeZJjBl
こういう書き方をするとループしてしまうみたいです
fooからbar,barからfooを使うもっと良い書き方はありますか
それとも設計が悪いですか
0616デフォルトの名無しさん2014/01/30(木) 00:09:44.42
規格を調べる気にもならない。設計をやり直した方がいい。
0617デフォルトの名無しさん2014/01/30(木) 01:06:12.60
やっぱりそうですね
すっきりしました
0618デフォルトの名無しさん2014/01/30(木) 01:40:58.01
なるほどメンテナー…。
参考になりました。お答えいただいた方々ありがとうございました。
0619デフォルトの名無しさん2014/01/30(木) 19:51:55.38
Common Lisp初めてみたいんだけどSBCLッテイウノデイイノ
0620デフォルトの名無しさん2014/01/30(木) 22:36:59.95
いいんじゃない
なんならSBCLとclisp両方入れてみたら?
0621デフォルトの名無しさん2014/01/31(金) 02:35:49.67
rubyのobject.methodsみたいにCLOSオブジェクトに適用可能なメソッドを調べ上げる方法はないんでしょうか。
0622デフォルトの名無しさん2014/01/31(金) 13:21:29.91
>>621
MOP の SPECIALIZER-DIRECT-METHODS とか SPECIALIZER-DIRECT-GENERIC-FUNCTIONS
とかじゃダメ?
CLOS が PCL ベースのやつだとサポートしてそうだが…
0623デフォルトの名無しさん2014/02/01(土) 01:11:52.90
>>622
ありがとうございます!まさにこれでした。

(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
>>623
頭も悪い、やる気もないならプログラミングなんかやめれば?
お前みたいな奴が書き込むだけでスレのレベルが下がるんだよ
0625デフォルトの名無しさん2014/02/01(土) 02:15:34.57
最近、スルー検定が増えたな
0626デフォルトの名無しさん2014/02/01(土) 03:46:57.98
>>623
感謝とかいらないからhoge厨は二度とくるな。
0627デフォルトの名無しさん2014/02/01(土) 04:26:15.64
オブジェクトのスーパークラスやサブクラスを取得するのにもmoptilitiesが必要なんだよな。
流石にそういうのは標準で入れておいてほしい。
0628デフォルトの名無しさん2014/02/01(土) 08:19:09.67
>>624
質問です、よろしくお願いします

カラス、下痢と言わずに
カー、クダーというのはおかしいと思います
どしてそんな非国民言葉がリスプでは使われているんですか?
0629デフォルトの名無しさん2014/02/01(土) 08:24:51.64
>>627
(use-package :sb-mop) とか (use-package :mop) とかするだけちゃうん?
0630デフォルトの名無しさん2014/02/01(土) 10:17:42.67
>>628
ポッポと管だと国家が滅ぶからだろ
0631デフォルトの名無しさん2014/02/01(土) 12:36:45.78
first, restの方がすぐ意味が分かっていいよな
0632デフォルトの名無しさん2014/02/01(土) 12:41:27.12
概念として異なる
俺はcar/cdrがいい

一穴主義、女は一人、セルも一つ!

restだあ?
浮気者!
0633デフォルトの名無しさん2014/02/01(土) 13:49:07.76
>>632
そのレジスタが残ってるCPUがまだ現役だったらかなり怖い
0634デフォルトの名無しさん2014/02/01(土) 16:15:21.51
firstとrestは5字と4字なので並べるとズレて気持ち悪い
0635デフォルトの名無しさん2014/02/01(土) 18:37:39.24
LP64な環境だとレジスタが64ビットでintが32ビットだからレジスタに2ワード入るのでちょっとそれっぽい
0636デフォルトの名無しさん2014/02/02(日) 13:45:14.44
>>635
ポインター 2 個入らんやん
0637デフォルトの名無しさん2014/02/02(日) 13:50:51.60
>>636
ヒープを一回しか取得しないなら32ビットオフセット2つで管理すればよくね?
そんなのやだけど
0638デフォルトの名無しさん2014/02/02(日) 13:54:00.20
32ビットモードでも64ビットレジスタを使うことは出来るのです!
インストラクションにサイズプレフィックスが付くのでちょっと非効率かもしれないけど。
0639デフォルトの名無しさん2014/02/02(日) 14:10:34.88
>>638
それLP64いわなくね?
0640デフォルトの名無しさん2014/02/02(日) 14:13:36.01
IP32L64ェ
0641デフォルトの名無しさん2014/02/02(日) 19:32:47.59
>>638
SPARC とか Power とか ARM あたりだと無理だよね
0642デフォルトの名無しさん2014/02/02(日) 23:38:40.45
>>638
x86 の話?
REX prefix って 32bit モードだと別の命令にマップされてない?
x32 と勘違いしてない?
0643デフォルトの名無しさん2014/02/08(土) 22:16:26.56
64ビット符号無し整数って使えないの?
リバーシをビットボードで扱ってみたいんだけど
0644デフォルトの名無しさん2014/02/08(土) 22:34:16.51
SBCLかCMUCLのどっちが数値計算ライブラリが多いの
0645デフォルトの名無しさん2014/02/11(火) 00:30:15.65
ライブラリが規格に沿って書かれていればどちらでも動くと思うが・・・
線形代数ライブラリならf2clのlapackを使えばいいのかな
0646デフォルトの名無しさん2014/02/11(火) 01:24:35.55
Emacsで選択範囲部分の四則計算を行なえるようにしたいのですが、
どのように記述すれば良いでしょうか?

(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
>>646
こういうこと書くと吝嗇・非友好的と取られるかも知らんけど、まずは下記のスレで聞いてきて

【GNU】Emacs Lisp 【Elisp】
http://toro.2ch.net/test/read.cgi/tech/1382223056/
0648デフォルトの名無しさん2014/02/11(火) 12:44:52.22
>>647
あ、はい
了解しました。
0649デフォルトの名無しさん2014/02/11(火) 22:39:49.69
lisp無職はlispで金稼ごうとは考えないの?
0650デフォルトの名無しさん2014/02/11(火) 22:55:30.84
最近は Clojure を使う仕事がほんの少しはあるからそっちかな
0651デフォルトの名無しさん2014/02/12(水) 06:50:46.48
女が稼いでくれるから
0652デフォルトの名無しさん2014/02/12(水) 10:53:32.93
Lispエイリアンってパブリックドメイン立ったのか
0653デフォルトの名無しさん2014/02/12(水) 10:54:06.38
×立った
○だった
0654デフォルトの名無しさん2014/02/12(水) 14:10:02.22
あんなもんに版権設定してどうするw
0655デフォルトの名無しさん2014/02/12(水) 14:16:52.52
Lispを学べば東大女とやれる
俺はそう聞いたから今年からLispをはじめた
チンチンいじりながらコンスセル
今日悟った。リストなんて実は無いんだ!
それはたかだか一つのセルの表現形式でしかないんだと。
そして思ったね。
東大女はこんなおれにクラっときて足を開くんだと。
頑張るぜ
0656デフォルトの名無しさん2014/02/12(水) 15:39:39.82
東大女となんてやりたいか?
0657デフォルトの名無しさん2014/02/12(水) 18:51:15.34
学歴高い女とやるのは征服感があってなかなかよろしい
0658デフォルトの名無しさん2014/02/12(水) 19:14:41.64
>>654
漫画家の描いたキャラなのにわざわざパブリックドメインだと明記するのは珍しくね?

確かに版権気にするようなものじゃないけど
0659デフォルトの名無しさん2014/02/16(日) 22:50:50.89
(ql:quickload :cl-ppcre)
(ppcre:scan "[^+-<>]" "abc") ;=> 0
(ppcre:scan "[^+-<>]" "...") ;=> NIL

SBCLですが二番目がNILになってしまいます。
0が帰ってきて欲しいのですが、皆さんの環境ではうまく動きますか?
0660デフォルトの名無しさん2014/02/16(日) 22:52:10.38
[^-+<>]
06616592014/02/16(日) 23:02:30.83
>>660
エスケープはバックスラッシュが2個いるのですね。
ありがとうございました。
0662デフォルトの名無しさん2014/02/17(月) 12:44:39.53
LISPっぽいの作っているけどGC用の情報ってセルの構造体に含ませればいいかな
初めて作るもんでよくわからんのだが
0663デフォルトの名無しさん2014/02/17(月) 14:52:16.93
ガベージとかガーベージとかで探せば色々ある
http://seesaawiki.jp/w/author_nari/
0664デフォルトの名無しさん2014/02/17(月) 16:02:07.64
>>663
いやアルゴリズムはわかるんだわ。
マークアンドスイープってやつにしようと思うんだけど、
そのマークをどこにするかってことなんだ。
0665デフォルトの名無しさん2014/02/17(月) 17:25:51.59
セルの構造体に含ませる方法でいいよ
0666デフォルトの名無しさん2014/02/17(月) 23:29:35.04
初めて作るんなら >>665 でいいと思う。
もっと手抜きして Boehm GC もいいと思う。
0667デフォルトの名無しさん2014/02/17(月) 23:59:51.00
>>666
たとえば他にはどんなアプローチがありますか
06686662014/02/18(火) 01:10:51.06
ビットマップを別に用意して、そこにマークビットを置く方法がある。
キャッシュメモリとか OS の copy on write とかとの相性で、
そっちの方が高速に動作する。
もちろん上手く実装すれば、だけど。
0669デフォルトの名無しさん2014/02/18(火) 10:46:22.88
まー、そういったのは高速化手法であって、最初にとにかく作ってみようと
いう人があまり意識してもしょうがない。

あと、Lispとかの実装技法としては、オブジェクトじゃなくポインタの側に情報を
持たせる方法もあるけど、アーキテクチャに依存してトリッキーになるから、
オブジェクトの側に持たせればいい。
0670デフォルトの名無しさん2014/02/18(火) 13:31:23.51
>>668
>>669

Thx!おkわかった実践してみゆお
0671デフォルトの名無しさん2014/02/19(水) 02:33:55.28
オブジェクトに持たせると、forkしたあとgcするとぐんにょりするのだ…。
0672デフォルトの名無しさん2014/02/19(水) 15:56:40.97
再帰は楽しいが、遅いんだね
再帰的定義をした後にwhile版を定義して速度比較しながら勉強してる。
0673デフォルトの名無しさん2014/02/19(水) 18:01:30.69
関数プログラミングの勉強なら、再帰を直接使わず高階関数を使って、
再帰を陽に書くのを減らしてゆく、というのが王道。
0674デフォルトの名無しさん2014/02/19(水) 18:47:15.84
>>672
末尾再帰最適化する実装ならそんなに変わらないと思っていたが、そうでもないのかな。
0675デフォルトの名無しさん2014/02/19(水) 19:25:05.78
>>673
>>674
初心者なので言われていることがサッパリわからない。言葉だけでも頭の中に入れておく。ダンケ
0676デフォルトの名無しさん2014/02/19(水) 19:55:33.56
>>674
末尾呼び出しをジャンプにする最適化が効いてるかどうかをチェックしてからの
比較でないと、なんとも言えないと思う。
0677デフォルトの名無しさん2014/02/19(水) 20:19:04.45
> 末尾再帰最適化する実装ならそんなに変わらない
賢いコンパイラなら同じコードに落ちるけど
0678デフォルトの名無しさん2014/02/19(水) 20:31:30.96
単に末尾再帰で書いてないとか
0679デフォルトの名無しさん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.18
処理系実装の話になると元気になるの、ワロタ
0681デフォルトの名無しさん2014/02/19(水) 23:34:14.35
>>679
この書き込みを理解できるようになるのが一つの目標だ
ガンバるぞ
0682デフォルトの名無しさん2014/02/21(金) 01:19:57.92
再帰とループが違う例としては動的すぎる気が。もっと簡単な例ないかな。
0683デフォルトの名無しさん2014/02/21(金) 16:30:11.86
ttp://hylang.org/

使っているディストリに最近入った。

python で書かれた lisp 方言
0684デフォルトの名無しさん2014/02/21(金) 16:51:17.12
pythonをS式で書けるようになっただけ?
0685デフォルトの名無しさん2014/02/22(土) 17:57:38.48
初心者はこっちだったのか
0686デフォルトの名無しさん2014/02/22(土) 19:11:07.09
お前らcl21のことどう思ってんの?
0687デフォルトの名無しさん2014/02/22(土) 21:41:51.04
頭が悪いからなかなか進めない
頭が良い人はいいなあ。
折れもさんざん頭が良いと言われてきたけれど、それはなんとなく「普通」の人と較べてで、
パッパと進んでいくには
「人間じゃない」レベルの頭の良さがいる。
はあ、そう生まれた人はいいなぁ
ま、仕方ないのでじっくりと時間をかけてなんどもやって、少しずつ直感化していく。
0688デフォルトの名無しさん2014/02/22(土) 22:38:44.89
>>687
みんな過程ではそう思う。
どう頑張っても積み上げ以上のことはできないんだから。
0689デフォルトの名無しさん2014/02/22(土) 23:04:34.71
適当なもの作って「俺意外に出来るな」って勘違いすることも大事だと思うよ
0690デフォルトの名無しさん2014/02/22(土) 23:21:29.37
訳分からん→時間をかけてようやく理解→全能感→さらなる課題を発見→訳分からん→以下ループ
0691デフォルトの名無しさん2014/02/22(土) 23:31:58.15
あるある。
0692デフォルトの名無しさん2014/02/23(日) 21:57:11.74
「リスト遊び」何とか最後までやった。本の後半を消化するまで後二週間くらいかかるかな。
しめて二ヶ月。
次は「初めての人のためのLisp」か「Schme手習い」をやってみよう。もう、どっちも手元にある。
亀の歩みだけども、じりじり前進。
0693デフォルトの名無しさん2014/02/26(水) 11:01:38.93
Windows(ccl) で cl-mysql を使いたいのですが、UTF8の文字が ? になってしまいます。
MySQL、ccl、slime は UTF8 に設定しているつもりなのですが他にも設定が必要なところがあるのでしょうか。
0694デフォルトの名無しさん2014/02/26(水) 20:31:57.27
chcp 65001
0695デフォルトの名無しさん2014/02/26(水) 21:44:15.55
コマンドプロンプトとか言うゴミみたいなターミナルはどうにかして欲しいところ
0696デフォルトの名無しさん2014/02/27(木) 01:18:36.79
なるほどコマンドプロンプトの文字コードの設定があるんですね。
これはどのように設定すれば良いのでしょうか。
slime とかに設定するものなのでしょうか。
0697デフォルトの名無しさん2014/02/27(木) 06:37:58.06
>>696
>>694
0698デフォルトの名無しさん2014/02/27(木) 15:59:55.05
set-macro-characterとかで設定したリードマクロって
パッケージをまたいでグローバルに作用しているようなんですが、
自分でリードマクロを定義すると他のライブラリを読み込んだときかなりの割合でマクロ文字が衝突します。
安全なリードマクロの書き方ってあるんでしょうか。
0699デフォルトの名無しさん2014/02/27(木) 23:12:43.63
俺は使ったことないんだけど、
readtable まわりを弄るんだったと思う。
0700デフォルトの名無しさん2014/03/01(土) 17:22:51.69
>>698
他のライブラリを読み込むときだけリードテーブルを初期状態に戻せばいいのかなと。

(let ((*readtable* (copy-readtable nil)))
(ql:quickload "my-favorite-library"))
0701デフォルトの名無しさん2014/03/01(土) 22:38:48.49
なるほど
0702デフォルトの名無しさん2014/03/02(日) 22:31:51.65
>>698
named-readtablesとかcl-syntaxとか使って管理
使うときだけ有効化
0703デフォルトの名無しさん2014/03/03(月) 09:29:44.65
Lispの悟りについて語ってください
0704デフォルトの名無しさん2014/03/03(月) 10:23:15.92
0705デフォルトの名無しさん2014/03/03(月) 12:40:41.26
無を発掘して知ることだ。
0706デフォルトの名無しさん2014/03/03(月) 15:49:19.70
nil を煮る。
0707デフォルトの名無しさん2014/03/03(月) 20:36:35.05
ウェイトレス:お飲み物はコーヒーで良いですか?
Lisper:T
その後紅茶を黙って飲む事が悟りだ
0708デフォルトの名無しさん2014/03/03(月) 23:45:01.00
開発環境の設定の質問をします
emacsで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
>>708
そのページに書いてある設定でいいと思うけど?

(setq browse-url-browser-function 'w3m-browse-url)

試してみたけど、この設定で slime-documentation-lookup と common-lisp-hyperspec-format の両方に反映されたよ。
0710デフォルトの名無しさん2014/03/04(火) 22:13:36.77
common lispのバッククォートとアンクォートの動作がよくわかりません
(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.26
>>686
CLには正規表現やらネットワーク周りやら標準では入ってないので
そういうライブラリを組み込んだ上で新言語と称したものがあってもいいと思うし
初心者にはアピールすると思う。
0713デフォルトの名無しさん2014/03/05(水) 00:33:38.51
私にはLispを信仰することはできなさそうだ
0714デフォルトの名無しさん2014/03/05(水) 00:41:55.92
>>709
すみません
確かに両方に反映されていました
失礼しました
0715デフォルトの名無しさん2014/03/05(水) 17:12:07.51
>>711
ありがとうございます
backquoteを仕様通りに展開するとうまく動作するのは分かりましたが
let over lambdaで言われてるように動作を予測するのは難しいですね
外側のbackquoteと内側のunquoteを対にして読めばいいんでしょうか
0716デフォルトの名無しさん2014/03/06(木) 16:58:19.90
今日からScheme手習いで勉強はじめた
訳本より原著の方が良さげだけど高いからいいや
0717デフォルトの名無しさん2014/03/08(土) 00:32:28.07
原著は口語英語チックで俺はちょっとキツかった。
訳本の方が良いと思う。
0718無職2014/03/08(土) 18:03:46.85
だれか教えて下さい。
clispでの入力履歴を、
前回に立ち上げていた時までさかのぼるには
どうするのでしょうか。
再インストールしたら出来なくなりました。
よろしくおねがいします。

環境
osx 10.6.8
CLISP 2.49
0719デフォルトの名無しさん2014/03/08(土) 18:11:45.49
rlwrap使えばいいよ
0720無職2014/03/09(日) 11:19:13.76
>>719
ありがとうございます。
忘れていました。思い出しました。
素早い返答、感謝します。
2ちゃんていいですね。
0721デフォルトの名無しさん2014/03/09(日) 11:46:07.13
>>720
悶絶フグの悟りもいいぞ
0722デフォルトの名無しさん2014/03/09(日) 13:24:10.13
Scheme手習いってコモンリスパーにも役たつの?
0723デフォルトの名無しさん2014/03/09(日) 15:06:10.92
やくにたつ
0724デフォルトの名無しさん2014/03/10(月) 17:17:34.55
ていうか、再帰とリスト処理の基礎を徹底的にやる。どういうLisp方言かは関係ない。
0725デフォルトの名無しさん2014/03/10(月) 17:21:11.58
あれは徹底的にやるのはlambda式とクロージャが中心だけどな。
0726デフォルトの名無しさん2014/03/10(月) 17:30:57.07
ほぉ、そうなのか
0727デフォルトの名無しさん2014/03/10(月) 17:59:19.05
ラムダ式とクロージャはSeasonedじゃなかったか。
0728デフォルトの名無しさん2014/03/10(月) 23:49:19.86
http://www.youtube.com/watch?v=HM1Zb3xmvMc
0729デフォルトの名無しさん2014/03/11(火) 20:46:44.83
別のパッケージ同士でシンボルを使おうとしたらパッケージ名::シンボル名になってて
eqがtにならないので嵌ったんだけどこういうのはキーワードシンボルで扱えばいいの?
0730デフォルトの名無しさん2014/03/11(火) 22:05:11.78
>>729
キーワードでも良いけど、シンボルプール用のパッケージを別途作って
そのパッケージを件のパッケージ群からuseしても良い。
そういう用途ならexternしないで意図的にパッケージ名付でアクセスするのも衛生的で良いかもしれない
0731デフォルトの名無しさん2014/03/11(火) 22:11:53.08
そういうやり方は思い付かなかった
すっきり書けそうありがとう
0732デフォルトの名無しさん2014/03/12(水) 16:22:32.27ID:weuLszB+
hunchentootで今のURLを取得するにはどうすればいいですか?
0733デフォルトの名無しさん2014/03/13(木) 19:32:07.56ID:WEwvXz1V
こんどは、

Lisp Flavored Erlang
ttp://lfe.github.io/

だって。

なんだかんだ言って、lisp って人気者なんじゃね?
0734デフォルトの名無しさん2014/03/13(木) 20:43:18.96ID:hR60BOrR
erlangの根底の考え方大好きなんだけど文法がどうしてもなじめなかった自分はすげーうれしい
ちなみに同じ理由でMLとかHaskellもなじめない orz
0735デフォルトの名無しさん2014/03/16(日) 01:03:58.72ID:eFgBNCjO
loopマクロで
(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
(loop for i from 10 downto 1 collect i)
でいい?
0737デフォルトの名無しさん2014/03/16(日) 01:23:47.28ID:eFgBNCjO
専用のトークンあったのか
land of lispのloopマクロ周期表にもあったのに見逃がしてた
助かったよありがとう
0738デフォルトの名無しさん2014/03/17(月) 01:40:49.93ID:RttHywCL
ときどきでいいので upfrom や downfrom のことも思い出してあげてくだ(ry
0739デフォルトの名無しさん2014/03/19(水) 04:12:32.03ID:g+2MOTll
3年ぐらいCommon Lispから離れてたのですが
何か大きな変更ありました?
パッケージが色々変わったという噂は聞くのですが
0740デフォルトの名無しさん2014/03/23(日) 16:44:04.75ID:WrP7umWr
商と余りを求めるfloorとtruncateは名前が違うだけですか?
それとも何か違いがあるのでしょうか
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
'((1 a) (2 ab) (3 b) (4 a))
'((4 a) (1 ab) (1 a) (3 c))
のような二つのリストに対して
equalなものだけを抽出したリスト
'((1 a) (4 a))を返したいのですが
lispらしいやり方ってどういうものですか?
0743デフォルトの名無しさん2014/03/23(日) 18:16:39.97ID:R1nWQ7zs
(intersection '((1 a) (2 ab) (3 b) (4 a)) '((4 a) (1 ab) (1 a) (3 c)) :test #'equal)
0744デフォルトの名無しさん2014/03/23(日) 18:22:29.36ID:yZpn4CJQ
>>743 ありがとうございます!
お、おそろしい...(笑)
そんなに簡単にできるとは...
0745デフォルトの名無しさん2014/03/23(日) 18:43:49.82ID:wmMizYQu
>>744
intersection について、注意点が二つ。

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
>>745
なるほど、、注意します。

一覧のページ、助かります!
ありがとうございます。
0747デフォルトの名無しさん2014/03/23(日) 19:40:17.68ID:WrP7umWr
>>741
ありがとうございます。知りませんでした。勉強になります。
0748デフォルトの名無しさん2014/03/23(日) 22:17:49.62ID:Od1LbvNu
関数fとgがあるときにfの中でg、gの中でfを呼び出したら
どっちかを先に定義しないとダメだけどそれだと先に定義したほうで警告が出てしまう
これをfletやlabelsを使う以外にうまく書く方法はありますか
0749デフォルトの名無しさん2014/03/23(日) 22:51:07.67ID:l/Ev+gij
clips だとそもそも警告でない。
SBCL なら
(declaim (ftype function g))
とか書くといいよ。
0750デフォルトの名無しさん2014/03/23(日) 23:03:18.83ID:Od1LbvNu
ありがとうございました
declaimは型宣言で複雑だと思って避けてましたが省略できるんですね
0751無職2014/03/24(月) 14:40:40.32ID:02bTSQQc
CLOSの疑問。
スロットオプションの :initarg :reader :writer など冗長だと思いました。
構造体のコンストラクタやメンバへのアクセサ、型判定関数の
自動生成などは便利だと思うのですが、CLOSはなぜこうなのでしょうか?
いきさつなど、わかる方いますか?
また、CLOSに限らずですが、SETFを徹底的に使いまわすのはなぜですか?
クラスにでも構造体にでもメンバはすべて、
読み出し関数と代入関数の自動生成、以上。
と、してくれたら明快なのにと思ってしまいます。
私が無知なのでしょうか?教えて下さい。
0752デフォルトの名無しさん2014/03/24(月) 15:13:02.11ID:or0yrghg
CLOSはもともとLisp向けのOOPLとして設計されたのではなくて、
Lisp向けOOPLS群を記述するための最小メタOOPLとして設計された。

だから自動生成するための道具は揃えたから。自動生成が欲しければ自分で書いてねって主義。
みんなでいいの作ったらそれを集めて取捨選択すればLisp向け標準OOPLが出来るだろうと。
かつてのLispがそうだったように。

けどCLOS作ったらCLOSで良くなってしまって後が続かなかった。

自分で書くと言っても難しくない?って疑問への答えがPortable CommonLoops実装。
0753デフォルトの名無しさん2014/03/28(金) 17:27:22.44ID:32AHAEOu
オブジェクトを1つ取り、2つにして返すリードマクロを書く方法はありますか?
例えば、$を欲しいリードマクロとすると次のように評価されるものです
'(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
グローバルな定数 *FEATURS* に、実装依存の機能とかを示すシンボルが
登録されているけど、それに最低ひとつ含まれている、その処理系を示す
シンボルを使う、という解でいいのかな?
0756デフォルトの名無しさん2014/04/01(火) 12:01:24.92ID:UNDMPLZZ
>>754
(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
Lisp使いは特別にワタシをナメさせてあげるわ
ただし、ワタシを擁護するのよ


       / ̄ ̄ ̄\
     /ノ / ̄ ̄ ̄\
    /ノ / /        ヽ
    | /  | __ /| | |__  |
    | |   LL/ |__LハL |
    \L/ (・ヽ /・) V
    /(リ  ⌒  ●●⌒ )   
    | 0|     __   ノ    あんたもナメたいんでしょ♪
    |   \   ヽ_ノ /ノ    
     ノ ノノ_.\___ _ ノ( ((
   ( ((/   /   ├─-..,
   )/ ゝ ¬  ,r一     )
    |ノ          r" /
   /             `y
   {  c    |   c    |
   ゝ     人     丿
    `- ー'   \ __,. ィ
      ゝ         / /
     /    ρ   /ノ
   /        〈
0758デフォルトの名無しさん2014/04/05(土) 09:24:45.61ID:bt1jJ+tr
これまで(lisp-implementation-type)と(lisp-implementation-verion)でがんばってたわ・・・
0759デフォルトの名無しさん2014/04/05(土) 15:12:59.06ID:LR1Bc15I
(setf a '+ b 1 c 2)として
(eval (a b c))が展開されて(+ 1 2)にならない。
(eval ‘(,a b c))ならできるんだけど、上の形で展開できるようにするにはどうしたらいいかな。
0760デフォルトの名無しさん2014/04/05(土) 15:27:08.99ID:8Jv1du8q
(funcall a b c) じゃダメなん?
0761デフォルトの名無しさん2014/04/06(日) 00:12:54.04ID:yLnxeWdp
(eval (list a b c))
0762デフォルトの名無しさん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:ww3yjEEU
基本的な事を色々勘違いしてないか?
0764デフォルトの名無しさん2014/04/06(日) 15:34:12.74ID:SoAcTpCI
>>762
その俺様evalをマクロで再定義するんだな。
0765デフォルトの名無しさん2014/04/06(日) 17:22:01.96ID:s8bztINg
このへんの話?
ttp://www.fireproject.jp/feature/common-lisp/details/function.html
0766デフォルトの名無しさん2014/04/07(月) 10:30:58.34ID:kcDbzeNy
>>725
へ?
へへへのへ?

まさか、最初から
(define foo
(lamda ()))
だからとか?
0767デフォルトの名無しさん2014/04/13(日) 21:19:18.03ID:opL5E73o
Lisp使いが滅多に表に出てこないのは社内で開発支援ツールを
作ったりしているからってホント?
それとも基本的には純粋に道楽で使うものなの?
0768デフォルトの名無しさん2014/04/13(日) 21:44:45.71ID:mU5oY4uE
>>767
皆シャイなんだってばよ!
0769デフォルトの名無しさん2014/04/13(日) 21:48:51.21ID:M5T5p9cM
自分でLisp実装するレベルじゃないとLisp使い名乗るのは恥ずかしい気がしてくる
0770デフォルトの名無しさん2014/04/13(日) 22:00:17.73ID:mU5oY4uE
>>769
おいらはCommonLispは作り込めないけど己をLisp使いだと思うけどなー
自前CommonLisp作れないと駄目とか言うと世界に何人いるんだろう?

#自前で多倍長整数とかRational表現組むだけで泣けるんですけど
0771デフォルトの名無しさん2014/04/13(日) 22:05:46.65ID:Wi1Vhylz
Lisp以外のこともちゃんと知っていないと、Lisp使いは名乗れないって思ってる
0772デフォルトの名無しさん2014/04/13(日) 22:27:31.17ID:CGkCJpU8
何を言ってるんだお前は。 LISPを使ってる人がLISP使いだろ。
そう、使おうとする心こそがLISP使いがLISP使いであるためのただひとつの資格さ!
0773デフォルトの名無しさん2014/04/13(日) 23:04:02.85ID:+E8lLswP
N88-BASIC使いの俺が通りますよ…
0774デフォルトの名無しさん2014/04/13(日) 23:05:39.98ID:kn+IksNB
Lispはマクロ用の言語として使われることが多いので、プログラマという感じじゃないのかも。
同じくマクロで使われるVBAもプログラマが使うわけじゃないし。
0775デフォルトの名無しさん2014/04/13(日) 23:59:56.09ID:eO4xe9Ol
単に母数が少ないだけじゃね
0776デフォルトの名無しさん2014/04/16(水) 01:22:56.76ID:JV30JiXQ
>>774
お前の言うマクロて何よ?
0777デフォルトの名無しさん2014/04/16(水) 01:34:48.64ID:4SiUGY6u
アレじゃね?CG屋にはLisperが多いっていう。
CGオーサリングツールにはLispのってるんじゃね??
0778デフォルトの名無しさん2014/04/16(水) 05:50:50.47ID:w7+StrcB
変換ミス修正版
Emacs Lispとかxyzzy Lispみて
マクロ言語とか言ってるんじゃないのか?VBA持ち出してるし
Lispの意味でのマクロの意味で使っているとは思えないな
0779デフォルトの名無しさん2014/04/16(水) 18:18:55.45ID:n6/2Qqwf
VBAはアプリケーション組み込みマクロ言語としてしか使えないかもしれんが
Lispは組み込みマクロ言語としても使えるが汎用言語だぞ

基本何にでも使える
0780デフォルトの名無しさん2014/04/16(水) 22:19:02.54ID:unZv5lM6
まあ、一番ユーザーが多いlispはelispだろうから、誤解されるのもしょうがないのかもね
0781デフォルトの名無しさん2014/04/17(木) 01:24:10.54ID:IbvTFaeD
世間一般じゃマクロといえばエクセルと言う印象なんだろうな
おれもlispを知らない頃はそう思ってた
0782デフォルトの名無しさん2014/04/17(木) 16:51:59.12ID:zyw99q6w
elispで書くのはマクロじゃねーよ。
いつまでTECO引きずってんだ。
elispに今もあるマクロはdefmacroとkeyboard macroの二つだけ。
elisp infoやemacswikiのglossaryで確認しろ。
0783デフォルトの名無しさん2014/04/17(木) 17:04:38.50ID:xMLxyHMV
>>782
emacsのエディタマクロとlispのmacroが混線してない?
0784デフォルトの名無しさん2014/04/17(木) 17:22:44.64ID:NyU+/LXv
もうエディタマクロなんてないんだよ。
今あるのはキーボードマクロだけ。
0785デフォルトの名無しさん2014/04/17(木) 20:33:44.45ID:xMLxyHMV
emacsってEditor MACroSの略だと思ってたけど今は昔なんやね。
0786デフォルトの名無しさん2014/04/17(木) 20:37:34.78ID:zyw99q6w
TECOの時代は終わったのさ。
0787デフォルトの名無しさん2014/04/18(金) 17:15:18.23ID:Tf5Wc60A
Real programming languageで書いたコードはmacroじゃない。
0788デフォルトの名無しさん2014/04/18(金) 18:33:29.25ID:32S9ba0j
>>787
VBもPythonもエディタマクロに使われているけど全否定?
0789デフォルトの名無しさん2014/04/18(金) 19:08:27.69ID:RLtKHaB0
Lispのマクロについて根本的に誤認している人がいるようだ。
Excelのマクロ言語はVBAであるとか
wzeditorはC言語ライクなマクロ言語を持つとか
そういう意味じゃないからなあ
0790デフォルトの名無しさん2014/04/18(金) 19:29:41.00ID:32S9ba0j
>>789
elispはマクロじゃ無いって話の流れからついに一週してしもたかんじやね。
0791デフォルトの名無しさん2014/04/18(金) 19:42:43.89ID:Mcdvxl1M
emacs lispはemacsの機能を拡張するMacro言語であるようにみえる
emacs lispではLispのMacroが使用できる
emacsにはKeyboard Macroと呼ばれるキー入力シーケンスを保存して再現する機能がある
emacsの名前の由来になったMacroとは、かつてテキストエディタTECO上で動作する特殊なマクロ言語でemacsが実装されたことによる

上記四つのMacroは全部別のモノ
emacsの話を出すとMacroがややこしくなる
0792デフォルトの名無しさん2014/04/18(金) 21:29:22.37ID:RJBDeLhq
マクロって命令の羅列のこと。
elispみたいな本格的なプログラミング言語のコードをマクロとは言わない。
0793デフォルトの名無しさん2014/04/18(金) 21:31:08.69ID:RJBDeLhq
vimはマクロと言っているなあ。
もはや死語に近いだろうな。
0794デフォルトの名無しさん2014/04/18(金) 23:11:58.90ID:GBzJyQo4
Intel CPU のマクロフュージョンも取り上げてみたい。
0795デフォルトの名無しさん2014/04/19(土) 10:31:46.12ID:SVxJm38+
>>792
>マクロって命令の羅列のこと。

より正確には、「拡張操作をパッケージ化したもの。またはその機能」
プログラミング言語での「操作」を、命令の羅列で表現する事がよく有るという事。
何に(言語、ツール)言及しているかによって、「拡張操作」の対象が変わるというだけ。
0796デフォルトの名無しさん2014/04/19(土) 13:56:07.37ID:z/3w4FOm
macro/mak'roh/ [techspeak] /n./

A 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:2TBNSLSb
パッケージはないw
0798デフォルトの名無しさん2014/04/20(日) 02:33:59.70ID:jJiPXZnf
>>797
「パッケージ管理システム」の"パッケージ"に限定しない話だろ?
0799デフォルトの名無しさん2014/04/20(日) 11:52:28.66ID:ikGZm3gS
限定しなくてもない。
マクロ化にパックの意味なんてない。
0800デフォルトの名無しさん2014/04/21(月) 02:27:11.46ID:fGRnx6yv
CLisp Win 64bit版の置き場を見つけられませんでした。
教えて下さい。初歩的な質問で申し訳無い。
0801デフォルトの名無しさん2014/04/21(月) 08:47:59.11ID:lFeTo/mg
ハンナ・ユスティーナ・マルセイユ
0802デフォルトの名無しさん2014/04/21(月) 13:34:42.74ID:bZ7teAnE
関数を返す関数の勉強のために
対話応答システムを作ってみたら
ゲロゲロの悲惨なものになった。ウーム。知らなさすぎる中で創るとわやになるな。
表示はdisplayのみ
キーボードからの入力はreadのみ
0803デフォルトの名無しさん2014/04/25(金) 18:03:13.94ID:6BEElz8i
onlispの日本語訳はpdfやhtmlで無料で公開されてますが書籍と比べてどうですか
無料版だけで事足りますか
0804デフォルトの名無しさん2014/04/25(金) 18:52:24.46ID:NEPb//MG
>>803
オンライン版を読んでから考えてみたら?
0805デフォルトの名無しさん2014/04/25(金) 19:11:55.61ID:6BEElz8i
>>804
継続まで読んだんですが両方一通り読んだことがある人の意見が欲しいんです
0806デフォルトの名無しさん2014/04/25(金) 19:28:44.13ID:Lv/ArU8B
英語版のon lisp基本にすれば、翻訳なんかなんでもいいような
0807デフォルトの名無しさん2014/04/25(金) 20:07:20.89ID:+TF8D1gC
>>803
いろいろ気になる奴は書籍買え
0808デフォルトの名無しさん2014/04/28(月) 10:23:07.40ID:vtVIy75a
lighttableでlisp使えるようにならにゃいかな
0809デフォルトの名無しさん2014/04/28(月) 10:29:57.05ID:mheEU0a2
>>805
折れは1今、継続、勉強中

なんかわけわからんな、なんだこれは!
と勉強してたら
col is short for collection
;"continuation"
とか出できて
「おお、これが継続ちゅうもんかい!」
とある意味感激した
折れも継続身につけるとこまで来たんやあ
「カーカー、おまえはカラスかい!
人間、なめとんのか!、()ばかりやないカー!」
とリスプに喧嘩売ってた時がなつかしい
0810デフォルトの名無しさん2014/04/28(月) 21:22:46.02ID:k3LtCAjB
>>808
Clojure……(震え声
0811デフォルトの名無しさん2014/04/29(火) 17:51:41.95ID:UBPAuzy/
勉強も継続してください。
0812デフォルトの名無しさん2014/04/29(火) 19:19:10.84ID:NGZ8LFiM
onlisp書籍版は表紙がいいし手触りも良い。
持ち歩いてちょっと汚れや痛みが付いてきた頃の風合いも良い。
0813デフォルトの名無しさん2014/04/29(火) 21:19:52.31ID:TDR4lejK
>>812
原典、翻訳本、どっち買ったの?
0814デフォルトの名無しさん2014/05/04(日) 02:53:08.77ID:6dfFx+9a
onlispのhtml版はあくまで草稿だから図が抜けてたりするし
オーム社から出てる紙の本か電子版を買った方がいいとおもう

onlispの継続の実装ってsbclに入れると警告出まくるよね
実際にはcl-contを使うのがよい
0815デフォルトの名無しさん2014/05/22(木) 20:36:07.46ID:l7dCfkj7
恥ずかしすぎて質問しにくいのですが・・・
xyzzyで

(ceiling 120)
120
0.0

(ceiling 312 2.6)
121
-2.599988

なぜ後者は120にならないのか、初歩すぎて検索しても見つからない TT
0816デフォルトの名無しさん2014/05/22(木) 20:56:24.23ID:Fu9GuZb0
ceilingは正の無限大に向けて丸めるからです。(切り上げ)
負の無限大に向けて丸めたければ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:WVZoxCv3
>>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))))))
0819デフォルトの名無しさん2014/05/23(金) 22:01:37.79ID:nAFYJDzW
鯖移転してたんだな
toroの817からのログを失うのはもったいない
0820移転前ログ 1/62014/05/23(金) 23:34:12.06ID:VIeF9Nr2
818 : 815[sage] 投稿日:2014/05/23(金) 02:13:12.85 ID:Dj6yziyp
>>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/62014/05/23(金) 23:35:29.81ID:VIeF9Nr2
822 : 815[sage] 投稿日:2014/05/23(金) 09:13:01.50 ID:5/FhmPgX
>>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/62014/05/23(金) 23:36:52.93ID:VIeF9Nr2
823 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 10:05:01.75 ID:fRyU8CgY
>>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/62014/05/23(金) 23:37:31.47ID:VIeF9Nr2
824 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 11:01:01.63 ID: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/62014/05/23(金) 23:37:56.54ID:VIeF9Nr2
827 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 11:24:51.58 ID:fRyU8CgY
>>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/62014/05/24(土) 01:55:42.59ID:78dmexXG
828 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 11:33:16.96 ID:C0KuPecL
>>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:rBEx7EtV
>>820-825
d
0828デフォルトの名無しさん2014/05/29(木) 01:43:29.39ID:Qf2MT9JX
quicklispのインストールに失敗するので質問します
sbclの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:68RLDo7O
>>828
Windowsでやるなら Clozure CL のがトラブルなくていいと思うよ。

と、アドバイスしつつ、エラーが断片的すぎてよくわからんゾ、といいたい。
0830デフォルトの名無しさん2014/06/02(月) 14:21:49.03ID:Q2JN1vdj
readやread-charで引数にrecursive-pが真だと
再帰的に呼びだされるって説明があるけどいまいちよく分からない
readでrecursive-pがtだとreadの中でreadが呼びだされてnilだと呼びだされない?
それだとread-charもそうなのかな
ググっても例が見つからないし困った
0831デフォルトの名無しさん2014/06/02(月) 15:38:30.88ID:H3ihprqs
>>830
http://www.mat.uc.pt/~pedro/cientificos/funcional/lisp/gcl_23.html#SEC1349
リーダーマクロ関数からの呼び出しをもっぱら想定しているみたい。
0832デフォルトの名無しさん2014/06/02(月) 17:26:57.64ID:Q2JN1vdj
>>831
英語苦手だしよくわからないよ
(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#が無いと怒られるしこれが再帰的に呼ばれないってことなのかな
08338312014/06/02(月) 22:02:17.48ID:H3ihprqs
>>832
じゃあこちらで。
http://g000001.cddddr.org/1289223233
0834デフォルトの名無しさん2014/06/02(月) 22:20:10.83ID:hdza40A5
>>833
ありがとう
結局処理系によって動作が微妙に違って有耶無耶になってるね
0835デフォルトの名無しさん2014/06/02(月) 23:28:47.81ID:Evci24oh
>>830
内部で再帰的に呼び出すかどうかを呼び出し側で制御するための引数じゃないよ。

この呼び出しはトップレベルでの呼び出しではないう意味のフラグ。
内部処理でこのフラグを使う。
set-macro-character等で定義したコード内でも同様。
分かりにくい名前だけど。

preserving_whitespaceのケースが分かりやすい。
0836デフォルトの名無しさん2014/06/02(月) 23:43:50.79ID:hdza40A5
ああずっと勘違いしてたのか
readに再起されてることを教えるためにrecursive-pをtにするのか
すっきりした
08378372014/06/03(火) 00:08:51.38ID:cDJn8bWQ
read macroのようにシステムの振る舞いを変える特殊な機構がなければ、
こんなものはプログラマーに見せる必要はないのだ。

逆に言うと、CL使う時はプログラマがいつも言語屋に近いことをやらされるというか、
出来るということを想定してないと意味が分かりにくいものが結構ある。

だからCLの本はマニアックなものが多い。言語屋思考が前面に出てる。
0838デフォルトの名無しさん2014/06/03(火) 00:30:35.72ID:Mp2Ed1vv
インスタンスとletによる束縛の範囲が良くわからないのです。

(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内でのみ束縛されてるみたいです。
08398372014/06/03(火) 10:40:12.45ID:uQjrLyNg
Common Lispに限らないかなり初歩的なことを理解できてないので、
プログラミング入門的な本から始めることをオススメします。
ヒープオブジェクト、バインディング、ポインター辺りのキーワードから。
(setf (foo-a obj) 1)はオブジェクトの破壊的変更ですが、
(setf a 2)はバインディングを変更しただけです。
0840はちみつ餃子 ◆8X2XSCHEME 2014/06/03(火) 15:10:40.12ID:hEzMKve3
C++ で書いたらこんな感じかな。

#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
>>839
便乗でききたいんだけど、

(let ((a b)) ...)

ってした時に、a に束縛されるものが、bそのものなのか、bの参照先なのか、ってどうやって判断するんですか?
0842デフォルトの名無しさん2014/06/04(水) 13:38:11.71ID:HmwUcklb
letの仕様で判断するしかないだろ
letの場合、aに束縛されるのは、bを評価した結果だよ
0843デフォルトの名無しさん2014/06/04(水) 18:07:09.18ID:rdwm0BrH
>>841
bそのもの
という場合は、シンボルbの意味になるな
値と参照先の対比で言えば
シンボルbが値として有ることはない。あくまでシンボルbは或る値へのポインタを保持する
代入と言わずに束縛という理由の一つでもある
0844デフォルトの名無しさん2014/06/05(木) 10:31:29.17ID:MplfPKH6
>>843
バインディングの場合は、シンボルが値を保持してるわけじゃない。
環境上でバインディングされてるだけだ。
0845デフォルトの名無しさん2014/06/05(木) 10:34:36.82ID:2vI6486P
>>844
そうどけどそう読めない文だったかな
0846デフォルトの名無しさん2014/06/05(木) 16:40:47.76ID:eDcskf88
>>839の説明がよくない。
ここは破壊的かどうかよりも、let が何を束縛するかが重要だろ。
0847デフォルトの名無しさん2014/06/05(木) 16:55:00.43ID:MplfPKH6
letでaに何が束縛されていようが、
変数aにsetfしたらaの束縛の変更にすぎないのは同じ。
それより問題なのは「*test*」
0848デフォルトの名無しさん2014/06/15(日) 13:05:35.20ID:b/Fd0dwY
質問です
cygwinに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:yc4x9J1B
DLLのロード、cygwinのパス使って解決はしないのでは。
0850デフォルトの名無しさん2014/06/16(月) 00:09:49.68ID:mOjr4QnD
ありがとうございます
cffiの仕組みがよく分からないので調べてみます
0851デフォルトの名無しさん2014/06/16(月) 00:50:05.70ID:E9WcDStG
>>852
cffi というより cygwin の話。
cygwin 経由でファイル操作しようとした場合、 cygwin のランタイムライブラリは cygwin 上のパスから windows のパスへの変換をかけて処理する。
cygwin 用にビルドされていないアプリケーションは cygwin 上で動かしても cygwin のランタイムを経由しないので、 cygwin 上の設定を必ずしも反映しない。
Clozure にはロードパスを明示して指定するオプションがあるはずなので、それでライブラリの場所を直接に指定するといいと思うよ。
0852デフォルトの名無しさん2014/06/21(土) 04:07:00.31ID:3WmZPTyQ
http://www.siginf.com/601.html
科学技術計算用のライブラリとしてものすごくよさそうだけど
ダウンロードの項目とかないしまだ開発中なのかな
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
854さん、ありがとうございます。
データと同じ様に扱えればファーストクラスとのこと。
lispのプログラムとは究極的には
1, 関数の定義
2, 関数の実行(データを与えられて)
なので、すごく自由なんですね。
0856デフォルトの名無しさん2014/06/24(火) 15:28:20.23ID:JJ61LHPx
関数をネットワークで送るってどういうことなの
S式を送って受け手で評価するってこと?
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:WPn8ToeQ
http://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88
http://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
ALGOLか。
表示的意味論のStracheyさんだな。
08618532014/06/25(水) 22:06:41.59ID:bfUMIbrs
ファーストクラスについて質問した853です。
854さんへ返事をした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:KURc4R4I
ILC応募はじまってるぞ。
0863デフォルトの名無しさん2014/06/28(土) 14:25:31.24ID:3k/D2XmS
そうか
0864デフォルトの名無しさん2014/06/28(土) 19:12:53.31ID:KURc4R4I
おいおい、興奮しねぇのかよ
いくしかねぇだろうが
0865デフォルトの名無しさん2014/06/28(土) 19:24:15.63ID:6G7Aa+Xt
            |i
     \      |.|
      ト\   /| ト
      | トヽ   / | | ト
      | | トヽ\/| | | ト    /
      | | | ト\≧三ミゞ=イ/
     ム彡''´ ̄ ̄    ̄ ヽ{__..
    /             V´
    ノ  __          ',
 ,. == y ̄, __、\_        )      世 界 的 で す も ん ね
 |i  }-| ゝ二 |/ ̄ ̄  /ニ,l
 ヽ__ノ/ヾ _ ノ       > }}
  / >≦'__        し /        乗 る し か な い
   Vて二オカ       (_,/}
   Yこ二ノ!!|          }         こ の ビッ グ ウ ェ ー ブ に
    Y⌒ 从        ∠)
    从从从トミ   _.ィニ二 ̄丶
     ミ三三彡 ' ´      \ \
        /           \ヽ
      /            ミ;,. ', ',
       |   _  _ __    \',.',
      ノ!   | V7\ ´/
     / l /_ゝ| ト >__/ /
     |   ヽン ´  ヽー'
    i|                l
    |:! ヽ              |
    | ト、 `ミ,            l
0866デフォルトの名無しさん2014/06/28(土) 23:41:57.76ID:WOd9pXsx
>>862
ILCってなに?ググっても分からんかった
0867デフォルトの名無しさん2014/06/29(日) 00:29:18.53ID:GtYVa+TG
International Lisp Coference
0868デフォルトの名無しさん2014/06/29(日) 11:37:18.19ID:gwVdKsQj
>>866
"ILC Lisp" でググれば直ぐに出てくるんだが
情報リテラシー能力が欠如しているのかw
0869デフォルトの名無しさん2014/06/29(日) 13:50:05.95ID:kMofjRV8
>>868
後出しはぶざま。
0870デフォルトの名無しさん2014/06/29(日) 18:31:52.01ID:jxL17uOJ
ググればすぐ出てくるものに、その反応こそゴミだな。
0871デフォルトの名無しさん2014/06/29(日) 18:37:51.84ID:rSPW55Gi
>>869
後出しとかw
0872デフォルトの名無しさん2014/06/29(日) 19:39:51.80ID:gwVdKsQj
>>869
ILCだけで絞れなかったら次に思いつくのはLispだろ?
ここは何のスレだと思ってるんだよwww
0873デフォルトの名無しさん2014/06/29(日) 21:51:23.27ID:vXcDBpcb
ますますぶざま。
0874デフォルトの名無しさん2014/06/29(日) 22:25:15.24ID:jxL17uOJ
必死だな。
0875デフォルトの名無しさん2014/06/29(日) 23:42:13.17ID:3G00hY9C
>>867
>>868 
ありがとう
確かに情報リテラシー能力は足りてないと思う
人の検索キーワード見てると勉強になってる
0876デフォルトの名無しさん2014/06/30(月) 07:38:38.04ID:YSr0d58i
情報リテラシーってのはどうでもよくてだな、ILCにみんないこうぜってはなしなんだよ。
0877デフォルトの名無しさん2014/06/30(月) 07:52:00.62ID:f7mL4vcK
初学者の俺にはきっと時期尚早
エキスパートたちは楽しんできてくれ
「驚異のエロトーク、君の彼女を越える?!人工彼女三号アケミチャン、今、Lispの可能性がここに具現する!!」
とか発表されるのかなあ
0878デフォルトの名無しさん2014/06/30(月) 08:33:15.78ID:S7PnoB7N
初学者だからどうとかではなく、参加して信仰心を示すことが大切なのだよ、君。
0879デフォルトの名無しさん2014/06/30(月) 13:51:44.06ID:7FoUPvVO
あらら、そりゃくずだわ
信仰心!
あ、くず
そりゃ、くず
まじ、くず
くずの3乗!
0880デフォルトの名無しさん2014/06/30(月) 21:55:50.88ID:aNL5GHv4
Faith Bookですね
0881デフォルトの名無しさん2014/06/30(月) 22:30:33.88ID:WSGOXIMG
このスレ、ヘンなのが居ついちゃってからどうもダメだね。
0882デフォルトの名無しさん2014/06/30(月) 22:40:49.62ID:r0HKSexR
ILC 2014 ってカナダ モントリオール現地集合やんけw
0883デフォルトの名無しさん2014/06/30(月) 22:42:26.17ID:r0HKSexR
そういや、小俣さんからカリフォルニア現地集合のセミナー案内が来たことあったな
そんなんをさらっと日本語メールで送ってくるなって思った
0884デフォルトの名無しさん2014/06/30(月) 23:09:54.32ID:aNL5GHv4
>>882
モントリオールだとフランス語わからんと生活ままならん
英語だけだとちょっといぢめ入るんだよあそこ。

非常口とか全部フランス語
0885デフォルトの名無しさん2014/07/02(水) 02:56:41.39ID:lG4D7CHT
フランスがフランス語を守るのは国策ですので。
http://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
linuxでlispつかってるプログラマーの環境が知りたいです。
エディタなのかそれともlimpやlispboxみたいなIDEなのかとか
それと文字入力の組合せはiBus+Anthyよりuim + Anthyの方がいいのでしょうか?
iBus+Anthyでvim使おうと思うとキーボードで日本語入力への切替が出来ず、とても面倒だったので皆さんどうしてるのでしょうか?
0887デフォルトの名無しさん2014/07/03(木) 06:44:45.68ID:9NgNqjgv
vimmerでつ。
0888デフォルトの名無しさん2014/07/03(木) 10:43:30.36ID:m1ee/I8B
emacs 最強。
日本語入力は ddskk
0889デフォルトの名無しさん2014/07/03(木) 11:04:55.82ID:dl+rXweg
>>886
emacsでし、日本語はATOKXなんだけど最近の環境に移行するのにはATOKマンドクサイ
0890デフォルトの名無しさん2014/07/03(木) 11:28:14.55ID:CYaxL587
emacsとmozc
0891デフォルトの名無しさん2014/07/03(木) 15:19:42.61ID:zQnvFAz4
ん?、emacsってローカル変数つかえないと聞いたなあ
0892デフォルトの名無しさん2014/07/03(木) 15:35:47.42ID:dl+rXweg
正確にはemacs+sbcl+slimeって書けばOK?
08938862014/07/04(金) 05:55:47.78ID:a+Sm66UT
>>892
lispboxを使わずにemacsでプログラミングしてるってことですか?

windowsではlispboxインストールしたけど、linuxもとりあえずemacsでやったほうがいいのかな
0894デフォルトの名無しさん2014/07/05(土) 06:39:46.85ID:uz94kqwx
lispboxてemacs+slimeじゃなかったけ?
俺はemacs+slime+auto-complete+ac-slime+paredit+popwin
0895デフォルトの名無しさん2014/07/06(日) 17:40:45.12ID:pTttFthd
clojureのthreading macroおもすろーと思ってCLで書いてみたんだけど、
書き終わってみてなんか実際の使いどころが思いつかなくて休日を無駄にした気分です
日記
0896デフォルトの名無しさん2014/07/06(日) 18:06:04.92ID:aspDWAp6
>>895
副作用許容するCLだと使いどころあんまないでしょ。
Loopマクロ完全理解とかの方がよっぽどお得、というかあれ完全に使いこなす人見てるといつも羨望のまなざししちゃう。
0897デフォルトの名無しさん2014/07/06(日) 20:36:26.95ID:pTttFthd
>>896
そうですね、やっぱりloopで自然に書けるところはそれで書いちゃうので
あと関数的でも名前長いとなんかいまいち読みやすくなった感がなかったように感じました
単純な関数の組み合わせは結構すっきり書けるようになったんでまあ無駄ではなかったと思いたいです
(-> last-page (+ i) (- 1))
(->> url (ppcre:split "/") #'last #'car (ppcre:split "\\.") #'cadr)
0898デフォルトの名無しさん2014/07/07(月) 09:48:07.76ID:6na4sCwW
>>891
emacs24からスコープの扱いが変わったんじゃなかったっけ?
0899デフォルトの名無しさん2014/07/07(月) 12:36:51.74ID:KxgY/iod
letがあるから昔からローカル変数はある。
スコープがレキシカルな変数、レキシカル変数のことでしょうかね?
0900デフォルトの名無しさん2014/07/07(月) 14:10:16.29ID:eRMueaNX
emacs24からemacs lispでレキシカルスコープが使えるようになった
従来の動的スコープから変更になったわけじゃなくて、デフォルトは動的で、
何らかの指定をするとレキシカルスコープになる
動的スコープの関数からレキシカルスコープの関数を呼ぶこともできるし、逆も可能

ただしこのスレで今話題になってるのは、emacsでlisp使うと言っても、
emacs lispを使うわけじゃなくて外部のlispをemacs上で使う話でしょ?
0901デフォルトの名無しさん2014/07/07(月) 16:09:01.70ID:dUgWwPpk
emacs lispの静的スコープは設定で切り変えるんじゃなくて
昔のlispマシンみたいにclosure構文にしたほうがよかったと思う
0902デフォルトの名無しさん2014/07/09(水) 01:21:29.27ID:/8/fqD8z
そうか。
0903デフォルトの名無しさん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:b8uVYlJ5
>>903これ 前からある書き込みのコピペだよ
0906デフォルトの名無しさん2014/07/11(金) 11:00:59.19ID:tKSWivTs
>>903
創価
0907デフォルトの名無しさん2014/07/11(金) 11:11:41.71ID:VpP/Y762
煎餅
0908デフォルトの名無しさん2014/07/11(金) 14:25:42.24ID:9W9RigEI
布団
0909デフォルトの名無しさん2014/07/13(日) 23:35:05.18ID:Nc6h/Xfp
はじめまして。質問させて下さい。


1 yyyy-mm-dd
...
n yyyy-mm-dd


というテキストから、各行を名前に持つディレクトリをn個
生成するのはどうしたらできますか?


iphoneで撮影してdropboxのcamera uploadsに溜まっている
写真を整理しようと思い、


ls -h
cut -c-11
uniq


を調べながら使って冒頭のテキストを作るところまでできたところです。
誘導や「それならそもそもこういうやり方をすればもっと上手い」とかでも構いません。
よろしくおねがいします。


ubuntu 11.20です。
09109092014/07/13(日) 23:46:36.68ID:YbxcgjxG
すいません追加です。できたディレクトリに、各日に撮影されたデータを
移動するうまいやり方ってありますか?
ファイル名の頭がyyyy-mm-ddとなっているのと、exif情報があります。
当方プログラミングはほとんどわかりませんが、以上よろしくおねがいします。
0911デフォルトの名無しさん2014/07/14(月) 00:02:20.05ID:AQ9cUEpT
スレ違い。こっち↓で聞いてみたら?
http://peace.2ch.net/test/read.cgi/unix/1404204950/
09129092014/07/14(月) 00:42:44.66ID:QYx8kOpF
誘導ありがとうございました。こちらでの質問は取り下げさせて頂きます。
0913デフォルトの名無しさん2014/07/15(火) 06:15:03.36ID:59xep59Q
なぜここにきた。
0914デフォルトの名無しさん2014/07/16(水) 10:51:34.91ID:zYYJ84NZ
lsとlispで関係あると思ったとか?
0915デフォルトの名無しさん2014/07/16(水) 12:28:38.67ID:AJ7uNsXY
slとsbclで関係あるのかと思ったのでは?
0916デフォルトの名無しさん2014/07/16(水) 13:21:29.13ID:Y98WTq58
ファイルとかディレクトリ操作でわざわざCLを使う気にもならない。
cl-fadとかを使って頑張るよりもシェルスクリプトを書いたほうが早いと気づいた。

こうして僕はまた一つ、大人になった
0917デフォルトの名無しさん2014/07/16(水) 20:49:53.01ID:4BExK8tU
CLはその辺面倒くさいよね
パスネーム作るのもめんどくさいしファイルディレクトリ操作関連の関数名前長いし
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:2gGxGOPY
ファイルやディレクトリ操作はcommon lispに限らず
pythonとかでもシェルスクリプトより冗長になるけど
0923デフォルトの名無しさん2014/07/16(水) 22:13:02.78ID:4BExK8tU
pythonやperlなんかはCLよりもう少し楽な印象があるけどなぁ
厳密に比較したわけじゃないけど
不満があるなら自分でなんとかしろってのがLispなので少し考えてみるか
0924デフォルトの名無しさん2014/07/17(木) 03:31:45.45ID:9RVv4Ujx
外部コマンドの呼び出しも処理系依存だしexternal-programとかを使って違いを吸収してやる必要があるしな。
0925デフォルトの名無しさん2014/07/17(木) 14:29:12.84ID:zA0F2tu6
最近逆引commonlispが見れなくなって不便
ただでさえ情報が少ないんだから何とかしてよう
0926デフォルトの名無しさん2014/07/18(金) 01:09:52.06ID:vTAgXcei
>>925
ぐぐったら普通に出てきたぞ
0927デフォルトの名無しさん2014/07/18(金) 01:26:15.65ID:FVnspc/u
URL変わってた
0928デフォルトの名無しさん2014/07/18(金) 21:55:16.76ID:BDBW/1YI
cl-ncursesで作ったプログラムがエラーを出したときのデバッグってどうすればいいの?
slimeの上で動かすのは無理だから端末で動かしてるけどエラーが出たら表示が乱れるし
間違ってる箇所の特定が困難
0929デフォルトの名無しさん2014/07/19(土) 11:16:55.15ID:0HpoPve0
>>928
端末でやってるなら、stferrをファイルにリダイレクトとかで出来ないかな?
もしくは、teeとか使ったらどうだろう
0930デフォルトの名無しさん2014/07/19(土) 13:47:07.28ID:Cah7tT4p
ファイルに書き出すのが無難なのかなやっぱり
これで少し楽になりそう
0931デフォルトの名無しさん2014/07/20(日) 16:36:48.15ID:c+tbRQVc
>>928

Unix 系の 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:BUK6QChG
デバッグ対象のプログラムでソケット開いてswankサーバを走らせ、slimeから接続してデバッグ
0933デフォルトの名無しさん2014/07/21(月) 13:13:57.09ID:1PP1q7+H
(defmacro iglambda (lambda-list &body body)
(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:YIQWfIP0
一時的に*readtable*を書き換えるとか、#'をオーバーライドするとか
0935デフォルトの名無しさん2014/07/29(火) 21:07:54.86ID:lnaxbNJ+
clispのed関数でviではなく別のエディタを使いたいんですがどうすればいいですか
0936デフォルトの名無しさん2014/07/29(火) 22:17:13.99ID:HvnnWmTY
clispの実装詳細は知らないけどunixの流儀として一般的には環境変数のEDITORをみる
たぶんlispレベルでも相当するスペシャル変数があるんじゃないか
0937デフォルトの名無しさん2014/07/29(火) 23:00:40.88ID:FSsnLBrE
>>935
ttp://sourceforge.net/p/clisp/clisp/ci/default/tree/src/edit.lisp
ソース見るとわかるけど
(defparameter *editor* "your-editor")
これで行けるんじゃね?
0938デフォルトの名無しさん2014/07/29(火) 23:31:36.89ID:lnaxbNJ+
>>937
おお!
さっきダウンロードしてソース検索したのに見つからなかったから諦めてました
まさか.lispに書いてあったとは
0939デフォルトの名無しさん2014/07/30(水) 03:14:08.25ID:ymOvaeuA
おおお!
ドイツ語だあ、嬉しいなあ
Liefert den Namen des Editors
かっこええなあ
わかりやすいなあ
しね英語!やで
0940デフォルトの名無しさん2014/07/30(水) 18:22:47.39ID:g1c+taJs
gekommen lisp
0941デフォルトの名無しさん2014/07/30(水) 18:34:08.84ID:fUMWxb+n
Zu lehren das Lisp ist zu lieben sich.
0942デフォルトの名無しさん2014/07/31(木) 22:09:56.94ID:2NEmh/Ub
LISPプログラマーは、キーボードは日本語とUSどっち使ってる人が多いんだろう?
プログラマの人ってUS配列使ってる人多いよね?
0943デフォルトの名無しさん2014/07/31(木) 22:27:02.03ID:e1kodKvW
無変換と変換キーをctrlにしないと小指がしぬ
0944デフォルトの名無しさん2014/08/01(金) 02:08:14.90ID:ARdX3qTq
>>943
無変換はHyper,変換はSuperに当てるのが普通んでもってaの左横はCtrl
親指の自由度って凄いからCtrlを変換キーに当てるのは妥当なんだけどやっぱりalt以外にsuper,hyperは欲しい
漢字変換?んなものはTCODEに限る
0945デフォルトの名無しさん2014/08/01(金) 05:31:22.48ID:XLYd3eQb
US配列とSKK。最高。
0946デフォルトの名無しさん2014/08/07(木) 11:28:13.48ID:HQ4TEMVi
LLVMベースでCommon Lispが動くやつってありますか?
0947デフォルトの名無しさん2014/08/07(木) 20:11:39.49ID:E8mbsF1h
cclを使っています
ターミナルでスクリプトを実行し
入力している文字を表示させない状況で入力させて
その値を取得したいのですが可能でしょうか?

標準入力からは*standard-input*を使えば値を取れることは分かりました
シェルのreadコマンドの、read -s PASSのような機能を想定しています
0948デフォルトの名無しさん2014/08/08(金) 13:46:48.16ID:qccrcm1U
947です
read -sを使ってキー入力を受け取り
lispスクリプトに引数として文字列を渡せば良いことに気づきました
失礼しました
0949デフォルトの名無しさん2014/08/08(金) 14:08:50.77ID:LVetnHZi
わかればよろしい
0950デフォルトの名無しさん2014/08/20(水) 10:47:40.69ID:5yBlZ/IM
情報科学専攻だけど恥ずかしながらLispに触れたことがない
学生のうちにLisper名乗ってみたいから使ってみる
モチベ向上のためにアカデミック以外の現場でLisp使う、便利なのか先輩方教えて下さい
0951デフォルトの名無しさん2014/08/20(水) 10:53:31.03ID:8CcAuI4d
そんなこと言ってる奴は勉強しても無駄。
0952デフォルトの名無しさん2014/08/20(水) 11:25:51.51ID:d2pZ5gy3
>>950
Lisperはなろうとしてなるものではないのだ、なっちまうのだよ
0953デフォルトの名無しさん2014/08/20(水) 11:27:18.03ID:5yBlZ/IM
>>951
そうすか 覚える必要はないからいいけど(´・ω・`)
ただ数式処理なんかでMathematicaやMaximaみたいな関数型言語に密接な環境には常日頃お世話になってるんで本格的に特性を理解したいんだよね
0954デフォルトの名無しさん2014/08/20(水) 11:34:36.71ID:Ar4bcC3q
どっちも偽関数型だ。


LISP - 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/
>>952
ワラタw
確かに自分もそうだ
0956デフォルトの名無しさん2014/08/28(木) 21:56:13.74ID:+EU13Tgr
リスパーになりたいのに
リスパーって言われたいのに
ぜんぜんなれない俺
0957デフォルトの名無しさん2014/08/28(木) 22:30:25.06ID:Nk/Y1yrf
あんたがlispを必要としていないか
あんたが必要とされてないか、どっちかだろう
0958デフォルトの名無しさん2014/08/28(木) 22:56:00.95ID:Gw1dAD8r
>>956
マトリックスのモーフィアスが言ってただろう、感じろ!
0959デフォルトの名無しさん2014/08/29(金) 08:10:40.48ID:IguOVOzJ
>>957
バカにレスされたくない
0960デフォルトの名無しさん2014/08/29(金) 08:11:23.52ID:IguOVOzJ
>>958
はぁい
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:IshzZhlV
あったこれだ
http://qiita.com/guicho271828/items/2852196ddf4c48ff0e3c
0963デフォルトの名無しさん2014/09/05(金) 00:27:28.37ID:xOBKBssI
shiroさんも似たようなこと言ってた
http://blog.practical-scheme.net/shiro?20121227b-lisp-hare-tortoise
0964デフォルトの名無しさん2014/09/08(月) 10:14:08.39ID:VPTlsC/M
同じこと言ってるようには思えないんだけど、どこを同じと思ったので?
0965デフォルトの名無しさん2014/09/09(火) 12:08:12.95ID:YU9mY7gP
>>962
なんでマクロの展開は
macroexpand -> eval -> macroexpand ...
みたいな構造になるんだろう?そっちの方が作りやすいのかな?
lispの実装をしたことがある人は一杯居るだろうからその辺教えてほしいな
0966デフォルトの名無しさん2014/09/09(火) 13:13:33.09ID:xSuWWikN
>>965のいう他のやり方はどんなの?
0967デフォルトの名無しさん2014/09/09(火) 14:21:39.62ID:3jKRZ45a
>>962
いいなこれ、ほしい
0968デフォルトの名無しさん2014/09/09(火) 14:53:22.81ID:YU9mY7gP
>>966
自分が思っていた事としてマクロはコンパイル時に実行される関数としか考えていなかった。
なんで当然common lispの関数で使える機能(例外、ライブラリとして実装したバックトラック機能)もマクロでも使えると思っていた。
だから何故コンパイル時と実行時でできることが違うようになってるのか気になった。他のlispどうなってるのかとかね。
0969デフォルトの名無しさん2014/09/09(火) 17:52:36.36ID:FZ79e7BA
>>968
それもあるよ
0970デフォルトの名無しさん2014/09/09(火) 20:12:58.42ID:/ZjY2rNK
マクロはコンパイル時前提じゃないし。
0971デフォルトの名無しさん2014/09/09(火) 23:44:21.53ID:OOYpvr4f
マクロ展開時でも何でもできるのが Lispの良いとこだよ。scheme は知らないけど。
0972デフォルトの名無しさん2014/09/17(水) 02:49:53.97ID:C4OaNAqf
(defparameter x 123)
(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
> 1 行目の defparameter の代わりに setq にすると期待通り 123 が返るのですが、
これが原因. defparameterで宣言すると, ダイナミック変数になる. こういうミスを減らすために*x*のような名前を付けるマナーがある.
トップレベルでsetqだと大丈夫だがこれも微妙. (define-symbol-macro x 123)しても良いがこれも微妙だが、この場合はこっちのが良いか.
0974デフォルトの名無しさん2014/09/17(水) 21:06:13.39ID:C4OaNAqf
>>973
ありがとうございます。スペシャル変数とレキシカル変数の違いが十分理解できてなかったです。
(funcall x)により#'(lambda () x)が評価されて、xの値が返るのですが、
xはdefparameterでスペシャル変数になっているため、そのときに参照しているxの値、
つまり#'(lambda () x)が返っているようですね。
0975デフォルトの名無しさん2014/09/18(木) 12:08:50.47ID:esVVPZkH
スペシャル変数というかダイナミック変数って、何がうれしいの?
0976デフォルトの名無しさん2014/09/18(木) 12:33:40.03ID:gl5GJBEB
let で束縛すると便利
0977デフォルトの名無しさん2014/09/18(木) 13:56:39.79ID:jUxkvtnX
>>975
「環境」の一時上書き。
0978デフォルトの名無しさん2014/09/19(金) 00:10:23.14ID:5yTgoIyx
束縛ってちょっとエッチぽくていやん
0979デフォルトの名無しさん2014/09/19(金) 06:46:54.26ID:O3QZpvkM
>>975
基本,単に大域変数としてつかわれる.
便利なのは関数の引数をずらずら列べなくても良いところじゃない? 他の言語と一緒だね.
0980デフォルトの名無しさん2014/09/19(金) 10:37:36.39ID:X120Ti+X
帯域脱出するとunbindされるところが大域変数とは違う。
マルチスレッドの時も振る舞いは大域変数と全く異なる。
0981デフォルトの名無しさん2014/09/19(金) 11:58:41.45ID:mBwsz/nF
>>980
ほうほう
0982デフォルトの名無しさん2014/09/19(金) 20:42:10.71ID:7xkfrLWD
オペンキョウしてます
おっぱいあると捗るのに
オマンコご褒美なら捗るのに
0983デフォルトの名無しさん2014/09/19(金) 22:52:50.09ID:O3QZpvkM
>>980
逆では? ローカルに未束縛な状況は,スペシャル変数でしか作れない.
マルチスレッドでのスペシャル変数の振舞いは規格の外だから,処理系間である一定のコンセンサスがあるだけ.
スペシャル変数と対置して語られる大域変数とは何を指しているのか.トップレベルのsetqは未定義だし.
基本,と前置きしてるのに.
0984デフォルトの名無しさん2014/09/20(土) 00:28:02.56ID:rTgfsjb+
ぐだぐだと
レス数が950を超えています。1000を超えると書き込みができなくなります。