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

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

1 :デフォルトの名無しさん: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/

2 :デフォルトの名無しさん:2013/02/21(木) 00:11:50.65
< `∀´>ニダー

3 :デフォルトの名無しさん:2013/02/21(木) 01:11:18.80
初心者です

4 :デフォルトの名無しさん:2013/02/21(木) 01:15:25.68
小心者です

5 :デフォルトの名無しさん:2013/02/21(木) 01:21:09.62
>>3
そうか

6 :デフォルトの名無しさん:2013/02/21(木) 05:59:51.54
404 Blog Not Found:(笑) - 書評 - Land of Lisp
http://blog.livedoor.jp/dankogai/archives/51854832.html

7 :デフォルトの名無しさん:2013/02/21(木) 10:06:46.88
NetwalkerにCL乗せたいなぁ
ポケットサイズのlispマシン欲しい

8 :デフォルトの名無しさん:2013/02/21(木) 22:59:55.53
>>7
Netwalkerは普通のlinuxマシンじゃないの ?

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

AndroidがLinuxだと思ってNECのLife Touch Note買ったけど
shellなくてわろた

9 :8:2013/02/21(木) 23:02:51.05
8はNetwalkerは普通のLinuxだからCommon Lispは簡単に
インストールできるんじゃないの ?という意味で書きました。

わかりにくい書き方ですみません

10 :デフォルトの名無しさん:2013/02/21(木) 23:18:26.42
common lispの入門にon lispを読んでるんだけどしらない関数ばかりで入門には向いてない気がしてきた
他に系統的に学べるサイトはないかな

11 :デフォルトの名無しさん:2013/02/21(木) 23:34:49.50
本ってどの言語にしてもそこそこ自力で何か書けるレベルで読まないとあんまり続かない気がする

12 :デフォルトの名無しさん:2013/02/21(木) 23:50:39.13
practical common lispをさっと読んでからCLtL2を読み始めるとよいと思う

13 :デフォルトの名無しさん:2013/02/22(金) 00:15:08.83
英語読めないから本買わないと駄目なのか
結構値がはるしキツいな

14 :デフォルトの名無しさん:2013/02/22(金) 00:19:45.76
ちょっと前最初のほうだけ英語で読んでみたけど
そこまで難しい英語じゃなかったので
読もうと思えば読めるレベル

15 :デフォルトの名無しさん:2013/02/22(金) 17:29:22.11
>>11
その点手続型言語は基本的な文法をちょろっとやれば
そこそこ自力で書き始められて、壁にぶち当たったら本を読んで、
とできるけど、lispはそれが難しかった

16 :デフォルトの名無しさん:2013/02/22(金) 17:57:40.92
他にもともと別の手続き型言語を知ってたとかではなくて?

17 :デフォルトの名無しさん:2013/02/23(土) 00:31:27.17
最初はcar、cdrとか再帰だけで色々練習問題解いてたけど
それだけでも色々できて面白かったけどなあ

18 :デフォルトの名無しさん:2013/02/23(土) 01:57:48.09
>>15
手続き型・・・小学校で習う表記に似てるからじゃね?

19 :デフォルトの名無しさん:2013/02/23(土) 02:10:07.98
おれはPAIPを勧めるがなぁ。
あと、lisp をできるようになりたいだけなら日本語版でもいい。でも、凄いエンジニアになりたいのなら、英語力は必須だよ。
逆に考えればlispと英語が同時に学べるチャンスだ。

20 :デフォルトの名無しさん:2013/02/23(土) 13:34:08.23
>>10
xyzzy Lisp Programming
http://www.geocities.jp/m_hiroi/xyzzy_lisp.html

21 :10:2013/02/23(土) 13:58:28.39
>>20
やっぱりこれがいいのか
読んでみる、ありがとう

22 :デフォルトの名無しさん:2013/02/23(土) 16:08:30.02
緑のナマモノ本、Amazonで発売日に在庫切れか
でもまさか予約分しか入荷して無かったってオチじゃないよな

23 :デフォルトの名無しさん:2013/02/23(土) 16:23:40.08
そんなもんじゃない?発売当日に在庫ありになってないのは珍しくない
予約してた人は今日届くのかな

24 :デフォルトの名無しさん:2013/02/23(土) 22:55:28.84
予約してたけど届くには月曜…

25 :デフォルトの名無しさん:2013/02/24(日) 04:01:59.03
新宿の紀伊国屋とかに行けばあるかな。
しかし正直コードのある本は電子書籍で出してほしい。

26 :デフォルトの名無しさん:2013/02/24(日) 12:05:25.33
emacs + slime の環境なんですが
C-c C-d h と同じことを他のライブラリでやれるようにするものってありませんかね?

27 :デフォルトの名無しさん:2013/02/24(日) 13:14:51.50
木のそれぞれの値を2倍にする関数を教えてください。。。
(mapcar #'(lambda (x) (* 2 x)) '((1 2) 3))
的な。

28 :デフォルトの名無しさん: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)))

29 :デフォルトの名無しさん: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)))

30 :デフォルトの名無しさん:2013/02/24(日) 13:37:49.63
>>26
ドキュメント方面で共通の仕組みがdocstringくらいしかないから、
C-c C-d dくらいしかないと思う。CCLだとdocstring表示されんけど。
それ以上が欲しいならレッツ自作。

>>27
自分が知る限りない。レッツ自作。

31 :デフォルトの名無しさん:2013/02/24(日) 13:39:36.10
MaximaがLispで書かれていると聞いてちょっと感動した

32 :デフォルトの名無しさん: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))

33 :デフォルトの名無しさん:2013/02/24(日) 14:06:54.35
>>27
(defun f (x)
(if (listp x)
(mapcar #'f x)
(* 2 x)))

(mapcar #'f '((1 2) 3))

34 :デフォルトの名無しさん:2013/02/24(日) 14:11:53.35
なるほどmapcarで再帰するなんて方法があるのか・・・

35 :デフォルトの名無しさん:2013/02/24(日) 14:14:36.81
> mapcarで再帰する
定石だと思うぞ

36 :デフォルトの名無しさん:2013/02/24(日) 14:25:29.92
mapcarとかreduceとか既存のものを利用していかに楽するかを考えるんだ。
働きたくないでござる。早くニートになりたい。

37 :デフォルトの名無しさん:2013/02/24(日) 14:41:47.35
他人のソースを殆ど見ないので全然定石を知らないなあ

38 :デフォルトの名無しさん:2013/02/24(日) 19:38:17.41
>>29,30,32,33
ありがとうございます!
mapcarで再帰は自分も知らなかったので眼から鱗です。

39 :デフォルトの名無しさん:2013/02/24(日) 23:38:24.35
よくある木の再帰だと思うけど

40 :デフォルトの名無しさん:2013/02/25(月) 00:23:46.97
マクロとかXMLとかの処理を書くときに嫌ってほど出て来るな。

41 :デフォルトの名無しさん: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 のようですが…

42 :デフォルトの名無しさん:2013/02/26(火) 18:17:17.01
Land of Lisp原著持ってたから立ち読みで済ませるつもりだったのだけど
リストリテラルを書きかえるのはよくないって注に書いてあって
ドキっとしたのでついレジに持っていってしまった

あと訳した人が元ヤンキーである可能性が微レ存

43 :デフォルトの名無しさん:2013/02/26(火) 22:13:22.48
はぁ?Shiroさんだぞ?

44 :デフォルトの名無しさん: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。

45 :41:2013/02/28(木) 01:27:01.72
>>44
ありがとうございます。わかりました。

46 :デフォルトの名無しさん: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

47 :デフォルトの名無しさん: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))
;; )) ;という風に前者と違って`が消えたものが挿入されるのは何故なのでしょうか?

48 :デフォルトの名無しさん:2013/03/02(土) 22:43:19.36
無駄がない形に最適化してくれてるんじゃないの。知らんけど。

49 :デフォルトの名無しさん:2013/03/02(土) 23:11:53.84
>>47
仕様はコレ。
http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm
処理系は好きに最適化してよいそうです。

50 :デフォルトの名無しさん: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)))))

51 :デフォルトの名無しさん: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))になるのってどうなんだろう。
そのコードは後者の挙動を前提にしているような。

52 :デフォルトの名無しさん:2013/03/07(木) 15:54:02.64
わけがわからないよ

53 :デフォルトの名無しさん:2013/03/09(土) 23:17:33.27
CCL 1.9出たで。

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

リリースノート訳
http://qiita.com/items/968166dde6a820ebb97e

54 :デフォルトの名無しさん: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と似たようなもんだと思うんですけど..

55 :デフォルトの名無しさん: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の力を発揮しきれないという様な事が書いてあった気がする。

56 :ハツネツ: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

57 :デフォルトの名無しさん:2013/03/12(火) 20:49:01.00
先輩方すげっwww
簡単にできちゃうのか。。
なんでこういう方向でいかないんですかね?
今のoop慣れした世代にはこっちの方が親近感あるから
とっつきやすいと思うんだけど

58 :デフォルトの名無しさん:2013/03/12(火) 20:55:24.88
マクロは大勢で共同作業するときには C++ のテンプレート並みに諸刃の刃ぁぁぁ
なんです

59 :デフォルトの名無しさん:2013/03/12(火) 21:00:59.93
諸刃の剣っていいたかったのか?

60 :デフォルトの名無しさん:2013/03/12(火) 21:31:28.50
テンプレよりもオペレータオーバロードによくたとえられる気がするけど

61 :はちみつ餃子 ◆8X2XSCHEME :2013/03/12(火) 21:47:58.30
何の蓄積もないところからってことになると統制がとれないだろうけど、
デファクトスタンダードになりうるクラス指向ライブラリがあれば、それなりに使う人もいるんじゃね?

62 :デフォルトの名無しさん: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/

63 :デフォルトの名無しさん: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)))

64 :デフォルトの名無しさん:2013/03/14(木) 14:33:24.70
CLはマルチパラダイム言語というが、
いったんCLOSの機能を使い出すと副作用でまくりで
関数プログラミングとの共存など不可能のように思える。

65 :デフォルトの名無しさん:2013/03/14(木) 14:37:36.56
純粋関数型パラダイムはちょっと特殊だからなぁ

66 :デフォルトの名無しさん:2013/03/14(木) 21:10:25.24
>>65
式と文が別物ってところに山ほど違和感がある >いわゆる普通の言語
# 高級アセンブラの C は除く

67 :デフォルトの名無しさん:2013/03/14(木) 21:47:43.67
その C だって、GCC なら ({ ... }) で囲めばなんでも式になるぞw
そもそも、代入が式だし。

68 :デフォルトの名無しさん:2013/03/14(木) 22:12:50.89
> GCC なら ({ ... }) で囲めばなんでも式
いや、それは極論だし

69 :デフォルトの名無しさん:2013/03/14(木) 22:47:11.34
H

70 :デフォルトの名無しさん:2013/03/15(金) 19:38:17.80
land of lisp まだ来ねー

71 :デフォルトの名無しさん:2013/03/15(金) 21:24:32.91
昔のDOSの表計算アプリみたいな画面を
REPLで実現してくれるライブラリってない?

72 :デフォルトの名無しさん:2013/03/16(土) 00:51:53.81
>>71
*curses.so あたりを ffi すればいいのではあるまいか?

73 :デフォルトの名無しさん:2013/03/16(土) 09:18:52.30
cl-ncursesっていうのを見つけた
ありがとう

74 :デフォルトの名無しさん: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つだけにしたらいいのかね。
お前らはどうやってんの?

75 :デフォルトの名無しさん:2013/03/16(土) 17:08:50.04
read-lineで入力を求める際に
初期値として任意の値をセットしておくことはできませんか?

76 :デフォルトの名無しさん:2013/03/16(土) 19:16:56.09
>>75
どこかのユーティリティライブラリにありそうですけど、
自分の使ってるものには見当たらなかったので書いてみました。
こういう感じので良いですか?

http://paste.lisp.org/+2WZC

77 :デフォルトの名無しさん:2013/03/16(土) 19:42:23.35
>>74
自分ならだるさを許容するかパッケージプリフィックスで手を打つと思う。

78 :デフォルトの名無しさん:2013/03/16(土) 21:33:03.10
>>76
ありがとうございます。
やりたいことは初期値をセットしておいてその一部を書き換えてread-lineさせる
という動作なので、"default value"が表示されてる状態にしたいのです。

79 :デフォルトの名無しさん: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*))))))

80 :デフォルトの名無しさん: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))))

希望と合ってる?

81 :デフォルトの名無しさん:2013/03/16(土) 21:59:43.71
なぜこんなことをしているのかというと、XMLからデータを取ってこようとしているからです

厚かましいお願いですが、XMLで属性からデータを取得できるやり方も教えていただけないでしょうか

82 :デフォルトの名無しさん:2013/03/16(土) 22:07:48.91
>>80
完璧です!ありがとうございます
畏れ入りました

自分のレベルがあまりに低いからかもしれませんが
なぜこんな短時間でマクロを考えつけるのでしょうか?
やっぱり経験ですか?

83 :デフォルトの名無しさん:2013/03/16(土) 22:16:15.56
>>78
自分はあまりその辺りに詳しくないのですが、おそらく端末制御の領分になると思います。
難易度がかなり上がりますが、それでもその方式にこだわりがあるのなら、
>>72-73で挙がっている情報を調べてみると手がかりが掴めるかもしれません。

84 :デフォルトの名無しさん: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を使った方が良いと思います。

85 :デフォルトの名無しさん:2013/03/16(土) 22:53:51.01
何も考えず(ql:quickload "xpath")したら
ttp://common-lisp.net/project/plexippus-xpath/examples.html
これ入ったのでこれ使うといいと思う。依存関係でClosure XMLも入るし

86 :デフォルトの名無しさん:2013/03/16(土) 23:06:11.04
>>84
>>85
なるほど。勉強になります。
それらを踏まえ、もう一度作りなおしてみます。

ご教授ありがとうございました!

87 :デフォルトの名無しさん: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

88 :デフォルトの名無しさん:2013/03/16(土) 23:34:39.24
>>87
ありがとうございます。早速ブックマークに登録しました。

89 :デフォルトの名無しさん:2013/03/17(日) 07:44:14.36
>>78,83
ncurses に libform ってのがくっついてて,
こいつの set_field_buffer() とかをffiして使えば何とかなるのかな?
後は自前で作りこむくらいしか思いつかない

90 :デフォルトの名無しさん:2013/03/17(日) 09:20:40.67
>>83,89
ヒントありがとうございます!
その辺をslimeのcontribあたりと合わせて見てみます。

91 :デフォルトの名無しさん:2013/03/17(日) 18:46:12.79
一定の出力を最後にまとめて文字列として返したいのですが、どういう風にすればいいのでしょうか
今は↓のように文字列をconcatenateで連結させていますが、formatのnilの部分をストリームに変えて出来ないものかと思っています
(concatenate 'string
(format nil "テスト")
(format nil "bar")
)

92 :デフォルトの名無しさん:2013/03/17(日) 19:03:55.87
(defun mkstr (&rest args)
 (with-output-to-string (s)
 (dolist (a args) (princ a s))))
こういうこと?

93 :デフォルトの名無しさん:2013/03/18(月) 09:45:42.47
それです!ありがとうございました

94 :デフォルトの名無しさん:2013/03/18(月) 18:07:16.64
thunkってどういうときに使うんですか?

95 :デフォルトの名無しさん:2013/03/18(月) 18:41:36.92
感謝したとき

96 :デフォルトの名無しさん:2013/03/18(月) 18:49:13.61
thanks!

97 :デフォルトの名無しさん:2013/03/18(月) 21:46:13.46
>>94
めちゃくちゃ大雑把に言えば
「今評価しないで後で評価されるかも知れない式」
全般のことじゃね?

98 :デフォルトの名無しさん:2013/03/18(月) 23:14:34.67
CLOSあんま好きじゃない派の人って
やっぱ構造体使うんですか?それともリスト?

99 :デフォルトの名無しさん:2013/03/19(火) 00:32:11.47
両方使ってる気がします。

100 :デフォルトの名無しさん: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)

これってどうすればいいんでしょうか?

101 :デフォルトの名無しさん:2013/03/20(水) 15:36:30.88
>>100
それEmacs Lispだと思うんで、Emacsのスレで聞いてください。

てーか、そういうときはM-x describe-functionで関数を調べてみてください。
"Replace all matches for REGEXP with REP in STRING."って書いてます。

102 :デフォルトの名無しさん:2013/03/23(土) 01:58:05.19
list*とconsは全く同じものですか?

103 :デフォルトの名無しさん:2013/03/23(土) 02:31:29.01
consは2引数やで

104 :デフォルトの名無しさん:2013/03/23(土) 09:47:49.14
たしかにそうでした

105 :デフォルトの名無しさん:2013/04/07(日) 23:35:25.85
みなさんは作った実行ファイルの大きさとか気にならないですか?

106 :デフォルトの名無しさん:2013/04/08(月) 04:27:40.74
>>105
なんで気になるの?
自分はMegademoで4Kとか64Kでも作らない限り気にもしないけど

107 :デフォルトの名無しさん:2013/04/08(月) 16:44:33.11
>>105
16G とか 32G の主記憶が当たり前の時代に, 組み込み物とか >>106 のような
用途でもない限り, 実行ファイルの大きさとか気にしてもしょうがないじゃん.
組み込み物だって, 1G とか 2G の主記憶積んだやつあるのに...

108 :デフォルトの名無しさん:2013/04/08(月) 17:12:57.85
コンパイラが吐き出す実行ファイルの大きさよりも、実行時のメモリ消費量のほうが気になります。

109 :1/2:2013/04/09(火) 01:33:46.19
型宣言を入れたのに何故か高速化されなくて困ってます。
(setf d (make-array '(1000 1000) :element-type 'double-float :initial-element 1.0d0))
という2次元配列の合計を求める関数なんですが、
(defun sum-d (a)
(let ((sum 0))
(dotimes (r 1000) (dotimes (c 1000) (incf sum (aref a r c)))) sum))

これに型宣言を以下のように入れてみました。
(defun sum-d-opt (a)
(declare (type (simple-array double-float (1000 1000)) a))
(let ((sum 0.0d0))
(declare (type double-float sum))
(dotimes (r 1000) (dotimes (c 1000) (incf sum (aref a r c)))) sum))

110 :2/2:2013/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です。

111 :デフォルトの名無しさん:2013/04/09(火) 05:17:12.18
>>110 コンパイラが賢くないとしか言えないんだが...
disassemle すると, 型宣言した方はsse命令を使おうとして,
そのための準備コードが増えて遅くなってるように見える
(手元にあるのは 1.7 だけど....)

112 :デフォルトの名無しさん: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

113 :デフォルトの名無しさん:2013/04/10(水) 00:52:01.96
http://permalink.gmane.org/gmane.lisp.steel-bank.devel/17159
GSoC2013
ガチリストになってて面白いけど、どれぐらい応募あるのかな。

114 :109:2013/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の方がいいかもしれませんね・・

115 :デフォルトの名無しさん: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)

116 :デフォルトの名無しさん: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での結構クリティカルなバグとかもあったし、
個人的には安定してる印象は持ってない。

117 :デフォルトの名無しさん:2013/04/26(金) 20:42:23.25
(A B C D E) のcadddrがDになるのは何故ですか?

118 :デフォルトの名無しさん: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

119 :デフォルトの名無しさん:2013/04/26(金) 20:55:17.77
cdrのcdrのcdrのcarだから
逆順に読めばいい

120 :デフォルトの名無しさん:2013/04/26(金) 22:39:28.61
カドゥドゥドゥラァ

121 :デフォルトの名無しさん:2013/04/28(日) 13:39:23.14
コマンドラインから
$ sbcl --script sample.lisp

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

あまりプロジェクトに関わったりしたことないので
ファイル配置の勘所がわからないです

122 :デフォルトの名無しさん: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をダウンロードしてコンパイルしてくれるので。

123 :デフォルトの名無しさん:2013/04/28(日) 14:18:27.25
あと、自分が見てきた中では、

* 必要なライブラリは事前にQuicklispや手動でインストールしておくことが前提
* 必要なライブラリの読み込みはASDFで依存関係を定義して利用

という形のプロダクトが多かったです。

作っているのがライブラリならそのままASDF経由で利用してもらって、
アプリケーションならC言語のmain的なトップレベルの関数を用意しておいて、
REPLから呼び出したり、実行形式にしたコアイメージのトップレベルに指定したり、
スクリプトから(asdf:load-system :foo)とか(ql:quickload :foo)で読み込み、
トップレベルの関数を呼び出し、って感じじゃないでしょうか。

この辺り、Common Lispでは色々方法があって、全部説明すると長くなるので、
どんな感じの運用をしたいか書いてくれると回答をもらいやすいかも。

124 :デフォルトの名無しさん: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)
を書いておくのは自然なんでしょうか?

125 :デフォルトの名無しさん:2013/04/28(日) 15:22:31.24
>>123

ASDFファイル(sample.asd)に、実行時に必要になるライブラリを
明記しておくのが多いということでしょうか?

126 :デフォルトの名無しさん:2013/04/28(日) 17:56:12.85
>>124
スクリプトでは自然だと思います。

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

ASDFに対応すると便利なのは、ソフトウェアのビルドに手順が必要だったり、
書いたソフトウェアを配布したいときです。ビルド用にcompile-fileするスクリプトを書いたり、
マクロを使うときにeval-whenで:comple-toplevel指定したりって面倒じゃないですか。
そういうときに利用するとその辺りを良きに計らってくれるので楽です。
makeとかrakeとかmvnとかantとかその辺に該当します。

127 :デフォルトの名無しさん:2013/04/28(日) 23:01:16.97
>>126
とてもよくわかりました

ありがとうございました!

128 :デフォルトの名無しさん:2013/05/09(木) 20:17:14.37
ブラウザゲーム作りたいです(´・ω・`)

129 :デフォルトの名無しさん:2013/05/09(木) 22:15:46.82
ゲーム内部のバックエンド部分なら問題なく書けると思うから頑張れ。
ユーザインターフェイス(画面周りとか操作周りとか)は、
多分JavaScriptの力を借りることになる。

130 :デフォルトの名無しさん:2013/05/09(木) 22:47:45.81
Common Lisp から JavaScript のコードを生成するとかどうよ。

131 :デフォルトの名無しさん:2013/05/11(土) 20:15:46.77
>>130 parenscript の話?

132 :デフォルトの名無しさん:2013/05/24(金) 11:45:04.97
ついでにnode.jsも使わせて

133 :デフォルトの名無しさん:2013/05/29(水) 02:04:18.66
lispをjavascriptに変換してからv8で動かしたら
stalinより高速なんじゃないのかな

134 :デフォルトの名無しさん:2013/05/29(水) 03:05:21.97
事前に型付けしまくってAOTコンパイルで頑張るCommon Lispと
実行時情報を元にJITコンパイラが頑張るJavaScriptだと、
アプローチ的にはむしろ対極にある気がするけど

135 :デフォルトの名無しさん:2013/05/29(水) 04:19:34.86
v8はプロファイラで速度のボトルネック探してから
そこだけ型推論かけてNativeにコンパイルするそうだ

136 :はちみつ餃子 ◆8X2XSCHEME :2013/05/29(水) 12:08:35.87
asm.js は Common Lisp 的アプローチって言えるんじゃね。

>>133
JavaScript って毎回ソースコードを読込むところからスタートして実行するところまでやらなきゃならないから、
コンパイル・最適化が実行時間に含まれるわけで、あまり気合入れた最適化も出来ないんだよな。
つまり、めいっぱい頑張って最適化すればいいわけじゃなくて、
全体として一番よくなるほどほどのところを目指すトレードオフの見極めが重要な JS は
Common Lisp とは目標が違うから高速化のために組合わせるのはうまくない気がする。

137 :デフォルトの名無しさん:2013/05/29(水) 12:15:29.28
asm.jsはrabbit compiler的だよ。
部分言語である小さいcore言語を設定してて。

それからJITは気合入れたい所に目一杯気合入れることが可能なフレームワークです。
実行時プロファイルが使えるので。

138 :デフォルトの名無しさん:2013/06/07(金) 01:56:27.51
何でもいいので仕事くだされ
twitter.com/g000001

139 :デフォルトの名無しさん:2013/06/07(金) 01:59:19.02
PHPでよければ

140 :デフォルトの名無しさん:2013/06/08(土) 21:18:23.73
(A B C D)は
なんで (A . (B . (C . D))) じゃなく (A . (B . (C . (D . nil)))) なの?最後の nil は何なの?

141 :デフォルトの名無しさん:2013/06/08(土) 21:32:26.56
長さ0のリスト

142 :デフォルトの名無しさん:2013/06/08(土) 21:33:48.63
nilはなにもないことを表す特殊な記号
() と書くこともある

143 :デフォルトの名無しさん:2013/06/08(土) 21:36:06.91
乳首じゃないからな

144 :デフォルトの名無しさん: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)となる

とか適当なことを言ってみる

145 :デフォルトの名無しさん:2013/06/08(土) 22:00:19.42
いや、nilそのものの意味を訊いてるわけじゃなくてdana

146 :デフォルトの名無しさん:2013/06/08(土) 22:04:11.74
(A . (B . (C . (D . nil)))) →  (A . (B . (C . (D . ()))))

ということだ

147 :144:2013/06/08(土) 22:05:18.70
ああ、全然ちがう!!
恥ずかしくて死にそう・・・orz

148 :デフォルトの名無しさん:2013/06/08(土) 22:09:38.51
最後がなぜnilなのかは、リストの定義がそうだからとしか言いようがない。

149 :144:2013/06/08(土) 22:10:00.86
(B (C . D))と勘違いしてた><

150 :デフォルトの名無しさん: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))) ではない

151 :デフォルトの名無しさん:2013/06/08(土) 22:15:29.66
3つ以上並んだやつの略記リストは最後はnil

152 :デフォルトの名無しさん:2013/06/08(土) 22:20:23.30
Lispは難解だな

153 :デフォルトの名無しさん: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つで構成されるリストと解釈される

154 :デフォルトの名無しさん:2013/06/08(土) 22:37:08.95
同様に (A . (B . (C . D))) は (A B (C D)) のことになる (A B C D)にはならない

155 :デフォルトの名無しさん:2013/06/08(土) 22:38:31.42
(A) => (A . nil)
で、
(A (B C)) => (A . ((B . (C . nil)) . nil))
であってる?

156 :デフォルトの名無しさん: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)))

157 :デフォルトの名無しさん:2013/06/08(土) 22:43:29.82
なんだかオラ混乱してきたぞ

158 :155:2013/06/08(土) 22:46:45.98
>>151,153,154
は違うように思う。
(A . (B . (C . D))) は (A B C . D)

159 :デフォルトの名無しさん:2013/06/08(土) 22:49:35.87
厳密なS式なんて時代遅れ

160 :デフォルトの名無しさん: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).

161 :デフォルトの名無しさん:2013/06/08(土) 23:37:09.68
>>150
(a b)は(a . (b . nil)) だよ。
(a . b)はあくまで(a . b)だ。
そもそも(a)が(a . nil)なのに、要素数が2のときだけ例外になんかせんよ。

162 :デフォルトの名無しさん:2013/06/09(日) 00:58:48.17
(A B)と(A . B)は別物ってことか

163 :デフォルトの名無しさん:2013/06/09(日) 01:09:24.59
lispの論文読めば分かる

Recursive Functions of Symbolic Expressions
http://www-formal.stanford.edu/jmc/recursive/node3.html

164 :デフォルトの名無しさん:2013/06/09(日) 01:26:29.46
リストとは2つの値のペアのことであり、3つ以上は無い

165 :デフォルトの名無しさん:2013/06/09(日) 06:42:57.75
盛り上がっているのかと思ったらパルプンテかかってる。

166 :デフォルトの名無しさん:2013/06/09(日) 12:02:22.61
(A . (B . (C . D)))
(A . (B . (C . (D . nil))))
それぞれについて一要素づつ表示する関数でも書いてみたら?
どっちが便利か?
どっちを採用したくなるか?

167 :デフォルトの名無しさん:2013/07/03(水) NY:AN:NY.AN
CFFIの使い方解かりやすい日本語サイトか
簡単な例など何方か教えていただけますか?

168 :デフォルトの名無しさん:2013/07/03(水) NY:AN:NY.AN
>>167
CFFI - Common LISP users jp
cl.cddddr.org/index.cgi?CFFI

169 :デフォルトの名無しさん:2013/07/03(水) NY:AN:NY.AN
>>168
ありがとございます。

170 :デフォルトの名無しさん:2013/07/09(火) NY:AN:NY.AN
On Lispのtrec関数が単なる遅延評価の言い換えなだけな件

171 :デフォルトの名無しさん:2013/07/09(火) NY:AN:NY.AN
そうか。

172 :デフォルトの名無しさん:2013/07/12(金) NY:AN:NY.AN
Lisp in Summer Projectsに参加してる方、いますか?

173 :デフォルトの名無しさん:2013/07/17(水) NY:AN:NY.AN
日本語版のLet Over Lambdaは難しくて読めないっていうか、
読んでるとだんだんイライラしてくる。

174 :デフォルトの名無しさん:2013/07/17(水) NY:AN:NY.AN
気合で読んだぜ

175 :デフォルトの名無しさん:2013/07/17(水) NY:AN:NY.AN
そうか。

176 :デフォルトの名無しさん:2013/07/17(水) NY:AN:NY.AN
CLOSあったらいらないよね
plamdaとか
>Let Over Lambda

177 :デフォルトの名無しさん:2013/07/17(水) NY:AN:NY.AN
まあマクロの使用例ってところじゃねーの

178 :デフォルトの名無しさん:2013/07/18(木) NY:AN:NY.AN
it this self
もうアナフォリックマクロに使えそうな名前が残ってない

179 :デフォルトの名無しさん:2013/07/18(木) NY:AN:NY.AN
下のunwind-protectのプロテクト節の部分で、ストリーム sはきちんと閉じられるでしょうか?
それとも、変数lazyが他の値に再束縛され、sがガーベジコレクトされるまで開いたままなのでしょうか?

180 :デフォルトの名無しさん: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)
=> ""

181 :デフォルトの名無しさん: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 しても何もおこらない。

182 :デフォルトの名無しさん:2013/07/20(土) NY:AN:NY.AN
ありがとうございました。
もやもやがすっきりしました(:-D)

183 :デフォルトの名無しさん:2013/07/20(土) NY:AN:NY.AN
:-(

184 :デフォルトの名無しさん:2013/07/20(土) NY:AN:NY.AN
:-(8-D)

185 :デフォルトの名無しさん:2013/07/31(水) NY:AN:NY.AN
common lisp処理系はエラー時に行番号を教えてくれないんだけどどうやってエラー箇所を特定すればいいの?

186 :デフォルトの名無しさん:2013/07/31(水) NY:AN:NY.AN
あやしげなとこにprint・・・

187 :はちみつ餃子 ◆8X2XSCHEME :2013/07/31(水) NY:AN:NY.AN
処理系によってはデバッグモードに突入したりするんじゃないの。
処理系によって賢い機能がある場合もあると思うので、もうちょっと詳細を書くとよいかも。

マクロがあると「行番号」で表すのが難しかったりするんだよね。
マクロ定義の方が間違ってるかもしれないし、
そのマクロ定義もマクロで生成されてるかもしんない。
エラーが発生したときにどこを示していいんだか処理系には判断付けるのが難しい。

188 :デフォルトの名無しさん:2013/08/01(木) NY:AN:NY.AN
clispとかsbclの話なんだけどちょっとした失敗なのに行を教えてくれないせいで無駄に時間食うんだよ
行番号はマクロ展開後でいいと思うんだけど何が駄目なのかな
C言語もそうだし自作処理系でもそうやったけど特に不都合はなかったな

189 :デフォルトの名無しさん:2013/08/01(木) NY:AN:NY.AN
自分が言いたいのはなにかいい方法があれば教えてくださいってことね

190 :デフォルトの名無しさん:2013/08/01(木) NY:AN:NY.AN
>>188
slime 使えば?
エラーが起こった箇所のソースに色けて
^N とか ^P でその場所にカーソルが飛んで
該当エラーの内容も表示してくれるぞ

191 :デフォルトの名無しさん:2013/08/01(木) NY:AN:NY.AN
>>188
slime 使えば?
エラーが起こった箇所のソースに色けて
^N とか ^P でその場所にカーソルが飛んで
該当エラーの内容も表示してくれるぞ

192 :デフォルトの名無しさん:2013/08/01(木) NY:AN:NY.AN
それはslime-compile-defunでコンパイルした時のことなの?
自分はslime-eval-defunで評価してそれをreplから実行してたんだけど
それよりコンパイルしたほうがいいのかな

193 :デフォルトの名無しさん:2013/08/02(金) NY:AN:NY.AN
関数コンパイルするタイミングでコードの位置覚えてくれるんで、
編集中やデバッグ中に定義してる位置にジャンプしたりできる。

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

行番号なくてもスタックトレースあるからそれでコンディション発生した関数は分かる。
あとは適当な位置にbreakつっこんで止めたり、printで出力したりすりゃ結構すぐ分かるよ。

194 :デフォルトの名無しさん:2013/08/02(金) NY:AN:NY.AN
>>187
処理系によっては、じゃなくて、Common Lispは規格でデバッガの存在が要求されてる。
ブレークポイントとかステップ実行とかディスアセンブラとかも同様。

195 :はちみつ餃子 ◆8X2XSCHEME :2013/08/02(金) NY:AN:NY.AN
>>194
存在が要求されてるのは知ってたけど、
挙動がどの程度細かく規定されてるのかは知らなんだ。
ステップ実行まであるのか。 CL さんマジかっけー。

196 :デフォルトの名無しさん:2013/08/03(土) NY:AN:NY.AN
common lisp
slimeいれておおすごいと思った所で熱が覚めて辞めてしまい1年ほど経過

マクロとか使いこなせると楽しいんだろうけれど、何かそのために面白い題材とか無いものか

197 :デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
何も言わずにOn Lispを読み通せ

198 :デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
プログラミングのために本読むの嫌いだけど読むか・・

199 :デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
ふつーにwebアプリ作るといいよ。動的に変更できるのが面白い。

200 :デフォルトの名無しさん:2013/08/05(月) NY:AN:NY.AN
lispbox入れて始めてみたんだが、
コンパイルして関数を実行したら日本語が文字化けする
普通にslimeに直に入力したら日本語でも出力されるのに
こんな状況
i.imgur.com/A0pGoRn.png

201 :デフォルトの名無しさん:2013/08/05(月) NY:AN:NY.AN
Shift JIS を使うのは情弱

202 :デフォルトの名無しさん:2013/08/06(火) NY:AN:NY.AN
Allegro CLをEmacsからfi:common-lispで使っても日本語が文字化けする
なんでだろう

203 :デフォルトの名無しさん:2013/08/07(水) NY:AN:NY.AN
http://jp.franz.com/base/technology_japanese.html
ここら辺は読んだ?

204 :デフォルトの名無しさん:2013/08/07(水) NY:AN:NY.AN
>>203
直接alispを起動して日本語のシンボルや文字列を扱うのは問題ないんだ

205 :デフォルトの名無しさん:2013/08/07(水) NY:AN:NY.AN
ttp://fast-uploader.com/file/6931362683171/
こんな感じ

206 :デフォルトの名無しさん:2013/08/07(水) NY:AN:NY.AN
http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/ACLTutorial.html#sec13
設定はこんな感じなの?

207 :デフォルトの名無しさん:2013/08/07(水) NY:AN:NY.AN
>>206
うん 一番下のset-buffer-process-coding-systemが怪しくて消したりしたけど
起動した時のメッセージが微妙に変わったくらいだった

208 :デフォルトの名無しさん: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版だとヒープ領域の制限で日本語化は無理とかかな

209 :デフォルトの名無しさん:2013/08/07(水) NY:AN:NY.AN
clojureのREPL使っている人がいて
分からない関数carがあったら
(doc car)としてポンポン調べていたのですが
common lispにはこういう関数ありませんか?

210 :デフォルトの名無しさん:2013/08/07(水) NY:AN:NY.AN
(documentation 'car 'function)

SLIME使ってたらキー操作でHyperSpec引ける

211 :デフォルトの名無しさん:2013/08/08(木) NY:AN:NY.AN
>>210
2画面で片方ブラウザにしてるんだけど、新規タブでばんばん開いちゃうのやめる方法ないかしら

212 :デフォルトの名無しさん:2013/08/08(木) NY:AN:NY.AN
firefoxみたいに引数で新規タブかどうか指定できるブラウザ使うか、w3使うか。

213 :デフォルトの名無しさん: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の中から見えないのですか?

214 :デフォルトの名無しさん:2013/08/11(日) NY:AN:NY.AN
evalは一番外の環境を使って評価するんじゃなかったっけ

215 :デフォルトの名無しさん:2013/08/11(日) NY:AN:NY.AN
>>213
HyperSpec のevalのとこに書いてるよ
何故そうなってるか、という質問だとおれは答え難いなぁ。そんなものだ、と思って使ってた。詳しい人解説ヨロシク

216 :はちみつ餃子 ◆8X2XSCHEME :2013/08/11(日) NY:AN:NY.AN
前スレの 407 から 414 あたりで同じような話題が出てるよ。

217 :213:2013/08/12(月) NY:AN:NY.AN
>>214,215,216
ありがとうございます。
前スレ見ました。最適化をしやすくするためにローカル環境を使わないようですね。
ちょうど去年の今頃の自分のレスでした。

(ICFPの時だ(そして今も))

218 :デフォルトの名無しさん:2013/08/12(月) NY:AN:NY.AN
なんだと?

219 :デフォルトの名無しさん:2013/08/12(月) NY:AN:NY.AN
お前は相変わらず成長しないな

220 :デフォルトの名無しさん:2013/08/12(月) NY:AN:NY.AN
ワロタ
そんなことあるもんなんだな

221 :デフォルトの名無しさん:2013/08/13(火) NY:AN:NY.AN
eval はあんまり使ったことないな

222 :デフォルトの名無しさん: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を返すにはどう書くのがよいでしょうか?

223 :222:2013/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))

224 :222:2013/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

出来ました

225 :デフォルトの名無しさん:2013/08/16(金) NY:AN:NY.AN
いきなりそっちにいくのか(困惑)

226 :222:2013/08/16(金) NY:AN:NY.AN
そっち、とはもっと単純な方法があったということでしょうか

227 :デフォルトの名無しさん: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が出てきたので

228 :デフォルトの名無しさん:2013/08/20(火) NY:AN:NY.AN
ちょっとお尋ねします。arrayの一部を新たにarrayを作らずに切り出すことってできないんでしょうか?
新たにnewしないで、もとのarrayを直接参照するsubseqを探しているんですが、そういったものはないんでしょうか?

229 :デフォルトの名無しさん: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)))である。
この構造は元の構造に含まれていないため、切り出すということができない。

230 :デフォルトの名無しさん:2013/08/20(火) NY:AN:NY.AN
と書いてみたがarrayの話か・・

231 :デフォルトの名無しさん:2013/08/20(火) NY:AN:NY.AN
あれ〜?

232 :デフォルトの名無しさん:2013/08/20(火) NY:AN:NY.AN
>>230
レスありがとうございます。そうなんです、arrayの話なんです。

>>231
(^^;

とりあえず、自己解決しました。
displaced-arrayでいけそうです。make-arrayのオプションとは、盲点でした。

233 :デフォルトの名無しさん:2013/08/21(水) NY:AN:NY.AN
緑のモンスターの本買いました。
コーディングは適当なエディタに書いてclispにペースト実行ってやってるんですが、もっといいやり方ないですか?
Emacsにslime?がいいのですかね?

234 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN
鉄板→emacs&slime

235 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN
>>233
slime の環境は quicklisp というライブラリ管理ツールを使って簡単にできるよ

236 :デフォルトの名無しさん:2013/08/22(木) NY:AN:NY.AN
>>234
おお、やっぱりこの組み合わせが1番なんですね。
本読んでると特にそのあたりの記載がなくて、最初はTerminalからclisp立ち上げて直に長文コード打ってました。(コピペで、ですが)
emacsでコード書いて保存してslimeで実行って感じがデファクトなんでしょうか?

>>235
quicklisp初めて知りました。これは管理が楽になりそうでいいですね。
私の環境はMacなのでbrewでclisp入れてますが、slime使うなら管理も含めてquicklispがいいですね。移行します。
ご教示ありがとうございました。

237 :デフォルトの名無しさん: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が表示される

書きながらどんどん実行していく。

238 :236:2013/08/23(金) NY:AN:NY.AN
>>237
便利過ぎて鼻血が出ました。
これでLisp本がさくさく進められます!!ありがとうございました!

239 :デフォルトの名無しさん: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))

240 :デフォルトの名無しさん: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+ _))) _)

241 :デフォルトの名無しさん: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)))

間違ってたらめんご

242 :デフォルトの名無しさん:2013/09/03(火) 00:25:33.20
マクロ部分はこっちに直して
(defmacro -> (&body forms)
(build-> forms))

243 :デフォルトの名無しさん: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))))))

244 :デフォルトの名無しさん: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)))

245 :デフォルトの名無しさん: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)))))

246 :デフォルトの名無しさん: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)))))

247 :デフォルトの名無しさん:2013/09/03(火) 22:44:20.74
>>222
大分おそくなったちゃったけど、こんなのはどうだろう。

(some (lambda (lst) (find-if #'oddp lst)) '((2 4 6 8) (2 1 3)))
=> 1

248 :デフォルトの名無しさん:2013/09/05(木) 21:25:01.23
someとfind-ifって同じ?

249 :デフォルトの名無しさん: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

250 :デフォルトの名無しさん: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にならなきゃおかしいですよね。
バグですか?

251 :デフォルトの名無しさん:2013/09/08(日) 11:06:49.39
>>250
仕様です。
その式、マニュアルにそのまま出てます。
tp://maxima.sourceforge.net/docs/manual/en/maxima_29.html

252 :デフォルトの名無しさん:2013/09/08(日) 15:22:56.42
仕様というか、例としてはそうなっているけど、なぜ2にしているかの理由は書いてないんじゃね?

253 :デフォルトの名無しさん:2013/09/11(水) 04:26:19.84
clojureのthreading macroってquicklispにあったりしませんか?
threadなどで検索をかけてもこれといってひっかかるものがありません

254 :デフォルトの名無しさん:2013/09/11(水) 08:01:21.21
>>253
threading macroって -> と ->> のことでいいのかな。
それなら以下のパッケージに含まれているようです。

quickdocs.org/cl-arrows/
quickdocs.org/backports/

255 :デフォルトの名無しさん:2013/09/11(水) 23:19:11.68
>>254
ありがとうございます
clojureと挙動が少し違いましたがcl-arrowsが使えそうです
backportsも試してみたかったのですがquickloadがコケるのであきらめました

256 :デフォルトの名無しさん:2013/09/12(木) 22:08:33.23
quickutilにも、->と ->>があったらいいな。

257 :デフォルトの名無しさん:2013/09/13(金) 01:42:41.16
CLにclojureの#()やschemeのcutのようなものってありますか?

258 :デフォルトの名無しさん:2013/09/13(金) 05:38:54.24
Lisperはこの世のごみ屑
今すぐ消えるべし

259 :デフォルトの名無しさん:2013/09/13(金) 07:32:11.22
>>258
俺は特定のLisperにネタミがあるがおまえは一体何が原因でそんなことを言ってるんだ?

260 :デフォルトの名無しさん:2013/09/13(金) 07:59:09.35
そういうbotなんだよ

261 :デフォルトの名無しさん: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)

262 :デフォルトの名無しさん:2013/09/13(金) 20:58:10.94
>>259
ああいう人は心の病気なんだから専門家に丸投げして関わらない方がいいとおもうなー

263 :デフォルトの名無しさん:2013/09/14(土) 14:56:52.03
>>261
さんくす!

しかしこういうのが外部にしかないということはCL書く人は毎回lambdaを書くということなんでしょうか

264 :デフォルトの名無しさん:2013/09/14(土) 17:51:46.45
Land of Lispの最難関はどう考えても環境構築

265 :デフォルトの名無しさん:2013/09/14(土) 22:34:58.88
Win8+CLISP+emacs+SLIMEでやってる人っていますか?
CLISPとemacsのインストール後emacsのsite-lisp(?)フォルダにslimeをリネームしてコピーまではしたもののその後がわかりません。
ユーザーフォルダの奥の方にあるinit.elがWindowsではemacsの設定として扱われる、ということまでは調べました。

266 :デフォルトの名無しさん:2013/09/14(土) 23:05:11.94
そのレベルで詰まってるなら
lisp box使ってみたら?
http://common-lisp.net/project/lispbox/
win8で動くかわからないけどね

267 :デフォルトの名無しさん:2013/09/15(日) 02:44:41.82
double-float の simple-vector が作れないのは何で?
ついでに float の simple-vector に
double-float の値、例えば 0.0d0 を代入できてしまうのは何で?

268 :デフォルトの名無しさん: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)

269 :デフォルトの名無しさん:2013/09/15(日) 10:44:55.93
gaucheとguileの違うところを教えてください。

270 :はちみつ餃子 ◆8X2XSCHEME :2013/09/15(日) 11:02:18.21
>>269
ここは Common Lisp スレだよ。

271 :デフォルトの名無しさん: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)

272 :デフォルトの名無しさん:2013/09/15(日) 12:47:28.34
sbclとcclでは上のようになりました。
しかし、clispでは
[1]> (type-of (make-array 3 :element-type 'double-float))
(SIMPLE-VECTOR 3)
となります。
一体全体どうゆうこったい??

273 :デフォルトの名無しさん:2013/09/15(日) 13:07:50.90
型指定の類は最適化のヒントでしかないから、処理系によっては無視される。
clisp はあんまり最適化してくれない処理系。

274 :267:2013/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 が答えってことかな

275 :デフォルトの名無しさん: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

276 :デフォルトの名無しさん:2013/09/15(日) 15:27:22.95
ありがとうございます!
simple-vectorと型要素の関係がすっきりしました。
clispがあまり最適化してくれない、というのも勉強になりました。

277 :デフォルトの名無しさん:2013/09/15(日) 16:04:58.89
macroを勉強したいんですがon lispとlolがやはり定番なんでしょうか?

278 :デフォルトの名無しさん:2013/09/15(日) 16:25:38.78
LOLでは「マクロを構築する上で、良いリファレンスやチュートリアルはほとんどない。Paul GrahamのOn Lispはその例外の1つである。」って書いてあるね

279 :デフォルトの名無しさん: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 展開なんじゃね?

280 :デフォルトの名無しさん:2013/09/16(月) 19:11:10.11
>>266
動きました、ありがとうございます。
これでいちいちTerminalに一文字も間違えないように打つことから解放されました。
Land of Lisp もサクサク進められそうです。

ところでこのlispboxはClozureという処理系を利用していると書いてありましたが、CLISPと何か違いはあるのでしょうか?
Land of LispではCLISPを前提としているので。

281 :デフォルトの名無しさん: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でも動くんじゃない?

282 :デフォルトの名無しさん: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

283 :デフォルトの名無しさん: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")

284 :デフォルトの名無しさん: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

285 :デフォルトの名無しさん:2013/09/17(火) 19:02:41.80
Lisperはこの世のごみ屑
早く死滅せよ

286 :デフォルトの名無しさん: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)

287 :デフォルトの名無しさん:2013/09/19(木) 15:57:45.95
cl-dbiでtimestamp型が読み込めないよう

288 :デフォルトの名無しさん:2013/09/19(木) 16:32:48.74
common lisp の room 関数は 結果を標準出力に出力しますが、標準出力ではなく変数にセットすることは可能でしょうか?

289 :デフォルトの名無しさん: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))

290 :デフォルトの名無しさん:2013/09/19(木) 19:38:15.34
>>284
おかげさまで取得できました。

ありがとうございました。

291 :デフォルトの名無しさん:2013/09/19(木) 19:39:46.57
>>289
番号まちがえました。

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

ありがとうございました。

292 :デフォルトの名無しさん:2013/09/20(金) 20:43:58.30
Linuxで環境構築したらclisp,emacs,slimeをインストールするだけで終わった
Land of LispからLispを始める人は絶対Linuxでやるべきかと

293 :デフォルトの名無しさん:2013/09/20(金) 21:49:57.07
graphvizとかも必要になるから断然Linuxのがいいよ

294 :デフォルトの名無しさん:2013/09/21(土) 00:29:53.35
LispプログラマはMacよりLinuxなイメージ。
とはいえ現実にはアプリを走らせる環境と同じOSで開発するのが一番リスク少ないんだが。

295 :デフォルトの名無しさん:2013/09/21(土) 14:39:52.68
land of lispを読んで環境構築しようと思ったらいつのまにかinit.elを一日中いじっていた
何をいっているかわからねえと思うが

296 :はちみつ餃子 ◆8X2XSCHEME :2013/09/21(土) 15:20:00.33
よくあること。

297 :デフォルトの名無しさん:2013/09/21(土) 17:28:12.20
環境構築は断然 Linux か Mac がお勧め
Win なら、VMWare Player 入れて Linux の OS から入れなおしても
充分お釣りがくるよ

298 :デフォルトの名無しさん:2013/09/21(土) 17:28:38.62
今CLでマルチスレッドをやろうとしたらBordeaux-threadsなんだろうか。
ちなみに処理系はSBCL on Linux

299 :デフォルトの名無しさん:2013/09/22(日) 10:52:36.33
SBCL 専用でいいんだったら, SBCL のスレッド直接使えばいいと思う

300 :デフォルトの名無しさん:2013/09/27(金) 01:54:59.83
cygwin導入すらばいいだけだろ

301 :デフォルトの名無しさん:2013/09/27(金) 03:39:33.10
こんなところでスラバヤ殿下に会えるとは…

302 :デフォルトの名無しさん:2013/10/02(水) 17:59:30.81
clhsとcltl2の関係ってどうなってんの?教えて偉い人

303 :デフォルトの名無しさん:2013/10/02(水) 19:22:06.05
clhs は正式標準で, cltl2 は標準になる前に出版されて,
cltl2 出版後の改定が反映されてないだけだと認識してるが...

304 :デフォルトの名無しさん:2013/10/02(水) 21:03:41.63
横から口を挟んで申し訳ないのだけれどclhsって何ですか?

305 :デフォルトの名無しさん:2013/10/02(水) 21:17:00.15
Common Lisp Hyper Sex

306 :デフォルトの名無しさん:2013/10/03(木) 07:40:05.40
>>302
WikiのX3J13(http://en.wikipedia.org/wiki/X3J13)の中に、まんま
Relation to "Common Lisp the Language"
という項目の説明があります。

307 :デフォルトの名無しさん:2013/10/03(木) 07:53:32.13
clhshs

308 :デフォルトの名無しさん:2013/10/03(木) 19:40:18.49
>>306
ありがとうございます読んでみます

309 :304:2013/10/03(木) 22:50:20.33
なるほど Common Lisp HyperSpecのことでしたか

310 :デフォルトの名無しさん:2013/10/05(土) 13:20:12.60
Wikipedia を Wiki と略しちゃう男の人って…

311 :デフォルトの名無しさん: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)は計算を汚染し」の
「汚染」の意味がよくわかりません。

プログラミングにおいて「汚染」とはどのような意味で使われているのでしょうか?

312 :デフォルトの名無しさん:2013/10/09(水) 18:40:03.24
>>311
Land of Lispは読んでなくて手元にCommon Lispはないけど...

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

有理数で計算しているうちは正確な値で結果が得られるけど
少数が混じると近似値になってしまうということではなかろうかと存じます。

313 :312:2013/10/09(水) 18:49:23.69
読み返したら、あまり、回答になっていなかったか。

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

Webプログラムとかでデータにユーザが入れた値が入る等
安心して使えず、そのデータから派生したデータを使う場合
セキュリティに気をつけなくてはいけないデータになることを
汚染という使い方をしたのを見たことがある。

314 :デフォルトの名無しさん:2013/10/09(水) 18:55:09.68
>>311
浮動小数点数のいろんな問題を含めて汚染といっているのだろうけど、
代表的なもののひとつに桁落ちというのがあって、
(x+1/N)という実数をN回足し合わせれば必ず(N*x+1)になると期待してしまうけど、
浮動小数点数の場合、xとNがそれぞれ大きい場合にはN*xになってしまう場合があったりする。
Cなんかで数値計算をやる場合には、浮動小数点演算の特性を頭に叩き込むのがまず基本だけど、
Lispの場合は有理数が使えるんだから、速度を気にしない場面では有理数を使うべきってことではなかろうか。

315 :デフォルトの名無しさん:2013/10/09(水) 19:05:48.69
有理数と浮動小数点を計算すると浮動小数点になる
全部が有理数なら計算結果も有理数で得られるが、たったの1個でも浮動小数点が混ざっていると、計算結果は浮動小数点になってしまう
安全な食材の中に、たった1つでも有毒なものが混ざっていると、結果できた料理は有毒なものになってしまう様に喩えて、汚染とかいう

316 :311:2013/10/09(水) 20:34:03.34
>>312, 313
ありがとうございます。
>少数が混じると近似値に〜
正確な値を清浄ととらえた上で、近似値を"汚染"と表現しているのですね。

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

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

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

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

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

また、何かあったら質問させてください。ありがとうございました。

317 :デフォルトの名無しさん:2013/10/10(木) 00:40:52.84
汚染っていうのはヘンだろ。

318 :デフォルトの名無しさん:2013/10/10(木) 00:43:25.30
値が誤差に汚され染められる

319 :デフォルトの名無しさん:2013/10/10(木) 00:48:22.98
英語の contamination なんだろうけど。

純粋だったものが汚されるってニュアンスかな。

320 :デフォルトの名無しさん:2013/10/10(木) 00:48:56.48
変かどうかは分からないけど、>>315の言うような意味だと思うよ。
少しでも混ざると全体がそうなってしまう。一度混ざると取り除けない。

321 :デフォルトの名無しさん:2013/10/10(木) 01:11:08.17
日本語にするとおかしいね。
haskell界隈で使われる純粋と不純ってのも、日本語ではどうにも違和感がある。
不純ってのは、日本語の文脈では悪い意味でしか使われないから。

322 :デフォルトの名無しさん:2013/10/10(木) 01:46:24.89
>>317
>"汚染"というのは、正しい状態を前提として不正な状態になることをいうのかなと

この理解が変でしょ。
「正しい」状態とかじゃなくて、ある種のデータはこういう内部表現をされて
います、ってそれだけのことだから。

323 :デフォルトの名無しさん:2013/10/10(木) 01:55:36.45
再帰関数で相互に関数を呼んでいる場合に
ファイルをロードするとエラーメッセージ(片方の関数が存在しないと言われる)
が出てしまうのはどうやったら消えてくれるのでしょうか
動くので問題ないのですがエラーが気になるのです

324 :デフォルトの名無しさん:2013/10/10(木) 03:48:38.33
あっあっ有理数汚染されちゃうっ誤差入っちゃうよぉ…

325 :デフォルトの名無しさん:2013/10/10(木) 09:20:18.54
>>321
英語だって否定辞付きだろ。どうやって肯定的な意味に使うんだ。

326 :デフォルトの名無しさん:2013/10/10(木) 10:26:12.15
CLで一般的かどうか知らないけど、Schemeにはは「正確数」と「非正確数」があって、
非正格数を演算した結果は非正格数になる。

327 :デフォルトの名無しさん:2013/10/10(木) 11:47:50.50
正確に言えや

328 :デフォルトの名無しさん:2013/10/10(木) 11:55:49.08
>>325
あの人ら、不純を悪い意味じゃなくて非純粋の意味でバンバン使うじゃん
(setq *x* (1+ *x*))
(nreverse ...)
これ全部不純な計算ね
でも、日本語で不純っていわれると、何かよこしまな悪い考えを咎められているようにも聞こえるw

329 :デフォルトの名無しさん:2013/10/10(木) 13:10:02.09
その式はよこしまな悪い考えだと思う

330 :デフォルトの名無しさん:2013/10/10(木) 20:52:47.95
>>328
あの人らは「んなもん使うなぼけ !!」って意思を込めて
「不純」って使ってるのかと思った。

331 :デフォルトの名無しさん:2013/10/10(木) 20:59:45.69
なんで不純を理解できないんだ
前後の文と雰囲気から分かるだろ

332 :デフォルトの名無しさん:2013/10/10(木) 21:10:19.06
自由変数の捉え方の問題では?
*VARIABLE* は,
「宣言した時点で新しい評価環境が発生してる」
と, 考えると別に気にならないけど
(let* (tmp)
(setf tmp (op1 ...))
(othe-opx tmp)
(setf tmp (op2 ...))
的な, 連鎖で状態を変え続けられる方が気持ち悪い

333 :デフォルトの名無しさん:2013/10/11(金) 02:31:57.26
>>331
意味的に何を言いたいかは充分すぎるほど分かるけど、感覚的には全くわからんね
ああ、これまたどうしようもなく下手くそな英訳の濫用だなあとしか思わん

334 :デフォルトの名無しさん:2013/10/11(金) 03:45:20.83
俺は感覚的にもよくわかるけどな
煽りじゃないけど、もっと適切な言葉があるなら知りたいから教えて

335 :デフォルトの名無しさん:2013/10/11(金) 11:47:03.73
副作用

336 :デフォルトの名無しさん:2013/10/11(金) 18:33:52.99
副作用ってのも違和感のある表現だが英語だとどうなってるの?

337 :はちみつ餃子 ◆8X2XSCHEME :2013/10/11(金) 18:35:40.62
side effects

338 :デフォルトの名無しさん:2013/10/11(金) 18:38:29.23
副作用や不純に違和感を覚えるってただ慣れてないだけだろ
何にでも突っ込みたい人なのかな

339 :デフォルトの名無しさん:2013/10/11(金) 18:44:59.85
>>333
ばかなんだね
ふう

340 :デフォルトの名無しさん:2013/10/11(金) 21:09:23.52
>>338
副作用はもうなれたけど、コンピュータ系のcontextで聞き出した頃は、
薬とかの副作用っていう、「悪いもの」、「必要外のもの」的な
意味合いを感じて違和感があった。

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

ただ、慣れと言われればそれまでだよね。

341 :デフォルトの名無しさん:2013/10/11(金) 21:19:11.89
東山水上行

342 :デフォルトの名無しさん:2013/10/11(金) 23:37:31.50
「低レベル」とかも別に悪い意味じゃないよねぇ。

343 :デフォルトの名無しさん:2013/10/12(土) 04:36:52.83
いつまでも訳された日本語で考えてないで英語本来の意味で考えましょう

344 :デフォルトの名無しさん:2013/10/12(土) 04:38:31.93
文脈次第

345 :デフォルトの名無しさん:2013/10/12(土) 04:45:30.98
英語本来の?!
なにいってんだか
概念に日本語も英語もない
逆に英語でも日本語でも
文脈上の意味、ないし定義から離れて語素から意味を類推するというアホーなことをすることが問題。
どうも言葉自体になにかしら本来の意味があるなんて思っているやからが何人か書き込んでるな

LISP使いとしては、とっても恥曝しだぞ

346 :デフォルトの名無しさん:2013/10/12(土) 09:28:06.14
>>340
「副作用」って表現は関数型の言語以外では今でも見かけない気がするが

347 :デフォルトの名無しさん:2013/10/12(土) 09:33:12.96
新しい語義を翻訳する場合も、新しい語義として割り当てる努力は必要

348 :デフォルトの名無しさん:2013/10/12(土) 09:56:36.40
>>346
そこらへんのプログラマは使ってなくても、標準規格における重要な用語で、
「副作用完了点」とかあるから。

349 :デフォルトの名無しさん:2013/10/12(土) 14:26:15.07
>>345
英語では違和感ないのに、日本語に訳した言葉に違和感があると言ってるやつに対して言ってるだけだが?
LISPの前にまず英語と日本語勉強しろよ(笑)

350 :デフォルトの名無しさん:2013/10/12(土) 14:32:06.21
>>349
わかってないのにレスするな低脳君
馬鹿はおれ、嫌いなの

351 :デフォルトの名無しさん:2013/10/12(土) 14:37:56.31
>>350
指摘が全くもって的外れなの気付かないのかな?おバカさんなのかな?

352 :デフォルトの名無しさん:2013/10/12(土) 14:50:31.62
>>351
だから君にはわからんって
偏差値60以下だったろ?
レスするなよ、馬鹿は嫌いなの

353 :デフォルトの名無しさん:2013/10/12(土) 14:58:47.73
>>352
そんな低い偏差値の大学に通われていたのですか?
文脈の違いにすら気付かずに恥ずかしいレスをしてしまう程度なので仕方が無いですね
感情論でしか語れなくまともに議論すらできないお馬鹿さんはどちらでしょうか?
偏差値コンプレックスのお馬鹿さんは黙ってろよ

354 :デフォルトの名無しさん:2013/10/12(土) 15:00:55.24
まずは朝型の生活にな

355 :デフォルトの名無しさん:2013/10/12(土) 16:06:29.33
Amazonで「よこしまなきもち」で検索したらいやん

356 :デフォルトの名無しさん:2013/10/12(土) 16:12:11.74
折角の休みなのに喧嘩すんなって

357 :デフォルトの名無しさん:2013/10/12(土) 18:20:38.39
WindowsのLisp開発環境でお勧めはなんでしょうか

358 :デフォルトの名無しさん: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

359 :デフォルトの名無しさん:2013/10/12(土) 22:02:07.90
>>358
lispbox-0.7をインストールしてみました
Lisp環境を効率よく使うのにはEmacsが必須のようでうね・・・

360 :デフォルトの名無しさん:2013/10/12(土) 22:20:05.45
windowsならlispboxとlispcabinet,どっちがいいんだろう?

361 :デフォルトの名無しさん:2013/10/12(土) 23:04:59.68
>>346
昔の職場で普通にレビューとかで副作用って言葉使ってたな
関数型言語なんかの厳密な意味の副作用じゃなくて、
モジュールが何か目的以外の悪さしてるんじゃないかとかそんな意味で

362 :はちみつ餃子 ◆8X2XSCHEME :2013/10/13(日) 00:02:39.88
一般用語としてなら、例えば文字を表示することを目的とした手続きで文字が表示されるのは「作用」で、
何か値が返ってきてもそれはついで (副作用) のことっていうニュアンスになるよね。

だけど、技術用語というものはそういったニュアンスを排除して定義によって意味を確定するものだから、
領域によって定義が異なるとかいうのもそういうものとして受入れるしか仕方ない。
最初に用語を決めるときに慎重に定めるべきではあるけど、後になってわかることだってあるし。

363 :デフォルトの名無しさん:2013/10/13(日) 00:12:23.57
>>359
emacsは慣れるまで時間がかかるので、手っ取り早くlispいじりしたいなら、
カッコの対応表示してくれる適当なエディターで、
しこしこlisp書いてみたほうが楽しいかもしれません。
ちなみに、vim派にはslimvがあります。

ああ、そういえば、xyzzyってwindowsだったはずです。

364 :デフォルトの名無しさん:2013/10/13(日) 00:45:34.08
emacsはチュートリアルに少し時間割けばわりかし早く慣れる(気がする)

365 :デフォルトの名無しさん:2013/10/13(日) 00:49:53.99
emacsは好きになるまで2年ぐらいかかった

366 :デフォルトの名無しさん:2013/10/13(日) 10:45:04.24
>>361
「薬の副作用」のイメージで考えてる人多いからね。
まあ、薬の副作用自体間違った言葉なんだが。

367 :デフォルトの名無しさん:2013/10/13(日) 11:54:13.15
薬の方の副作用を二次作用って言うことにしよう。

368 :デフォルトの名無しさん:2013/10/14(月) 01:28:12.61
初心者以前の質問で申し訳ないのですが、
Haskell でいう Hoogle, Python でいう公式の library reference のような、
標準で定義されてる関数やパッケージの総覧みたいなものとしては何を利用するのがいいでしょうか?

369 :はちみつ餃子 ◆8X2XSCHEME :2013/10/14(月) 01:48:48.62
eldoc

370 :デフォルトの名無しさん:2013/10/14(月) 10:55:51.04
眠くなるのが「副作用」の薬とかは、眠れないという症状がある場合、
副作用もついでに期待して使われたりするぞ。花粉症の抗ヒスタミン剤とか。

371 :デフォルトの名無しさん:2013/10/14(月) 11:30:14.76
風邪はウイルス性だから抗生物質飲んでも治らないけど、
痰を切って喉をスッキリさせることを目的として処方されたり場合もあるしな。

372 :デフォルトの名無しさん:2013/10/14(月) 11:38:59.09
>>355
アカウントログイン状態で検索しちまったじゃねぇかwwwwww
この本を検索した人はのこの本にLispとかプログラム関係の本ばっかりの中にシマシマパンツが出てくるようになったらどないすんねんwwww

373 :372:2013/10/14(月) 11:40:18.04
ちなみに期待したのは猫関係の本だった

374 :デフォルトの名無しさん:2013/10/14(月) 12:06:55.50
不純Lisp

375 :デフォルトの名無しさん: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/)

376 :デフォルトの名無しさん:2013/10/14(月) 13:18:09.15
Common Lispで何か作りたいのですが
面白いアイデアてありますか?

377 :デフォルトの名無しさん:2013/10/14(月) 13:35:40.00
http://www.slideshare.net/amachang/ss-9119621
ネット上に転がってるやってみたを習作してみると、要望が来るかもよ

378 :デフォルトの名無しさん:2013/10/14(月) 18:04:11.67
>>369
>>375
ありがとうございます!

379 :デフォルトの名無しさん: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

380 :デフォルトの名無しさん:2013/10/18(金) 23:33:44.99
>>379
Mac Ports とか使ったら

381 :デフォルトの名無しさん:2013/10/19(土) 00:12:41.60
>>379,380
Brewの方が、Mac Portsに比べて、無関係のものを毎回入れないから楽。

382 :デフォルトの名無しさん:2013/10/19(土) 17:14:01.48
>>380
>>381
ありがとうございます。
HomeBrew でインストールしました。

悩んでイライラしていたのが嘘みたいにあっさりインストールできました。
ありがとうございました。

383 :デフォルトの名無しさん:2013/10/22(火) 19:47:20.58
Common Lispでmysql操作のサイト、書籍
などありますか?

384 :デフォルトの名無しさん:2013/10/22(火) 23:29:24.61
https://github.com/dss-project/dswm
clのwmだって

385 :デフォルトの名無しさん:2013/10/22(火) 23:43:20.30
http://blog.8arrow.org/entry/2013/10/22/135427
なんかDB操作のライブラリ作ってるようだ

DBまわりはRailsだなんだと使っていると、migreteとcrudとARぐらいは欲しいなとおもってしまう。

386 :デフォルトの名無しさん:2013/10/23(水) 06:20:25.03
>>384

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

> DSWM is a fork of StumpWM

じゃん。

ttp://dss-project.org/?DSS:DSWM:Screenshots

387 :372:2013/10/23(水) 14:56:19.56
>>384
WMをワードマスターと読んでしまって涙目
リンク先みるまでWindow Managerとは思わなかった。

clとかでGenericなエディタとかどうやって作るんだろうって思って昔のLispエミュとか見てるのだけど、そういうのにはむいてないよね。(Cursesとかの世話になるって意味ね)

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

その論調だとcursesがC言語で実装されてるから、C言語以外はエディタ作るのに向いていないってことになんじゃね?

389 :デフォルトの名無しさん:2013/10/23(水) 16:16:54.40
>>385
ありがとうございます。
他にないですか?

390 :デフォルトの名無しさん: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

391 :デフォルトの名無しさん:2013/10/23(水) 19:02:43.14
>>390
ありがとうございます。

392 :デフォルトの名無しさん:2013/10/25(金) 11:23:11.42
Common Lispでリズムマシンみたいなものをつくろうとしているのですが、
0.1ミリ秒ほどの分解能があるタイマーって存在するんでしょうか?

393 :デフォルトの名無しさん:2013/10/25(金) 12:40:12.91
OSとか処理系を書かないと答えられないんじゃないか?

それと余計なお世話なんだけど、”Common Lispでリズムマシン”を作ることに意味があるならいいけど、リズムマシンを作ってみたいだけならpuredataとかを検討したほうがいいんでないかい?

394 :デフォルトの名無しさん:2013/10/25(金) 15:20:17.28
>>393
すみません
書いてませんでした

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

最終的にMIDIシーケンサに発展させるつもりでおり、その習作という位置付けです
Common Lispを選んだのはシュミですが…

395 :デフォルトの名無しさん:2013/10/25(金) 17:24:45.69
一番ユーザが多いとであろうと思うcommon lispの処理系って何なの?
できれば根拠というかアンケートサイト何かを示してもらえば嬉しいが

396 :デフォルトの名無しさん:2013/10/25(金) 17:26:17.60
   m m
  ( ゚∀゚) カモン
  (  ∩ミ  シュッシュッ
   | ωつ,゙
   し ⌒J

397 :デフォルトの名無しさん:2013/10/25(金) 17:29:39.80
>>394
あなたがcommon lispでアプリケーションを書くことに価値を置いているのかD™等のプログラムを書くことに価値を見出しているのかに依って違うんだけど
余りこだわりをこだわりというか邪見を持たずやりたいようにやったほうがいいと思うけどな
わけわかんなくてスマソ

398 :デフォルトの名無しさん:2013/10/25(金) 17:31:49.26
そんなことを知ってどうするっていうんだい。

399 :デフォルトの名無しさん:2013/10/25(金) 17:33:08.64
気にするな
とりあえずチンチンしごけ


   m m
  ( ゚∀゚) イクゾ
  (  ∩ミ  シュッシュッ
   | ωつ,゙
   し ⌒J

400 :デフォルトの名無しさん:2013/10/25(金) 17:38:47.77
 >>398
スマヌOSとかによっても違うのに余り意味がないかも知れないな、
俺はSBCLがユーザが多いよな気がしてなんとなくSBCLを選んだのでなんとなく引け目があったんだ

401 :デフォルトの名無しさん: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
もある

402 :デフォルトの名無しさん:2013/10/26(土) 07:20:28.24
>>392
楽しそう。clojure の overtone みたいなの目指してがんがれ!

403 :デフォルトの名無しさん: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
参考になるかも

404 :デフォルトの名無しさん:2013/10/31(木) 10:48:15.74
メモリの取り方の図解のサイト、書籍などございますか?

405 :デフォルトの名無しさん:2013/10/31(木) 23:23:27.69
common lispで、参考になるようなきれいなソースコードとかありませんかね?

406 :デフォルトの名無しさん:2013/10/31(木) 23:30:38.32
最初はポール=グレアムのコードからじゃね?

407 :デフォルトの名無しさん:2013/11/01(金) 00:29:05.65
>>405
PAIP が教科書的に美しいよ。あとはlispのwebサーバ hunchentoot もかなり綺麗なコードだった。

408 :デフォルトの名無しさん:2013/11/01(金) 01:24:07.50
LandofLispの絵に惹かれて買ってからちょこちょこ読み進めてるけどCommonLispって使い道あるんだろうか...
半分終わったくらいから気になりだした

409 :デフォルトの名無しさん:2013/11/01(金) 01:58:10.42
pythonやruby使うのと同じように使えばいいんじゃないの?

410 :デフォルトの名無しさん:2013/11/01(金) 08:45:31.45
Common Lisp じゃなきゃいけないって事態はそんなにないと思うけど、
Common Lisp では駄目だって事態もそれほどない。

411 :デフォルトの名無しさん:2013/11/01(金) 19:01:32.53
同じコードを何度か書いたりして、他の言語の抽象化機能に疑問を感じた時?

412 :デフォルトの名無しさん:2013/11/01(金) 22:16:19.35
format使いたい時

413 :デフォルトの名無しさん:2013/11/01(金) 23:46:46.24
相変わらず暗いの
最も明るく行ったら
面白くないスレ減ると思います。

414 :デフォルトの名無しさん:2013/11/02(土) 16:05:00.79
LISPって一人で書いているときはまあ良いとして、共同開発で使うと混乱したり、収拾着かなくなったりしないのなんとなく。

415 :デフォルトの名無しさん:2013/11/02(土) 17:43:03.78
そこまで大人数のプロジェクトの経験者は少ないだろうしなあ。
コアの上に他の言語が乗ってるようなものだから、
gtkやobjC、Railsその他と変わらんと予想するが。
マクロも書くライブラリ層設計者と、非マクロのみのアプリ層設計者は分離した方が良いのかも?

416 :デフォルトの名無しさん:2013/11/02(土) 17:46:35.18
ライブラリ層というよりDSL層か。

417 :デフォルトの名無しさん:2013/11/02(土) 19:17:34.20
>>414
なる。
グレアムが言うには Viaweb 開発時には分担が完全に分かれてて、
自分の開発したところはユーザーサポートまで含めて自分でやる方式でまわしてたらしい。
新機能もバグ修正も常に行なわれながら発展する進化的モデルでの開発で、
仕様とコードを一体にして決断を下せる立場だったからこそ上手くいったと考えられてる。
ガチガチの仕様を多人数で厳密に満たしていくような開発スタイルじゃ混乱するだろうね。

418 :デフォルトの名無しさん:2013/11/02(土) 20:55:28.96
ガチガチの仕様ならコードもガチガチになるから混乱しないような。
ガチガチの仕様ではLispの柔軟性の価値がないだけで。

419 :デフォルトの名無しさん: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

420 :デフォルトの名無しさん:2013/11/02(土) 23:20:57.50
「Viawebは3人で書いた」
http://practical-scheme.net/trans/road-j.html

421 :デフォルトの名無しさん:2013/11/03(日) 01:54:23.57
まあでも飯は渡された仕様書を実装することで食べる人が圧倒的に多いわけで、LISPなんて役に立たないと思ってもしょうがないですな。

422 :デフォルトの名無しさん:2013/11/03(日) 02:30:04.81
ほとんどは既存のシステムの焼き直しだから、
ライブラリが多いものの方が有利だしなぁ。
結局、ユーザが多い言語の方が有利ってことになる。

423 :デフォルトの名無しさん:2013/11/03(日) 08:27:59.63
LISPで作った面白いものありますか?

424 :デフォルトの名無しさん:2013/11/03(日) 09:12:11.08
ecLISP

425 :デフォルトの名無しさん:2013/11/03(日) 09:12:21.13
>>421
アジャイルには向いているんじゃないの?

426 :デフォルトの名無しさん:2013/11/03(日) 16:27:56.71
ソシャゲがLispで書かれる時代が

427 :デフォルトの名無しさん: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になりそうなんだけど

428 :デフォルトの名無しさん: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!

429 :デフォルトの名無しさん: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使うはずなのに意味不明なコード書いてた
なんで動くんだろ

430 :デフォルトの名無しさん:2013/11/03(日) 23:52:35.40
>>428
手続型でaとbを変換するときに
t = a
a = b
b = t
のtをgensymに置き換えてるだけなんだな
多分解決したありがとう

431 :デフォルトの名無しさん: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さんのマクロ余計な事してないか?

432 :デフォルトの名無しさん:2013/11/04(月) 02:10:46.23
>>432
ごめん、合ってた。二重評価避けのgensymだ。

433 :デフォルトの名無しさん:2013/11/04(月) 02:48:34.58
>>433
全て自己レス
試したけど、やはりいらない気がする。

434 :デフォルトの名無しさん:2013/11/04(月) 15:58:57.63
433が永久ループに陥っている

435 :デフォルトの名無しさん:2013/11/04(月) 18:05:01.71
誰か末尾再帰してあげてー!

436 :デフォルトの名無しさん:2013/11/04(月) 18:19:33.43
tail call optimizationをするとスタック溢れがおこらないぶんより深刻な事態におちいるじゃない

437 :デフォルトの名無しさん:2013/11/05(火) 05:41:21.68
大丈夫、CLだからそのうち落ちる

438 :デフォルトの名無しさん:2013/11/08(金) 10:19:10.88
信号処理やらうと思うんだが
CLても簡単にできるもんなのかな

439 :デフォルトの名無しさん:2013/11/08(金) 21:40:53.08
言語としてやり難いということはないはず。
ライブラリがなくて自作かcffi書いたり、パフォーマンスのためにCみたいなコードに、はあるかも。

440 :デフォルトの名無しさん:2013/11/09(土) 18:03:22.84
信号処理できそうなのは分かったがgnuplot plplot以外にグラフ描画するライブラリないよな

441 :デフォルトの名無しさん:2013/11/09(土) 22:22:41.72
和田先生みたくPostScriptを直接書けば何の問題ない

442 :はちみつ餃子 ◆8X2XSCHEME :2013/11/09(土) 22:38:26.17
近頃なら SVG も有りじゃないの。

443 :デフォルトの名無しさん:2013/11/10(日) 00:05:53.28
>>440
Processingは使えないのかな?

444 :デフォルトの名無しさん:2013/11/10(日) 01:46:36.05
和田ってのはアホなんだな

445 :デフォルトの名無しさん:2013/11/10(日) 01:58:33.59
ライブラリがないのが問題になる程度の腕なら、マイナー言語全般あきらめて、メジャー言語でやるべき。

446 :デフォルトの名無しさん:2013/11/10(日) 08:41:39.02
ネイティブのライブラリをffi経由でラッパー作ったり。
ClojureみたいなVM言語だと、VM上のライブラリも少し楽に使える。

447 :デフォルトの名無しさん:2013/11/11(月) 23:52:07.15
ニュー速VIP爆撃中の2ch定期書き込みツールqsocks
lispで書かれたこのツールを誰か改造してください。
他板でも使えるようにしてください。
お願いします。m(ーー)m

qsocks
https://anonfiles.com/file/3fcd3edbf6000ecf37b61e8af186c453

qsocksソースコード
http://codepad.org/uyuG7Ovg

448 :デフォルトの名無しさん:2013/11/12(火) 00:16:23.62
改造ってどゆこと?
他の言語で動くようにしろって?

449 :デフォルトの名無しさん:2013/11/12(火) 00:22:54.14
他の板にも書けるようにして欲しいですけど、
まあ、好きなように遊んでください。
楽しいと思いますんで。

450 :デフォルトの名無しさん:2013/11/12(火) 08:09:37.31
この投稿その他lisp方言のスレにもあるな
どの方言かも知らない奴がそこら中に書き込んでるな

451 :デフォルトの名無しさん:2013/11/12(火) 09:19:43.16
興味ない話題はスルーしとけよ
結果的にそれが一番早く事態を収拾させる方法だよ。
一々食って掛かると某「自称本スレ」みたいになる。

もしかして、わざとそうやってここを荒れさせるのが狙いなら
もうこれ以上言うべきことは無いけど。

452 :デフォルトの名無しさん:2013/11/12(火) 14:16:33.61
そもそもソースも読めないのに
悪意を持った素性の知れない人間に作られた悪意のツールを使うなよ

453 :デフォルトの名無しさん:2013/11/12(火) 19:21:51.74
初心者の物ですがLinxにSynapticでclispをインストールしたのですが
どうしてもclipをインストールした場所が検索出来ません
何方かLinuxのファイル検索上手く出来る方法を教えて頂けませんか?

454 :デフォルトの名無しさん:2013/11/12(火) 19:28:14.62
$ whereis clisp

455 :デフォルトの名無しさん:2013/11/12(火) 19:30:36.74
↑ありがとうございました。

456 :デフォルトの名無しさん:2013/11/12(火) 19:50:17.95
>>454
しつこいようですが
処理系てコマンド扱いなんですか?

457 :デフォルトの名無しさん:2013/11/12(火) 19:57:33.64
lisp以前に必要な前提知識が足りない
素直にwindows使ってたほうがいいな

458 :デフォルトの名無しさん:2013/11/12(火) 20:14:22.10
>>457
前提知識のお勧めサイトなどありますか?

459 :デフォルトの名無しさん:2013/11/12(火) 20:33:21.56
http://www.google.co.jp/

460 :デフォルトの名無しさん:2013/11/12(火) 21:13:10.93
>>458
https://www.archlinux.org/
こいついっぱしに使えるようになったら余裕になれる

461 :デフォルトの名無しさん:2013/11/12(火) 22:39:11.13
>>453
454です。
初心者なら知らなくて当たり前です。これから学べばいいのです。
まず、知っておくことは「わからないことを調べる方法」を学ぶことです。
459の言うように、まずは人に聞く前にGoogleなどで検索する習慣をつけることです。
qiitaやstack overflowなども参考になります。

あなたの質問の内容を見ると、lispとlinuxを同時に学ぼうとしているように見えます。
457の言うように、どちらか一つに絞るのも一つの方法ですが、
個人的には、やる気があれば、なんとかなるのではないかと思います。

462 :デフォルトの名無しさん: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/

463 :デフォルトの名無しさん:2013/11/13(水) 01:47:11.72
>>461
>>462
本当にありがとうございます。

464 :デフォルトの名無しさん:2013/11/13(水) 01:47:53.48
>>461
>>462
本当にありがとうございます。

465 :デフォルトの名無しさん:2013/11/13(水) 01:59:38.37
>>463
どういたしまして
>>464
どうしたしまして

466 :デフォルトの名無しさん:2013/11/13(水) 06:45:39.61
lispとlinuxを同時に勉強か、最初はタイヘンだけど、いいんじゃないかな。
いろいろ言語用にOS側の環境作ったり調べたり質問したりすれば、すぐ両方使えるようになるよ。

467 :デフォルトの名無しさん:2013/11/13(水) 08:38:55.68
>>454
find grepで検索出来なかったのですが
どうしてwhereisなんですか?

468 :デフォルトの名無しさん:2013/11/13(水) 09:02:13.53
スレ違い

469 :デフォルトの名無しさん:2013/11/13(水) 09:28:02.02
>>467
くだらねえ質問はここに書き込め! Part 208
http://engawa.2ch.net/test/read.cgi/linux/1383465939/

470 :デフォルトの名無しさん:2013/11/13(水) 11:16:32.04
>>467
find grep whereis でググると次のページがすぐに見つかりました。

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

人に聞く前に、まずは自分で調べるべし。

471 :デフォルトの名無しさん:2013/11/13(水) 13:23:46.13
>>470
ありがとうございます。

472 :デフォルトの名無しさん:2013/11/16(土) 19:55:00.08
>>458
これとかどう?
http://www.lpi.or.jp/linuxtext/text.shtml

473 :デフォルトの名無しさん:2013/11/23(土) 21:29:56.10
schemeはr7rsとか出てるので更新されてるのがわかるんですけど
common lisp の方は1994年の標準化以降更新はないんですかね

474 :デフォルトの名無しさん:2013/11/26(火) 00:35:00.59
ランド・オブ・リスプ読もうと思うんだけど、
Lisp CabinetっていうのでCLISPにチェック入れれば全部動くのかな?

475 :デフォルトの名無しさん:2013/11/26(火) 17:44:55.18
randomの実装ってどうなってるかわからんかな
線形合同法だとは思うんだけど、具体的に

476 :デフォルトの名無しさん:2013/11/26(火) 19:07:45.37
HyperspecとCLTLチラ見したけど、規格に無さげだし、処理系毎に調べるしか無いんでね?

477 :デフォルトの名無しさん:2013/11/26(火) 19:31:33.37
mjk
lispworks、一応簡単な実験で乱数の範囲は0〜8388607のようなんだがなあ、周期がわからぬ
とりあえずthx

478 :デフォルトの名無しさん:2013/11/26(火) 21:15:46.51
lispworksならドキュメントにあったんだが。
ttp://www.lispworks.com/documentation/lw50/LWRM/html/lwref-326.htm

479 :デフォルトの名無しさん:2013/11/26(火) 21:24:01.69
mt-

480 :デフォルトの名無しさん: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...を引数の数に合わせて生成しバインドするいい方法はないでしょうか?

481 :デフォルトの名無しさん:2013/11/27(水) 18:04:08.33
何がやりたいのかはっきりしないけど
こんなマクロが欲しいの?

(my-lambda (* _1 _4))
->
(lambda (_1 _2 _3 _4) (* _1 _4))

482 :デフォルトの名無しさん: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)))

483 :デフォルトの名無しさん:2013/11/27(水) 18:26:31.27
>>481
普通の(lambda args body)に対し(my-lambda body)だけの記述で
引数に_1 _2 _3が裏で束縛されてbody内で使えるというものです。

484 :デフォルトの名無しさん:2013/11/27(水) 18:50:00.91
>>482
bodyをflattenしてsymbolを走査し、ラムダ式の引数の数を決めるという
アプローチですか。考えつきませんでした!
レスありがとうございます。

485 :デフォルトの名無しさん: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

486 :デフォルトの名無しさん:2013/11/28(木) 00:52:21.31
LOLに似たようなリードマクロがあったな
あっちは引数の数指定してたけど

487 :デフォルトの名無しさん:2013/11/28(木) 22:36:41.41
配列でarray-total-size-limit以上のデータを扱うとしたら、普通はどうするんでしょうか?

488 :デフォルトの名無しさん:2013/11/29(金) 23:14:16.94
あんまりないケースみたいですね。
仕方ないので、配列の配列をバッファとして持つクラスを作って、アクセサに
工夫をして凌ぐことにしました。

489 :デフォルトの名無しさん:2013/11/30(土) 07:43:28.02
>>488
array-total-size-limitって一千万を超える値だけど、そんなデカイ配列何に使うのか興味津々

490 :デフォルトの名無しさん:2013/11/30(土) 12:06:01.99
>>489
時系列の実験データを入れるのに使おうかと。使っている処理系が諸事情でclozure clなんですが、
limitが他に比べて小さいですね。
以前はpython使っていたんですが、pythonは自前のループで書いた処理が遅いので、好みのclでやりたくて、移行中です。
pythonはいい言語ですが、強制インデントがどうも性にあわない...

491 :デフォルトの名無しさん:2013/11/30(土) 17:07:10.72
強制インデントかー。最近の言語は何々が出来ないが売りが増えて何だかなーがあるな。
表現が制限されるという事は、うまく抽象化できない概念が増えるという事だと思うのだけど。
手続き概念を書きたいのに、素直に書けないとか。
いかなる表現も自由で、抽象化方法も簡単に実装できるLisp系が、もっとも表現力のある言語。

492 :デフォルトの名無しさん: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

これで足りないなんてどんだけデカイ配列なの?

493 :デフォルトの名無しさん:2013/11/30(土) 21:23:49.54
計測器から垂れ流されるデータを解析しようとするとそんくらい普通に行くよ。
こういうのはオンメモリで処理するのをあきらめた方が良い。

494 :デフォルトの名無しさん:2013/11/30(土) 22:06:06.09
おれなら sqlite に突っ込むかな

495 :デフォルトの名無しさん:2013/12/05(木) 00:20:45.60
どうして
``(,`(,x ,x) ,`(,x ,x))を評価すると
`((,X ,X) (,X ,X))になるんですか?

496 :デフォルトの名無しさん:2013/12/05(木) 21:28:07.42
なりません

497 :495:2013/12/05(木) 22:50:52.92
なりませんか?こちらではsbcl、clispで同様になりました。

(setq x '(+ 8 8))
`(`(,,x)) ;=> (`(,(+ 8 8))) ; xは評価されたあともう一度評価される
`(`(,',x));=> ('((+ 8 8))) ; xは一度だけ評価される (言い換え, クオートされた後もう一度評価される)
`(`(,`,x));=> (`(,x)) ; xは次の評価時に評価される なぜこう変換される?

二重バッククオートでは``,,や``,,@や``,',などが頻出ですが、``,`,がどう動いているのか分かりません。

498 :デフォルトの名無しさん:2013/12/05(木) 23:20:03.37
準クォートはバッククォートの引数だけ評価するから
,`(,x ,x) は (,x ,x) になって
一番手前の準クォートは評価されてその引数を返す形になるから消えて
`((,x ,x) (,x ,x))
になるんじゃない?

処理系作ってみるのが一番理解できると思うけど

499 :デフォルトの名無しさん: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))

500 :デフォルトの名無しさん: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 の例も正しい。

501 :デフォルトの名無しさん:2013/12/06(金) 01:08:56.89
ほー

502 :デフォルトの名無しさん:2013/12/06(金) 14:27:37.21
>準クォートはバッククォートの引数だけ評価するから
>,`(,x ,x) は (,x ,x) になって

その理屈だと
,'(,x ,x) も (,x ,x) になるから違うよ

503 :デフォルトの名無しさん: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.
混乱してきたので、誰か訳して><

504 :デフォルトの名無しさん:2013/12/06(金) 14:50:03.38
もしバッククオートシンタックスがネストしていた場合、
最も内側のバッククオートが最初に展開されなければならない。
これは以下のことを意味する。
複数のカンマが文の中に現れた場合、
最も左のカンマは最も内側のバッククオートに属する。

505 :503:2013/12/06(金) 17:26:52.36
>>504
トンクス。r5rsの「準引用形式は入れ子にしてもよい。置換は,最外のバッククォートと同じ入れ子レベルで
現れる被 unquote 要素に対してだけ行われる」
最外と最も内側だから、schemeとCommon Lispで動作がちがうん?

506 :デフォルトの名無しさん:2013/12/06(金) 17:29:42.21
the leftmost one belongs to the innermost backquote.ってどういう意味だ?

507 :495:2013/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度目評価される

508 :495:2013/12/06(金) 18:20:48.66
*レスありがとうございました。

509 :デフォルトの名無しさん:2013/12/06(金) 20:31:16.88
lisp勉強し始めたんだけどdisassembleできるんだねこれ(驚嘆)

510 :デフォルトの名無しさん:2013/12/06(金) 21:26:47.55
ディスアセンブラが規格に入ってる唯一の言語 Common Lisp

511 :デフォルトの名無しさん:2013/12/06(金) 21:40:00.42
common lispの闇は深い

512 :デフォルトの名無しさん:2013/12/06(金) 23:20:44.61
>>506
```,,,0 みたいのがあったとき、右端の`と左端の,がペアになるよ、という意味だと思う。

>>505
r5rs の場合 ```,,,0 == ``,,0
CL の場合 ```,,,0 == 0
というわけで違う。

513 :503:2013/12/07(土) 07:23:03.95
>>512
ありがと。今迄どちらも同じだと思いこんでた。

514 :デフォルトの名無しさん:2013/12/07(土) 12:44:23.23
なに、CLとschemeってバッククオートの挙動違ったのか!

515 :デフォルトの名無しさん:2013/12/07(土) 21:44:31.74
初歩的でスマンのだけど、floatのビット表現ってどうやって出すんだろ
formatで出来るかなと思ったんだがggってもよくわからんかった

516 :デフォルトの名無しさん:2013/12/07(土) 23:54:57.88
>>515
これかな。

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

「"Common Lisp" float bit」でググって発見。

517 :デフォルトの名無しさん:2013/12/08(日) 16:58:21.34
>>516
ありがとうありがとう・・・!single-floatもちょっと調べてできた
ggり方が悪かったようだ、反省

518 :デフォルトの名無しさん:2013/12/08(日) 23:45:31.37
clisp
acl
ecl
ccl
cmucl
sbcl
maximaで使いたいけどれが最速ですか?

519 :デフォルトの名無しさん:2013/12/09(月) 04:42:12.69
maximaはよくわからないが
とりあえずacl cmucl sbcl が早い
aclは高いから論外だな

520 :デフォルトの名無しさん:2013/12/09(月) 05:05:19.45
ありがとうございます。
aclは無料版です。
Macのダウンロードしたら派手なGUIでビックリ

521 :デフォルトの名無しさん: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))

522 :デフォルトの名無しさん: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))
となるはず)

523 :デフォルトの名無しさん: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))
だね

524 :デフォルトの名無しさん:2013/12/16(月) 01:14:15.99
>>523
検証ありがとうございます。ideone(clisp)でもそうなりました。
またdotimesのpara1を3に変えると、なぜか正解になるので、やっぱりバグみたいですね。

525 :デフォルトの名無しさん:2013/12/16(月) 23:48:39.98
arm linux clozure cl ver 1.9が出ていたので、インストールして確認したら、
ちゃんと修正されていました。

526 :デフォルトの名無しさん:2013/12/20(金) 21:31:16.63
(c == '-')ってすごく顔文字みたい

527 :デフォルトの名無しさん:2013/12/20(金) 21:35:22.36
かわいい

528 :デフォルトの名無しさん:2013/12/20(金) 21:53:59.66
誤爆しました

529 :デフォルトの名無しさん:2013/12/21(土) 10:13:46.31
和んだ

530 :デフォルトの名無しさん:2013/12/21(土) 18:25:01.78
`(,`(,`(,"-"))) 僕イモムシ

((("-"))) ワワッ評価されちゃった

531 :デフォルトの名無しさん:2013/12/21(土) 20:29:24.35
リストの区切りが空白文字なのは地味に嬉しい

532 :デフォルトの名無しさん:2013/12/25(水) 04:26:58.07
最近気が付いたんだがLispがあればCSVとかいらなくなるんだな
始めに(defun つけてうまくかっこつけてスペースでデータ分けれるし
これがデータとしてのコードとか言われる由縁なのか

533 :デフォルトの名無しさん:2013/12/26(木) 21:32:26.90
はぁ?

534 :デフォルトの名無しさん:2013/12/26(木) 22:15:20.06
ひぃっ!

535 :デフォルトの名無しさん:2013/12/26(木) 22:16:08.90
ふぅ…

536 :デフォルトの名無しさん:2013/12/26(木) 22:28:47.47
へぇー

537 :デフォルトの名無しさん:2013/12/26(木) 22:46:00.55
ほ、ほーっ、ホアアーッ !! ホアーッ !!

538 :デフォルトの名無しさん: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)

539 :はちみつ餃子 ◆8X2XSCHEME :2013/12/27(金) 20:20:38.65
>>538
与えた配列は結果を構築するために再利用されうるという意味で破壊的なのであって、あくまで返り値が delete の結果。
Side Effects の項に書いてあるのはそういう意味。

540 :デフォルトの名無しさん:2013/12/27(金) 20:24:14.87
まあ、nconcとnsubstitute以外は副作用を期待して使うなって話もあるしね

541 :デフォルトの名無しさん:2013/12/27(金) 21:37:08.52
なるほどねーthx

542 :デフォルトの名無しさん: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

543 :デフォルトの名無しさん: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)))))

544 :デフォルトの名無しさん:2014/01/01(水) 00:59:21.51
(setf (fdefinition 'myfun) (let (lambda (.....
じゃだめですかね?

545 :デフォルトの名無しさん:2014/01/01(水) 01:00:22.05
まちがえた

546 :デフォルトの名無しさん:2014/01/01(水) 01:04:13.61
lispビギナーより迎春
ttp://ideone.com/WsMzJM

547 :デフォルトの名無しさん:2014/01/01(水) 03:07:30.19
・setq のような special form ってユーザー定義可能なんでしょうか?
special formと呼ばれるものは仕様で決まっていてユーザー定義できないが、使う側から見ればspecial formとマクロとは変わらないのでマクロを定義すれば望むことはできるはず

548 :デフォルトの名無しさん:2014/01/01(水) 03:14:08.32
テキストデータを高速にパースして読み込むライブラリって何か定番あるんですかね
適当にread-lineとか使って自分で書くと数十MBくらいのファイルでもう速度が気になりだしてしまう

549 :542:2014/01/01(水) 10:33:34.61
みなさん、ありがとうございます。
マクロの使い方も分かってきました。
(defmacro mysetq (x val) `(set 'x ,val))

550 :542:2014/01/01(水) 13:27:09.69
訂正、
(defmacro mysetq (x val) `(set ,x ,val))
でした。

551 :542:2014/01/01(水) 13:31:17.92

これも間違ってましたね・・・
さすがに setq, setf, quote どれも使わずに手製 setq の実現は無理なんでしょうか
(defmacro mysetq (x val) (setq ,x ,val))

552 :デフォルトの名無しさん:2014/01/01(水) 15:13:28.12
>>551
(defmacro mysetq (x val) `(set ',x ,val))
setqというのはset + quoteらしい。

553 :デフォルトの名無しさん:2014/01/02(木) 18:56:45.45
closのインスタンスのプロパティーを表示させたいんだけどいい方法ない?
例えば、クラスfooのインスタンスがa=1,b=2のプロパティーを持っていたとすると。
#<foo (a=1, b=2)>
みたいに表示される関数が欲しいんだけど。

554 :デフォルトの名無しさん:2014/01/02(木) 18:58:35.64
書き込んだ瞬間に思い出したinspectでいいね。
スレ汚しすまん。

555 :デフォルトの名無しさん:2014/01/03(金) 13:48:08.21
>>552
ああ、defmacro テンプレートでの「,」(評価する)は対応するパラメータ記述そのままに置き換えられるんですね。
最初混乱しましたが、やっと分かってきました。

556 :デフォルトの名無しさん:2014/01/04(土) 15:23:56.51
パッケージの使い方ややこしすぎて混乱する
何か良い説明してる所はないのかな

557 :デフォルトの名無しさん:2014/01/04(土) 20:12:58.18
解決しました

558 :デフォルトの名無しさん: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)]
こんな感じのことは出来ませんか?

559 :デフォルトの名無しさん: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))

560 :デフォルトの名無しさん:2014/01/06(月) 22:33:06.29
やっぱりloopを二重にしないと出来ないんですね
納得しました

561 :デフォルトの名無しさん: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))

562 :デフォルトの名無しさん:2014/01/09(木) 18:00:51.58
次は3重以上も対応するようにしてみよう

563 :デフォルトの名無しさん: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)))

564 :デフォルトの名無しさん:2014/01/10(金) 00:23:52.34
Common Lisp で ssh 用のライブラリはありますか?
ネット上を探してみたのですが見付かりませんでした。。。

565 :デフォルトの名無しさん:2014/01/11(土) 18:36:57.00
"hoge"を:hogeにする方法ってありますか?

566 :デフォルトの名無しさん:2014/01/11(土) 19:36:18.76
(intern (format nil ":~a" "hoge"))
こーゆーこと?

567 :デフォルトの名無しさん:2014/01/11(土) 19:41:57.68
それだと|:hoge|になるので違います

568 :デフォルトの名無しさん:2014/01/11(土) 20:41:40.60
(intern "HOGE" :keyword)
;=> :HOGE

:hoge は keyword:hoge の略記。

569 :デフォルトの名無しさん:2014/01/11(土) 20:47:37.44
おお!
勉強になりましたありがとうございます

570 :デフォルトの名無しさん:2014/01/11(土) 21:13:58.46
>>568
素晴らしい

571 :デフォルトの名無しさん: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ハカー諸兄による評価お願い

572 :デフォルトの名無しさん:2014/01/13(月) 15:16:58.66
凄そうに書いてはあるけど、凄いうちに入るのかなぁ?

573 :デフォルトの名無しさん:2014/01/13(月) 16:19:36.03
ジャストシステムの時点でショボイが
その海外事務所のサブはかなりショボイ感

574 :デフォルトの名無しさん:2014/01/14(火) 00:13:40.43
ファールマン教授、そんなショボイとこの所長やってたの?

575 :デフォルトの名無しさん:2014/01/14(火) 00:41:55.93
お前らの所属と経歴はどうなんだよw

576 :デフォルトの名無しさん:2014/01/14(火) 09:37:10.21
省略名がMITな日本の大学の僕からみればCMUに行けるだけでもすごいなぁ

577 :デフォルトの名無しさん:2014/01/14(火) 13:38:27.14
苫米地すごいな

578 :デフォルトの名無しさん:2014/01/14(火) 14:21:05.51
室蘭?

579 :デフォルトの名無しさん:2014/01/14(火) 18:43:04.48
なんで経歴そんなにすごいのにインチキおやじになっちゃったんだ?

580 :デフォルトの名無しさん:2014/01/14(火) 18:55:11.89
鳩山とか見てたらだいたい理解できる

581 :デフォルトの名無しさん:2014/01/14(火) 22:52:58.99
>>580
すげー納得した

582 :デフォルトの名無しさん:2014/01/14(火) 23:31:28.02
苫米地ってkeyholetvも作ったんだよな。
アナログテレビ時代にアナログテレビが全部ネットで見れたソフト。
裁判になったら放送法の問題点があらわになるから訴えられるのを
待っていると言っていたが結局訴えられないままアナログ放送終わった。

583 :デフォルトの名無しさん:2014/01/15(水) 08:01:21.37
アスミンおめでとう

584 :デフォルトの名無しさん:2014/01/15(水) 08:38:11.01
なんでや!Lispとは関係な……くもないのか

585 :デフォルトの名無しさん:2014/01/15(水) 09:22:10.06
イメージキャラクターをLispエイリアンにしなかったのが敗因

586 :デフォルトの名無しさん:2014/01/16(木) 01:25:38.35
声優と結婚って楽しいのかなぁ?

587 :デフォルトの名無しさん:2014/01/16(木) 09:47:17.67
やっぱりエッチの時の声がな

ちびまる子ちゃんはやめてけれ

588 :デフォルトの名無しさん:2014/01/17(金) 08:20:56.32
コバペロ「ンーwwwwwwwwwwwwwwwwwwwwwwww」

589 :デフォルトの名無しさん: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 "")
では行頭からタブ文字を探せていないようなのです
どこを修正すればよいですか

590 :デフォルトの名無しさん:2014/01/18(土) 09:38:26.50
正規表現"(?m)^\\s+"はどうでしょう。

通常^は対象文字列の先頭のみにマッチします。
そこで、(?m)によって^が対象文字列中の改行後にもマッチするようにします。
\\sは(スペース、タブなどの)空白文字一般にマッチします。

591 :デフォルトの名無しさん:2014/01/18(土) 13:55:02.64
>>589
(regex-replace-all (create-scanner "^\\t" :multi-line-mode t) string "")

592 :589:2014/01/19(日) 01:09:03.37
>>590-591
ありがとうございます
複数行にわたる処理のオプションを適切に指定しなければならなかったのですね
\sについてもありがとうございました

593 :デフォルトの名無しさん:2014/01/19(日) 15:54:28.21
Lispエイリアンがすごく愛らしく思えてきた。疲れてるのかな

594 :デフォルトの名無しさん:2014/01/19(日) 17:41:08.96
>>593
スカリーさんが居ないのがLisp界隈の不幸なのかもしらん

595 :デフォルトの名無しさん:2014/01/22(水) 19:25:06.40
lispacheって何がすごいの?
http://www.crl.co.jp/crlodev/product/SUN_Lispache.pdf
これの特徴みると突っ込みどころばっかりだけど

596 :デフォルトの名無しさん:2014/01/23(木) 00:15:59.45
>>595
とりあえず突っ込みどころをつっこんでくれ

597 :デフォルトの名無しさん:2014/01/26(日) 00:52:35.16
仕事でcommon lisp使ってる人ってその前に何の本読んでから使ってるんでしょう
実践/実用 Common Lisp のどちらか読んでるのか、あるいはSICPとかから入っていろいろと読んでいるのか
どれくらい読んでると最低限仕事に使えてるものなのかが知りたいです

598 :デフォルトの名無しさん:2014/01/26(日) 01:26:07.91
処理系のマニュアルも結構読むのでしょうか

599 :デフォルトの名無しさん:2014/01/26(日) 11:46:27.34
>>597
CLTL2
処理系のソース
各種ライブラリのソース

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

>>598
> 処理系のマニュアルも結構読むのでしょうか
ふつう読むだろ?
gcc とかだって, 処理系マニュアル読まないと使えないんじゃないの?

600 :デフォルトの名無しさん:2014/01/26(日) 15:35:46.00
"~/hoge/huga.lisp"を"/home/user/hoge.lisp"にする関数を教えて下さい。
elispではexpand-file-nameで出来たのですが。

601 :デフォルトの名無しさん: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]

となってしまいます。

602 :デフォルトの名無しさん:2014/01/26(日) 16:49:42.93
ttp://cl-www.msi.co.jp/solutions/knowledge/lisp-world/tutorial/cl-file-system.pdf

603 :デフォルトの名無しさん: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") ; どちらでも動く

604 :デフォルトの名無しさん: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*)

605 :デフォルトの名無しさん:2014/01/26(日) 18:58:47.79
あと、>>603のコードが「どちらでも動く」というのは、たまたまその処理系が
Windowsでも "/" をディレクトリ区切り文字として解釈する実装になっている
からではないかと。厳密には可搬性は無いと思う。

606 :デフォルトの名無しさん:2014/01/26(日) 20:54:37.61
>>602
hogeキチガイは早く消えろ。
ふむふむじゃねーよクズが。

607 :デフォルトの名無しさん:2014/01/26(日) 22:01:26.53
>>599
>CLTL2
>処理系のソース
>各種ライブラリのソース
> CLHS
なるほど、規格とか処理系自体に関することの方なんですね。

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

どの程度の人数・期間の、(差し支えなければ)どういった種類のプロジェクトで使ったのかも興味があるので教えてもらえると嬉しいです

608 :デフォルトの名無しさん:2014/01/26(日) 22:25:03.12
>>607
業務で CL 使うなんてのは,

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

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

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

もしくは, 一人で思いっきり趣味に走れるプロジェクトとか

609 :デフォルトの名無しさん:2014/01/26(日) 22:29:32.33
lispは神秘のベールに包まれてるけど魔法じゃないからね

610 :デフォルトの名無しさん:2014/01/26(日) 22:34:19.41
>>607
追加

> 読むというのは必要になった時都度該当箇所を読む感じなのでしょうか
とりあえず, 目は通します.
少なくとも, 性能ネックになった場合,何とかなるかならないかを判断できる程度には

611 :デフォルトの名無しさん:2014/01/26(日) 23:37:53.95
>>607
はるか大昔、ある特殊なプログラミング言語環境(今で言うDSL)を Lisp で作ったり、
ウェブサーバ(HTTPサーバ)の開発プロジェクトに関わった事があるなぁ(どちらも
民間企業の業務)。Lisp じゃないけど Scheme(STk) で弁当屋の売上管理システム
作ってた人がいたっけ。雑誌名は忘れたけど紹介記事が載ってたな。何で Scheme
で!?って思ったけどw

>>608
だよね〜

612 :デフォルトの名無しさん:2014/01/28(火) 01:15:12.96
>>608
>>611
なるほど、やはりそういうピーキーな使い方になるんですね。
質問を重ねて申し訳ないのですが、業務で使うという場合だと他の言語と比べるとどのへんが使いにくい点になるんでしょう? ライブラリとかノウハウの充実度なのでしょうか。それとも納品の都合なども絡んで来るのでしょうか。

613 :デフォルトの名無しさん:2014/01/28(火) 11:53:32.44
>>612
> 業務で使うという場合だと他の言語と比べるとどのへんが使いにくい点
メンテナーの確保

614 :デフォルトの名無しさん:2014/01/28(火) 11:56:30.75
ライブラリについては良く聞く話だな
ライブラリに依存しない部分的な処理だけLispで書いてもいいのかもしれんが

615 :デフォルトの名無しさん:2014/01/28(火) 18:43:19.25
fooからbar,barからfooパッケージを使いたいときに
http://codepad.org/kQeZJjBl
こういう書き方をするとループしてしまうみたいです
fooからbar,barからfooを使うもっと良い書き方はありますか
それとも設計が悪いですか

616 :デフォルトの名無しさん:2014/01/30(木) 00:09:44.42
規格を調べる気にもならない。設計をやり直した方がいい。

617 :デフォルトの名無しさん:2014/01/30(木) 01:06:12.60
やっぱりそうですね
すっきりしました

618 :デフォルトの名無しさん:2014/01/30(木) 01:40:58.01
なるほどメンテナー…。
参考になりました。お答えいただいた方々ありがとうございました。

619 :デフォルトの名無しさん:2014/01/30(木) 19:51:55.38
Common Lisp初めてみたいんだけどSBCLッテイウノデイイノ

620 :デフォルトの名無しさん:2014/01/30(木) 22:36:59.95
いいんじゃない
なんならSBCLとclisp両方入れてみたら?

621 :デフォルトの名無しさん:2014/01/31(金) 02:35:49.67
rubyのobject.methodsみたいにCLOSオブジェクトに適用可能なメソッドを調べ上げる方法はないんでしょうか。

622 :デフォルトの名無しさん:2014/01/31(金) 13:21:29.91
>>621
MOP の SPECIALIZER-DIRECT-METHODS とか SPECIALIZER-DIRECT-GENERIC-FUNCTIONS
とかじゃダメ?
CLOS が PCL ベースのやつだとサポートしてそうだが…

623 :デフォルトの名無しさん: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}>)

624 :デフォルトの名無しさん:2014/02/01(土) 02:03:45.34
>>623
頭も悪い、やる気もないならプログラミングなんかやめれば?
お前みたいな奴が書き込むだけでスレのレベルが下がるんだよ

625 :デフォルトの名無しさん:2014/02/01(土) 02:15:34.57
最近、スルー検定が増えたな

626 :デフォルトの名無しさん:2014/02/01(土) 03:46:57.98
>>623
感謝とかいらないからhoge厨は二度とくるな。

627 :デフォルトの名無しさん:2014/02/01(土) 04:26:15.64
オブジェクトのスーパークラスやサブクラスを取得するのにもmoptilitiesが必要なんだよな。
流石にそういうのは標準で入れておいてほしい。

628 :デフォルトの名無しさん:2014/02/01(土) 08:19:09.67
>>624
質問です、よろしくお願いします

カラス、下痢と言わずに
カー、クダーというのはおかしいと思います
どしてそんな非国民言葉がリスプでは使われているんですか?

629 :デフォルトの名無しさん:2014/02/01(土) 08:24:51.64
>>627
(use-package :sb-mop) とか (use-package :mop) とかするだけちゃうん?

630 :デフォルトの名無しさん:2014/02/01(土) 10:17:42.67
>>628
ポッポと管だと国家が滅ぶからだろ

631 :デフォルトの名無しさん:2014/02/01(土) 12:36:45.78
first, restの方がすぐ意味が分かっていいよな

632 :デフォルトの名無しさん:2014/02/01(土) 12:41:27.12
概念として異なる
俺はcar/cdrがいい

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

restだあ?
浮気者!

633 :デフォルトの名無しさん:2014/02/01(土) 13:49:07.76
>>632
そのレジスタが残ってるCPUがまだ現役だったらかなり怖い

634 :デフォルトの名無しさん:2014/02/01(土) 16:15:21.51
firstとrestは5字と4字なので並べるとズレて気持ち悪い

635 :デフォルトの名無しさん:2014/02/01(土) 18:37:39.24
LP64な環境だとレジスタが64ビットでintが32ビットだからレジスタに2ワード入るのでちょっとそれっぽい

636 :デフォルトの名無しさん:2014/02/02(日) 13:45:14.44
>>635
ポインター 2 個入らんやん

637 :デフォルトの名無しさん:2014/02/02(日) 13:50:51.60
>>636
ヒープを一回しか取得しないなら32ビットオフセット2つで管理すればよくね?
そんなのやだけど

638 :デフォルトの名無しさん:2014/02/02(日) 13:54:00.20
32ビットモードでも64ビットレジスタを使うことは出来るのです!
インストラクションにサイズプレフィックスが付くのでちょっと非効率かもしれないけど。

639 :デフォルトの名無しさん:2014/02/02(日) 14:10:34.88
>>638
それLP64いわなくね?

640 :デフォルトの名無しさん:2014/02/02(日) 14:13:36.01
IP32L64ェ

641 :デフォルトの名無しさん:2014/02/02(日) 19:32:47.59
>>638
SPARC とか Power とか ARM あたりだと無理だよね

642 :デフォルトの名無しさん:2014/02/02(日) 23:38:40.45
>>638
x86 の話?
REX prefix って 32bit モードだと別の命令にマップされてない?
x32 と勘違いしてない?

643 :デフォルトの名無しさん:2014/02/08(土) 22:16:26.56
64ビット符号無し整数って使えないの?
リバーシをビットボードで扱ってみたいんだけど

644 :デフォルトの名無しさん:2014/02/08(土) 22:34:16.51
SBCLかCMUCLのどっちが数値計算ライブラリが多いの

645 :デフォルトの名無しさん:2014/02/11(火) 00:30:15.65
ライブラリが規格に沿って書かれていればどちらでも動くと思うが・・・
線形代数ライブラリならf2clのlapackを使えばいいのかな

646 :デフォルトの名無しさん: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に入るようにしたいです。

647 :デフォルトの名無しさん:2014/02/11(火) 02:36:43.03
>>646
こういうこと書くと吝嗇・非友好的と取られるかも知らんけど、まずは下記のスレで聞いてきて

【GNU】Emacs Lisp 【Elisp】
http://toro.2ch.net/test/read.cgi/tech/1382223056/

648 :デフォルトの名無しさん:2014/02/11(火) 12:44:52.22
>>647
あ、はい
了解しました。

649 :デフォルトの名無しさん:2014/02/11(火) 22:39:49.69
lisp無職はlispで金稼ごうとは考えないの?

650 :デフォルトの名無しさん:2014/02/11(火) 22:55:30.84
最近は Clojure を使う仕事がほんの少しはあるからそっちかな

651 :デフォルトの名無しさん:2014/02/12(水) 06:50:46.48
女が稼いでくれるから

652 :デフォルトの名無しさん:2014/02/12(水) 10:53:32.93
Lispエイリアンってパブリックドメイン立ったのか

653 :デフォルトの名無しさん:2014/02/12(水) 10:54:06.38
×立った
○だった

654 :デフォルトの名無しさん:2014/02/12(水) 14:10:02.22
あんなもんに版権設定してどうするw

655 :デフォルトの名無しさん:2014/02/12(水) 14:16:52.52
Lispを学べば東大女とやれる
俺はそう聞いたから今年からLispをはじめた
チンチンいじりながらコンスセル
今日悟った。リストなんて実は無いんだ!
それはたかだか一つのセルの表現形式でしかないんだと。
そして思ったね。
東大女はこんなおれにクラっときて足を開くんだと。
頑張るぜ

656 :デフォルトの名無しさん:2014/02/12(水) 15:39:39.82
東大女となんてやりたいか?

657 :デフォルトの名無しさん:2014/02/12(水) 18:51:15.34
学歴高い女とやるのは征服感があってなかなかよろしい

658 :デフォルトの名無しさん:2014/02/12(水) 19:14:41.64
>>654
漫画家の描いたキャラなのにわざわざパブリックドメインだと明記するのは珍しくね?

確かに版権気にするようなものじゃないけど

659 :デフォルトの名無しさん:2014/02/16(日) 22:50:50.89
(ql:quickload :cl-ppcre)
(ppcre:scan "[^+-<>]" "abc") ;=> 0
(ppcre:scan "[^+-<>]" "...") ;=> NIL

SBCLですが二番目がNILになってしまいます。
0が帰ってきて欲しいのですが、皆さんの環境ではうまく動きますか?

660 :デフォルトの名無しさん:2014/02/16(日) 22:52:10.38
[^-+<>]

661 :659:2014/02/16(日) 23:02:30.83
>>660
エスケープはバックスラッシュが2個いるのですね。
ありがとうございました。

662 :デフォルトの名無しさん:2014/02/17(月) 12:44:39.53
LISPっぽいの作っているけどGC用の情報ってセルの構造体に含ませればいいかな
初めて作るもんでよくわからんのだが

663 :デフォルトの名無しさん:2014/02/17(月) 14:52:16.93
ガベージとかガーベージとかで探せば色々ある
http://seesaawiki.jp/w/author_nari/

664 :デフォルトの名無しさん:2014/02/17(月) 16:02:07.64
>>663
いやアルゴリズムはわかるんだわ。
マークアンドスイープってやつにしようと思うんだけど、
そのマークをどこにするかってことなんだ。

665 :デフォルトの名無しさん:2014/02/17(月) 17:25:51.59
セルの構造体に含ませる方法でいいよ

666 :デフォルトの名無しさん:2014/02/17(月) 23:29:35.04
初めて作るんなら >>665 でいいと思う。
もっと手抜きして Boehm GC もいいと思う。

667 :デフォルトの名無しさん:2014/02/17(月) 23:59:51.00
>>666
たとえば他にはどんなアプローチがありますか

668 :666:2014/02/18(火) 01:10:51.06
ビットマップを別に用意して、そこにマークビットを置く方法がある。
キャッシュメモリとか OS の copy on write とかとの相性で、
そっちの方が高速に動作する。
もちろん上手く実装すれば、だけど。

669 :デフォルトの名無しさん:2014/02/18(火) 10:46:22.88
まー、そういったのは高速化手法であって、最初にとにかく作ってみようと
いう人があまり意識してもしょうがない。

あと、Lispとかの実装技法としては、オブジェクトじゃなくポインタの側に情報を
持たせる方法もあるけど、アーキテクチャに依存してトリッキーになるから、
オブジェクトの側に持たせればいい。

670 :デフォルトの名無しさん:2014/02/18(火) 13:31:23.51
>>668
>>669

Thx!おkわかった実践してみゆお

671 :デフォルトの名無しさん:2014/02/19(水) 02:33:55.28
オブジェクトに持たせると、forkしたあとgcするとぐんにょりするのだ…。

672 :デフォルトの名無しさん:2014/02/19(水) 15:56:40.97
再帰は楽しいが、遅いんだね
再帰的定義をした後にwhile版を定義して速度比較しながら勉強してる。

673 :デフォルトの名無しさん:2014/02/19(水) 18:01:30.69
関数プログラミングの勉強なら、再帰を直接使わず高階関数を使って、
再帰を陽に書くのを減らしてゆく、というのが王道。

674 :デフォルトの名無しさん:2014/02/19(水) 18:47:15.84
>>672
末尾再帰最適化する実装ならそんなに変わらないと思っていたが、そうでもないのかな。

675 :デフォルトの名無しさん:2014/02/19(水) 19:25:05.78
>>673
>>674
初心者なので言われていることがサッパリわからない。言葉だけでも頭の中に入れておく。ダンケ

676 :デフォルトの名無しさん:2014/02/19(水) 19:55:33.56
>>674
末尾呼び出しをジャンプにする最適化が効いてるかどうかをチェックしてからの
比較でないと、なんとも言えないと思う。

677 :デフォルトの名無しさん:2014/02/19(水) 20:19:04.45
> 末尾再帰最適化する実装ならそんなに変わらない
賢いコンパイラなら同じコードに落ちるけど

678 :デフォルトの名無しさん:2014/02/19(水) 20:31:30.96
単に末尾再帰で書いてないとか

679 :デフォルトの名無しさん: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 では再帰とループは使い分けるのが普通だと思う。

680 :デフォルトの名無しさん:2014/02/19(水) 21:28:35.18
処理系実装の話になると元気になるの、ワロタ

681 :デフォルトの名無しさん:2014/02/19(水) 23:34:14.35
>>679
この書き込みを理解できるようになるのが一つの目標だ
ガンバるぞ

682 :デフォルトの名無しさん:2014/02/21(金) 01:19:57.92
再帰とループが違う例としては動的すぎる気が。もっと簡単な例ないかな。

683 :デフォルトの名無しさん:2014/02/21(金) 16:30:11.86
ttp://hylang.org/

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

python で書かれた lisp 方言

684 :デフォルトの名無しさん:2014/02/21(金) 16:51:17.12
pythonをS式で書けるようになっただけ?

685 :デフォルトの名無しさん:2014/02/22(土) 17:57:38.48
初心者はこっちだったのか

686 :デフォルトの名無しさん:2014/02/22(土) 19:11:07.09
お前らcl21のことどう思ってんの?

687 :デフォルトの名無しさん:2014/02/22(土) 21:41:51.04
頭が悪いからなかなか進めない
頭が良い人はいいなあ。
折れもさんざん頭が良いと言われてきたけれど、それはなんとなく「普通」の人と較べてで、
パッパと進んでいくには
「人間じゃない」レベルの頭の良さがいる。
はあ、そう生まれた人はいいなぁ
ま、仕方ないのでじっくりと時間をかけてなんどもやって、少しずつ直感化していく。

688 :デフォルトの名無しさん:2014/02/22(土) 22:38:44.89
>>687
みんな過程ではそう思う。
どう頑張っても積み上げ以上のことはできないんだから。

689 :デフォルトの名無しさん:2014/02/22(土) 23:04:34.71
適当なもの作って「俺意外に出来るな」って勘違いすることも大事だと思うよ

690 :デフォルトの名無しさん:2014/02/22(土) 23:21:29.37
訳分からん→時間をかけてようやく理解→全能感→さらなる課題を発見→訳分からん→以下ループ

691 :デフォルトの名無しさん:2014/02/22(土) 23:31:58.15
あるある。

692 :デフォルトの名無しさん:2014/02/23(日) 21:57:11.74
「リスト遊び」何とか最後までやった。本の後半を消化するまで後二週間くらいかかるかな。
しめて二ヶ月。
次は「初めての人のためのLisp」か「Schme手習い」をやってみよう。もう、どっちも手元にある。
亀の歩みだけども、じりじり前進。

693 :デフォルトの名無しさん:2014/02/26(水) 11:01:38.93
Windows(ccl) で cl-mysql を使いたいのですが、UTF8の文字が ? になってしまいます。
MySQL、ccl、slime は UTF8 に設定しているつもりなのですが他にも設定が必要なところがあるのでしょうか。

694 :デフォルトの名無しさん:2014/02/26(水) 20:31:57.27
chcp 65001

695 :デフォルトの名無しさん:2014/02/26(水) 21:44:15.55
コマンドプロンプトとか言うゴミみたいなターミナルはどうにかして欲しいところ

696 :デフォルトの名無しさん:2014/02/27(木) 01:18:36.79
なるほどコマンドプロンプトの文字コードの設定があるんですね。
これはどのように設定すれば良いのでしょうか。
slime とかに設定するものなのでしょうか。

697 :デフォルトの名無しさん:2014/02/27(木) 06:37:58.06
>>696
>>694

698 :デフォルトの名無しさん:2014/02/27(木) 15:59:55.05
set-macro-characterとかで設定したリードマクロって
パッケージをまたいでグローバルに作用しているようなんですが、
自分でリードマクロを定義すると他のライブラリを読み込んだときかなりの割合でマクロ文字が衝突します。
安全なリードマクロの書き方ってあるんでしょうか。

699 :デフォルトの名無しさん:2014/02/27(木) 23:12:43.63
俺は使ったことないんだけど、
readtable まわりを弄るんだったと思う。

700 :デフォルトの名無しさん:2014/03/01(土) 17:22:51.69
>>698
他のライブラリを読み込むときだけリードテーブルを初期状態に戻せばいいのかなと。

(let ((*readtable* (copy-readtable nil)))
(ql:quickload "my-favorite-library"))

701 :デフォルトの名無しさん:2014/03/01(土) 22:38:48.49
なるほど

702 :デフォルトの名無しさん:2014/03/02(日) 22:31:51.65
>>698
named-readtablesとかcl-syntaxとか使って管理
使うときだけ有効化

703 :デフォルトの名無しさん:2014/03/03(月) 09:29:44.65
Lispの悟りについて語ってください

704 :デフォルトの名無しさん:2014/03/03(月) 10:23:15.92


705 :デフォルトの名無しさん:2014/03/03(月) 12:40:41.26
無を発掘して知ることだ。

706 :デフォルトの名無しさん:2014/03/03(月) 15:49:19.70
nil を煮る。

707 :デフォルトの名無しさん:2014/03/03(月) 20:36:35.05
ウェイトレス:お飲み物はコーヒーで良いですか?
Lisper:T
その後紅茶を黙って飲む事が悟りだ

708 :デフォルトの名無しさん: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で開くにはどう設定すればよいですか?

709 :デフォルトの名無しさん:2014/03/04(火) 06:20:39.08
>>708
そのページに書いてある設定でいいと思うけど?

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

試してみたけど、この設定で slime-documentation-lookup と common-lisp-hyperspec-format の両方に反映されたよ。

710 :デフォルトの名無しさん: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にならないんでしょう

711 :デフォルトの名無しさん: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) でないかもしれない。

712 :デフォルトの名無しさん:2014/03/05(水) 00:10:30.26
>>686
CLには正規表現やらネットワーク周りやら標準では入ってないので
そういうライブラリを組み込んだ上で新言語と称したものがあってもいいと思うし
初心者にはアピールすると思う。

713 :デフォルトの名無しさん:2014/03/05(水) 00:33:38.51
私にはLispを信仰することはできなさそうだ

714 :デフォルトの名無しさん:2014/03/05(水) 00:41:55.92
>>709
すみません
確かに両方に反映されていました
失礼しました

715 :デフォルトの名無しさん:2014/03/05(水) 17:12:07.51
>>711
ありがとうございます
backquoteを仕様通りに展開するとうまく動作するのは分かりましたが
let over lambdaで言われてるように動作を予測するのは難しいですね
外側のbackquoteと内側のunquoteを対にして読めばいいんでしょうか

716 :デフォルトの名無しさん:2014/03/06(木) 16:58:19.90
今日からScheme手習いで勉強はじめた
訳本より原著の方が良さげだけど高いからいいや

717 :デフォルトの名無しさん:2014/03/08(土) 00:32:28.07
原著は口語英語チックで俺はちょっとキツかった。
訳本の方が良いと思う。

718 :無職:2014/03/08(土) 18:03:46.85
だれか教えて下さい。
clispでの入力履歴を、
前回に立ち上げていた時までさかのぼるには
どうするのでしょうか。
再インストールしたら出来なくなりました。
よろしくおねがいします。

環境
osx 10.6.8
CLISP 2.49

719 :デフォルトの名無しさん:2014/03/08(土) 18:11:45.49
rlwrap使えばいいよ

720 :無職:2014/03/09(日) 11:19:13.76
>>719
ありがとうございます。
忘れていました。思い出しました。
素早い返答、感謝します。
2ちゃんていいですね。

721 :デフォルトの名無しさん:2014/03/09(日) 11:46:07.13
>>720
悶絶フグの悟りもいいぞ

722 :デフォルトの名無しさん:2014/03/09(日) 13:24:10.13
Scheme手習いってコモンリスパーにも役たつの?

723 :デフォルトの名無しさん:2014/03/09(日) 15:06:10.92
やくにたつ

724 :デフォルトの名無しさん:2014/03/10(月) 17:17:34.55
ていうか、再帰とリスト処理の基礎を徹底的にやる。どういうLisp方言かは関係ない。

725 :デフォルトの名無しさん:2014/03/10(月) 17:21:11.58
あれは徹底的にやるのはlambda式とクロージャが中心だけどな。

726 :デフォルトの名無しさん:2014/03/10(月) 17:30:57.07
ほぉ、そうなのか

727 :デフォルトの名無しさん:2014/03/10(月) 17:59:19.05
ラムダ式とクロージャはSeasonedじゃなかったか。

728 :デフォルトの名無しさん:2014/03/10(月) 23:49:19.86
http://www.youtube.com/watch?v=HM1Zb3xmvMc

729 :デフォルトの名無しさん:2014/03/11(火) 20:46:44.83
別のパッケージ同士でシンボルを使おうとしたらパッケージ名::シンボル名になってて
eqがtにならないので嵌ったんだけどこういうのはキーワードシンボルで扱えばいいの?

730 :デフォルトの名無しさん:2014/03/11(火) 22:05:11.78
>>729
キーワードでも良いけど、シンボルプール用のパッケージを別途作って
そのパッケージを件のパッケージ群からuseしても良い。
そういう用途ならexternしないで意図的にパッケージ名付でアクセスするのも衛生的で良いかもしれない

731 :デフォルトの名無しさん:2014/03/11(火) 22:11:53.08
そういうやり方は思い付かなかった
すっきり書けそうありがとう

732 :デフォルトの名無しさん:2014/03/12(水) 16:22:32.27 ID:weuLszB+
hunchentootで今のURLを取得するにはどうすればいいですか?

733 :デフォルトの名無しさん:2014/03/13(木) 19:32:07.56 ID:WEwvXz1V
こんどは、

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

だって。

なんだかんだ言って、lisp って人気者なんじゃね?

734 :デフォルトの名無しさん:2014/03/13(木) 20:43:18.96 ID:hR60BOrR
erlangの根底の考え方大好きなんだけど文法がどうしてもなじめなかった自分はすげーうれしい
ちなみに同じ理由でMLとかHaskellもなじめない orz

735 :デフォルトの名無しさん:2014/03/16(日) 01:03:58.72 ID:eFgBNCjO
loopマクロで
(loop for i from 1 to 10 collect i)
みたいにiを1から10の範囲でなにかをすることは出来るのに
(loop for i from 10 to 1 collect i)
みたいな書き方は出来ないけどこれと同じことはloopマクロで出来ない?

736 :デフォルトの名無しさん:2014/03/16(日) 01:20:52.40 ID:/lHtCGez
(loop for i from 10 downto 1 collect i)
でいい?

737 :デフォルトの名無しさん:2014/03/16(日) 01:23:47.28 ID:eFgBNCjO
専用のトークンあったのか
land of lispのloopマクロ周期表にもあったのに見逃がしてた
助かったよありがとう

738 :デフォルトの名無しさん:2014/03/17(月) 01:40:49.93 ID:RttHywCL
ときどきでいいので upfrom や downfrom のことも思い出してあげてくだ(ry

739 :デフォルトの名無しさん:2014/03/19(水) 04:12:32.03 ID:g+2MOTll
3年ぐらいCommon Lispから離れてたのですが
何か大きな変更ありました?
パッケージが色々変わったという噂は聞くのですが

740 :デフォルトの名無しさん:2014/03/23(日) 16:44:04.75 ID:WrP7umWr
商と余りを求めるfloorとtruncateは名前が違うだけですか?
それとも何か違いがあるのでしょうか

741 :デフォルトの名無しさん:2014/03/23(日) 16:52:59.01 ID:ZhYebgxz
以下のように、負の場合に違う。

> floor converts its argument by truncating toward negative infinity;

> truncate converts its argument by truncating toward zero;

742 :デフォルトの名無しさん:2014/03/23(日) 17:18:35.55 ID:yZpn4CJQ
'((1 a) (2 ab) (3 b) (4 a))
'((4 a) (1 ab) (1 a) (3 c))
のような二つのリストに対して
equalなものだけを抽出したリスト
'((1 a) (4 a))を返したいのですが
lispらしいやり方ってどういうものですか?

743 :デフォルトの名無しさん:2014/03/23(日) 18:16:39.97 ID:R1nWQ7zs
(intersection '((1 a) (2 ab) (3 b) (4 a)) '((4 a) (1 ab) (1 a) (3 c)) :test #'equal)

744 :デフォルトの名無しさん:2014/03/23(日) 18:22:29.36 ID:yZpn4CJQ
>>743 ありがとうございます!
お、おそろしい...(笑)
そんなに簡単にできるとは...

745 :デフォルトの名無しさん:2014/03/23(日) 18:43:49.82 ID: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

746 :デフォルトの名無しさん:2014/03/23(日) 18:51:36.80 ID:yZpn4CJQ
>>745
なるほど、、注意します。

一覧のページ、助かります!
ありがとうございます。

747 :デフォルトの名無しさん:2014/03/23(日) 19:40:17.68 ID:WrP7umWr
>>741
ありがとうございます。知りませんでした。勉強になります。

748 :デフォルトの名無しさん:2014/03/23(日) 22:17:49.62 ID:Od1LbvNu
関数fとgがあるときにfの中でg、gの中でfを呼び出したら
どっちかを先に定義しないとダメだけどそれだと先に定義したほうで警告が出てしまう
これをfletやlabelsを使う以外にうまく書く方法はありますか

749 :デフォルトの名無しさん:2014/03/23(日) 22:51:07.67 ID:l/Ev+gij
clips だとそもそも警告でない。
SBCL なら
(declaim (ftype function g))
とか書くといいよ。

750 :デフォルトの名無しさん:2014/03/23(日) 23:03:18.83 ID:Od1LbvNu
ありがとうございました
declaimは型宣言で複雑だと思って避けてましたが省略できるんですね

751 :無職:2014/03/24(月) 14:40:40.32 ID:02bTSQQc
CLOSの疑問。
スロットオプションの :initarg :reader :writer など冗長だと思いました。
構造体のコンストラクタやメンバへのアクセサ、型判定関数の
自動生成などは便利だと思うのですが、CLOSはなぜこうなのでしょうか?
いきさつなど、わかる方いますか?
また、CLOSに限らずですが、SETFを徹底的に使いまわすのはなぜですか?
クラスにでも構造体にでもメンバはすべて、
読み出し関数と代入関数の自動生成、以上。
と、してくれたら明快なのにと思ってしまいます。
私が無知なのでしょうか?教えて下さい。

752 :デフォルトの名無しさん:2014/03/24(月) 15:13:02.11 ID:or0yrghg
CLOSはもともとLisp向けのOOPLとして設計されたのではなくて、
Lisp向けOOPLS群を記述するための最小メタOOPLとして設計された。

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

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

自分で書くと言っても難しくない?って疑問への答えがPortable CommonLoops実装。

753 :デフォルトの名無しさん:2014/03/28(金) 17:27:22.44 ID:32AHAEOu
オブジェクトを1つ取り、2つにして返すリードマクロを書く方法はありますか?
例えば、$を欲しいリードマクロとすると次のように評価されるものです
'(obj1 $obj2 ($obj3) obj4) => (obj1 obj2 obj2 (obj3 obj3) obj4)

754 :無職:2014/04/01(火) 10:47:18.75 ID:18w+IeRp
処理系によって動作を変える書き方、
わかる方いらっしゃいますか?
clispならこうなって、
sbclならああなって、
Clozure CLなら、、、という風に。
探し方が悪いのか辿りつけません。
よろしくおねがいします。

755 :デフォルトの名無しさん:2014/04/01(火) 11:10:19.88 ID:jRPbDO4g
グローバルな定数 *FEATURS* に、実装依存の機能とかを示すシンボルが
登録されているけど、それに最低ひとつ含まれている、その処理系を示す
シンボルを使う、という解でいいのかな?

756 :デフォルトの名無しさん:2014/04/01(火) 12:01:24.92 ID:UNDMPLZZ
>>754
(progn
#+sbcl (print "sbclで実行されるよ!")
#-sbcl (print "sbclで実行されないよ!")
#+(and sbcl clisp) (print "sbclとclispで実行されるよ!")
#+(and win32 (or sbcl ecl)) (print "こんな条件もしてできるよ!"))

757 :デフォルトの名無しさん:2014/04/02(水) 19:05:18.14 ID:VT3df3PV
Lisp使いは特別にワタシをナメさせてあげるわ
ただし、ワタシを擁護するのよ


       / ̄ ̄ ̄\
     /ノ / ̄ ̄ ̄\
    /ノ / /        ヽ
    | /  | __ /| | |__  |
    | |   LL/ |__LハL |
    \L/ (・ヽ /・) V
    /(リ  ⌒  ●●⌒ )   
    | 0|     __   ノ    あんたもナメたいんでしょ♪
    |   \   ヽ_ノ /ノ    
     ノ ノノ_.\___ _ ノ( ((
   ( ((/   /   ├─-..,
   )/ ゝ ¬  ,r一     )
    |ノ          r" /
   /             `y
   {  c    |   c    |
   ゝ     人     丿
    `- ー'   \ __,. ィ
      ゝ         / /
     /    ρ   /ノ
   /        〈

758 :デフォルトの名無しさん:2014/04/05(土) 09:24:45.61 ID:bt1jJ+tr
これまで(lisp-implementation-type)と(lisp-implementation-verion)でがんばってたわ・・・

759 :デフォルトの名無しさん:2014/04/05(土) 15:12:59.06 ID:LR1Bc15I
(setf a '+ b 1 c 2)として
(eval (a b c))が展開されて(+ 1 2)にならない。
(eval ‘(,a b c))ならできるんだけど、上の形で展開できるようにするにはどうしたらいいかな。

760 :デフォルトの名無しさん:2014/04/05(土) 15:27:08.99 ID:8Jv1du8q
(funcall a b c) じゃダメなん?

761 :デフォルトの名無しさん:2014/04/06(日) 00:12:54.04 ID:yLnxeWdp
(eval (list a b c))

762 :デフォルトの名無しさん:2014/04/06(日) 01:14:16.58 ID:axzLjJsV
すいません。ちょっとちがった。
(progv '(a b c d) '(1 + 2 3)
(eval (eql (b a c) d)))が真になるようにしたい。

763 :デフォルトの名無しさん:2014/04/06(日) 11:29:16.97 ID:ww3yjEEU
基本的な事を色々勘違いしてないか?

764 :デフォルトの名無しさん:2014/04/06(日) 15:34:12.74 ID:SoAcTpCI
>>762
その俺様evalをマクロで再定義するんだな。

765 :デフォルトの名無しさん:2014/04/06(日) 17:22:01.96 ID:s8bztINg
このへんの話?
ttp://www.fireproject.jp/feature/common-lisp/details/function.html

766 :デフォルトの名無しさん:2014/04/07(月) 10:30:58.34 ID:kcDbzeNy
>>725
へ?
へへへのへ?

まさか、最初から
(define foo
(lamda ()))
だからとか?

767 :デフォルトの名無しさん:2014/04/13(日) 21:19:18.03 ID:opL5E73o
Lisp使いが滅多に表に出てこないのは社内で開発支援ツールを
作ったりしているからってホント?
それとも基本的には純粋に道楽で使うものなの?

768 :デフォルトの名無しさん:2014/04/13(日) 21:44:45.71 ID:mU5oY4uE
>>767
皆シャイなんだってばよ!

769 :デフォルトの名無しさん:2014/04/13(日) 21:48:51.21 ID:M5T5p9cM
自分でLisp実装するレベルじゃないとLisp使い名乗るのは恥ずかしい気がしてくる

770 :デフォルトの名無しさん:2014/04/13(日) 22:00:17.73 ID:mU5oY4uE
>>769
おいらはCommonLispは作り込めないけど己をLisp使いだと思うけどなー
自前CommonLisp作れないと駄目とか言うと世界に何人いるんだろう?

#自前で多倍長整数とかRational表現組むだけで泣けるんですけど

771 :デフォルトの名無しさん:2014/04/13(日) 22:05:46.65 ID:Wi1Vhylz
Lisp以外のこともちゃんと知っていないと、Lisp使いは名乗れないって思ってる

772 :デフォルトの名無しさん:2014/04/13(日) 22:27:31.17 ID:CGkCJpU8
何を言ってるんだお前は。 LISPを使ってる人がLISP使いだろ。
そう、使おうとする心こそがLISP使いがLISP使いであるためのただひとつの資格さ!

773 :デフォルトの名無しさん:2014/04/13(日) 23:04:02.85 ID:+E8lLswP
N88-BASIC使いの俺が通りますよ…

774 :デフォルトの名無しさん:2014/04/13(日) 23:05:39.98 ID:kn+IksNB
Lispはマクロ用の言語として使われることが多いので、プログラマという感じじゃないのかも。
同じくマクロで使われるVBAもプログラマが使うわけじゃないし。

775 :デフォルトの名無しさん:2014/04/13(日) 23:59:56.09 ID:eO4xe9Ol
単に母数が少ないだけじゃね

776 :デフォルトの名無しさん:2014/04/16(水) 01:22:56.76 ID:JV30JiXQ
>>774
お前の言うマクロて何よ?

777 :デフォルトの名無しさん:2014/04/16(水) 01:34:48.64 ID:4SiUGY6u
アレじゃね?CG屋にはLisperが多いっていう。
CGオーサリングツールにはLispのってるんじゃね??

778 :デフォルトの名無しさん:2014/04/16(水) 05:50:50.47 ID:w7+StrcB
変換ミス修正版
Emacs Lispとかxyzzy Lispみて
マクロ言語とか言ってるんじゃないのか?VBA持ち出してるし
Lispの意味でのマクロの意味で使っているとは思えないな

779 :デフォルトの名無しさん:2014/04/16(水) 18:18:55.45 ID:n6/2Qqwf
VBAはアプリケーション組み込みマクロ言語としてしか使えないかもしれんが
Lispは組み込みマクロ言語としても使えるが汎用言語だぞ

基本何にでも使える

780 :デフォルトの名無しさん:2014/04/16(水) 22:19:02.54 ID:unZv5lM6
まあ、一番ユーザーが多いlispはelispだろうから、誤解されるのもしょうがないのかもね

781 :デフォルトの名無しさん:2014/04/17(木) 01:24:10.54 ID:IbvTFaeD
世間一般じゃマクロといえばエクセルと言う印象なんだろうな
おれもlispを知らない頃はそう思ってた

782 :デフォルトの名無しさん:2014/04/17(木) 16:51:59.12 ID:zyw99q6w
elispで書くのはマクロじゃねーよ。
いつまでTECO引きずってんだ。
elispに今もあるマクロはdefmacroとkeyboard macroの二つだけ。
elisp infoやemacswikiのglossaryで確認しろ。

783 :デフォルトの名無しさん:2014/04/17(木) 17:04:38.50 ID:xMLxyHMV
>>782
emacsのエディタマクロとlispのmacroが混線してない?

784 :デフォルトの名無しさん:2014/04/17(木) 17:22:44.64 ID:NyU+/LXv
もうエディタマクロなんてないんだよ。
今あるのはキーボードマクロだけ。

785 :デフォルトの名無しさん:2014/04/17(木) 20:33:44.45 ID:xMLxyHMV
emacsってEditor MACroSの略だと思ってたけど今は昔なんやね。

786 :デフォルトの名無しさん:2014/04/17(木) 20:37:34.78 ID:zyw99q6w
TECOの時代は終わったのさ。

787 :デフォルトの名無しさん:2014/04/18(金) 17:15:18.23 ID:Tf5Wc60A
Real programming languageで書いたコードはmacroじゃない。

788 :デフォルトの名無しさん:2014/04/18(金) 18:33:29.25 ID:32S9ba0j
>>787
VBもPythonもエディタマクロに使われているけど全否定?

789 :デフォルトの名無しさん:2014/04/18(金) 19:08:27.69 ID:RLtKHaB0
Lispのマクロについて根本的に誤認している人がいるようだ。
Excelのマクロ言語はVBAであるとか
wzeditorはC言語ライクなマクロ言語を持つとか
そういう意味じゃないからなあ

790 :デフォルトの名無しさん:2014/04/18(金) 19:29:41.00 ID:32S9ba0j
>>789
elispはマクロじゃ無いって話の流れからついに一週してしもたかんじやね。

791 :デフォルトの名無しさん:2014/04/18(金) 19:42:43.89 ID:Mcdvxl1M
emacs lispはemacsの機能を拡張するMacro言語であるようにみえる
emacs lispではLispのMacroが使用できる
emacsにはKeyboard Macroと呼ばれるキー入力シーケンスを保存して再現する機能がある
emacsの名前の由来になったMacroとは、かつてテキストエディタTECO上で動作する特殊なマクロ言語でemacsが実装されたことによる

上記四つのMacroは全部別のモノ
emacsの話を出すとMacroがややこしくなる

792 :デフォルトの名無しさん:2014/04/18(金) 21:29:22.37 ID:RJBDeLhq
マクロって命令の羅列のこと。
elispみたいな本格的なプログラミング言語のコードをマクロとは言わない。

793 :デフォルトの名無しさん:2014/04/18(金) 21:31:08.69 ID:RJBDeLhq
vimはマクロと言っているなあ。
もはや死語に近いだろうな。

794 :デフォルトの名無しさん:2014/04/18(金) 23:11:58.90 ID:GBzJyQo4
Intel CPU のマクロフュージョンも取り上げてみたい。

795 :デフォルトの名無しさん:2014/04/19(土) 10:31:46.12 ID:SVxJm38+
>>792
>マクロって命令の羅列のこと。

より正確には、「拡張操作をパッケージ化したもの。またはその機能」
プログラミング言語での「操作」を、命令の羅列で表現する事がよく有るという事。
何に(言語、ツール)言及しているかによって、「拡張操作」の対象が変わるというだけ。

796 :デフォルトの名無しさん:2014/04/19(土) 13:56:07.37 ID:z/3w4FOm
macro/mak'roh/ [techspeak] /n./

A name (possibly followed by a formalarglist) 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 (seelanguages 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).

797 :デフォルトの名無しさん:2014/04/19(土) 18:57:11.15 ID:2TBNSLSb
パッケージはないw

798 :デフォルトの名無しさん:2014/04/20(日) 02:33:59.70 ID:jJiPXZnf
>>797
「パッケージ管理システム」の"パッケージ"に限定しない話だろ?

799 :デフォルトの名無しさん:2014/04/20(日) 11:52:28.66 ID:ikGZm3gS
限定しなくてもない。
マクロ化にパックの意味なんてない。

800 :デフォルトの名無しさん:2014/04/21(月) 02:27:11.46 ID:fGRnx6yv
CLisp Win 64bit版の置き場を見つけられませんでした。
教えて下さい。初歩的な質問で申し訳無い。

801 :デフォルトの名無しさん:2014/04/21(月) 08:47:59.11 ID:lFeTo/mg
ハンナ・ユスティーナ・マルセイユ

802 :デフォルトの名無しさん:2014/04/21(月) 13:34:42.74 ID:bZ7teAnE
関数を返す関数の勉強のために
対話応答システムを作ってみたら
ゲロゲロの悲惨なものになった。ウーム。知らなさすぎる中で創るとわやになるな。
表示はdisplayのみ
キーボードからの入力はreadのみ

803 :デフォルトの名無しさん:2014/04/25(金) 18:03:13.94 ID:6BEElz8i
onlispの日本語訳はpdfやhtmlで無料で公開されてますが書籍と比べてどうですか
無料版だけで事足りますか

804 :デフォルトの名無しさん:2014/04/25(金) 18:52:24.46 ID:NEPb//MG
>>803
オンライン版を読んでから考えてみたら?

805 :デフォルトの名無しさん:2014/04/25(金) 19:11:55.61 ID:6BEElz8i
>>804
継続まで読んだんですが両方一通り読んだことがある人の意見が欲しいんです

806 :デフォルトの名無しさん:2014/04/25(金) 19:28:44.13 ID:Lv/ArU8B
英語版のon lisp基本にすれば、翻訳なんかなんでもいいような

807 :デフォルトの名無しさん:2014/04/25(金) 20:07:20.89 ID:+TF8D1gC
>>803
いろいろ気になる奴は書籍買え

808 :デフォルトの名無しさん:2014/04/28(月) 10:23:07.40 ID:vtVIy75a
lighttableでlisp使えるようにならにゃいかな

809 :デフォルトの名無しさん:2014/04/28(月) 10:29:57.05 ID:mheEU0a2
>>805
折れは1今、継続、勉強中

なんかわけわからんな、なんだこれは!
と勉強してたら
col is short for collection
;"continuation"
とか出できて
「おお、これが継続ちゅうもんかい!」
とある意味感激した
折れも継続身につけるとこまで来たんやあ
「カーカー、おまえはカラスかい!
人間、なめとんのか!、()ばかりやないカー!」
とリスプに喧嘩売ってた時がなつかしい

810 :デフォルトの名無しさん:2014/04/28(月) 21:22:46.02 ID:k3LtCAjB
>>808
Clojure……(震え声

811 :デフォルトの名無しさん:2014/04/29(火) 17:51:41.95 ID:UBPAuzy/
勉強も継続してください。

812 :デフォルトの名無しさん:2014/04/29(火) 19:19:10.84 ID:NGZ8LFiM
onlisp書籍版は表紙がいいし手触りも良い。
持ち歩いてちょっと汚れや痛みが付いてきた頃の風合いも良い。

813 :デフォルトの名無しさん:2014/04/29(火) 21:19:52.31 ID:TDR4lejK
>>812
原典、翻訳本、どっち買ったの?

814 :デフォルトの名無しさん:2014/05/04(日) 02:53:08.77 ID:6dfFx+9a
onlispのhtml版はあくまで草稿だから図が抜けてたりするし
オーム社から出てる紙の本か電子版を買った方がいいとおもう

onlispの継続の実装ってsbclに入れると警告出まくるよね
実際にはcl-contを使うのがよい

815 :デフォルトの名無しさん:2014/05/22(木) 20:36:07.46 ID:l7dCfkj7
恥ずかしすぎて質問しにくいのですが・・・
xyzzyで

(ceiling 120)
120
0.0

(ceiling 312 2.6)
121
-2.599988

なぜ後者は120にならないのか、初歩すぎて検索しても見つからない TT

816 :デフォルトの名無しさん:2014/05/22(木) 20:56:24.23 ID:Fu9GuZb0
ceilingは正の無限大に向けて丸めるからです。(切り上げ)
負の無限大に向けて丸めたければfloor、
0に向かって丸めたければtruncate、(小数部破棄=切り捨て)
一番近い整数に近づけたければroundです。(四捨五入)

817 :デフォルトの名無しさん:2014/05/23(金) 01:09:56.04 ID:gWh9LE9u
いやそっちじゃなくて、
コンピュータ上でほとんど小数は近似値だよー、312/2.6=120.00001になっちゃうよー、って絡みの話では?

818 :815:2014/05/23(金) 02:13:12.85 ID:Dj6yziyp
>>817
なるほど 120.00001 になるんだったら120にならないのは当然ですね
近似値になるって事を考えて試行錯誤し
2.6 を 2.6001にすると言う適当な事で対処しました・・・

819 :デフォルトの名無しさん:2014/05/23(金) 08:31:19.17 ID:S9ZhBRpZ
じゃなくて、四捨五入にしないと危ないだろそれ。

820 :デフォルトの名無しさん:2014/05/23(金) 08:41:53.80 ID:UMGtPnEJ
ラウンドやな

821 :デフォルトの名無しさん: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)))))

822 :815: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値

823 :デフォルトの名無しさん: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))))))

824 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2014/05/23(金) 11:14:23.71 ID:EZ1gF0i3
>>823
どうも有り難うございます。書いてもらったSample睨みながら勉強してみます。

826 :デフォルトの名無しさん:2014/05/23(金) 11:15:49.84 ID:SQmi/tAr
nthに合わせて0オリジンじゃないと気持ち悪いな。

827 :デフォルトの名無しさん: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))))))

828 :デフォルトの名無しさん:2014/05/23(金) 11:33:16.96 ID:C0KuPecL
>>827
たびたびサンクスです
どうも有り難う

829 :デフォルトの名無しさん:2014/05/23(金) 11:46:22.83 ID:/J+wV7gv
できるだけ無駄をはぶきたくてライブラリ解読して、書き換えて自前のライブラリつくっていってるんだが、usocketの内部をだれか解説してけろ。

830 :デフォルトの名無しさん:2014/05/23(金) 12:54:38.32 ID:3Eda7qDb
usocket-0.6.1/backend/使ってる実装.lispを参考にしてください。
"U"niversal部分はいらないだろうから。

199 KB
新着レスの表示

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


read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)