5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 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 :デフォルトの名無しさん:2014/05/23(金) 19:34:03.35 ID:WVZoxCv3
>>821,824
Lisp的に書くなら関数内で局所関数を定義すると思う
(defun member* (x lst)
(labels ((iter (lst cnt)
(cond ((null lst) 0)
((eq (car lst) x) cnt)
(t (iter (cdr lst) (1+ cnt))))))
(iter lst 1)))

Schemeの名前付きletを移植するとか (Let over Lambdaより)

(defmacro nlet (n letargs &rest body)
`(labels ((,n ,(mapcar #'car letargs)
,@body))
(,n ,@(mapcar #'cadr letargs))))

(defun member* (x lst)
(nlet iter ((lst lst) (cnt 1))
(cond ((null lst) 0)
((eq (car lst) x) cnt)
(t (iter (cdr lst) (1+ cnt))))))

819 :デフォルトの名無しさん:2014/05/23(金) 22:01:37.79 ID:nAFYJDzW
鯖移転してたんだな
toroの817からのログを失うのはもったいない

820 :移転前ログ 1/6:2014/05/23(金) 23:34:12.06 ID:VIeF9Nr2
818 : 815[sage] 投稿日:2014/05/23(金) 02:13:12.85 ID:Dj6yziyp
>>817
なるほど 120.00001 になるんだったら120にならないのは当然ですね
近似値になるって事を考えて試行錯誤し
2.6 を 2.6001にすると言う適当な事で対処しました・・・

819 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 08:31:19.17 ID:S9ZhBRpZ
じゃなくて、四捨五入にしないと危ないだろそれ。

820 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 08:41:53.80 ID:UMGtPnEJ
ラウンドやな

821 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 08:58:33.93 ID:UMGtPnEJ
リスプ勉強始めました。まだリスプらしい発想ができず知識もないのですが、C言語でいう静的局所変数の実現方がわからず次のようにしてみました。
もっと、まともな方法有るでしょうか?

;;;隠れ引数cntを利用して静的局所変数を実現する
;;;
;;;目的のatomが与えられたlistの何番目にあるか?
;;;なければゼロを返す
;;;(member* 'c '(a b c d )) -> 3
;;;(member* 'x '(a b c d )) -> 0

(defun member* (x lst &rest cnt)
(if (null cnt) (setq cnt '(1)))
(cond
((null lst) 0)
((eq (car lst) x)
(car cnt))
(t
(member* x (cdr lst) (+ (car cnt) 1)))))

821 :2/6:2014/05/23(金) 23:35:29.81 ID:VIeF9Nr2
822 : 815[sage] 投稿日:2014/05/23(金) 09:13:01.50 ID:5/FhmPgX
>>819
なんて説明したら良いんだろう・・・
あるブラゲのカードの攻撃力を求める計算を良くするので
それを簡単に求めれないかと xyzzyのLisp入門見て関数作ったのです
Lv1時数値の0.08倍ずつLvUp毎に増えるので
Lv1からLv?の計算は簡単でした

(defun st計算 (ステ Lv) (decf Lv)
 (+ Lv ステ (* Lv 0.08 ステ))
)

しかしLv10とかLv20とかからLv?で躓きました
LvUp済み数値は切り捨てられているため
その数値から計算した数値は必ず求めたい数値以下になる
なのでceilingで切り上げたのですが
丁度の場合 (/ 312 2.6) に落とし穴が><

後、四捨五入も最初試しましたが
Lv3のカードとか低Lv時にまずい結果となりダメでした

もっとスマートなやり方あるのでしょうが
現在問題なく計算出来てるため良しとしています
日本語入ってたり段落が・・・初心者丸出しですが晒します TT

(defun st (ステ 現L L) (decf 現L) (decf L)
 (setq X (ceiling (- ステ 現L) (+ 1.001 (* 0.08 現L))))
  (+ L X (* 0.08 L X ))
)
ステ = 現在のステータス値
現L = 現在のLv値
L   = 求めたいLv値

822 :3/6:2014/05/23(金) 23:36:52.93 ID:VIeF9Nr2
823 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 10:05:01.75 ID:fRyU8CgY
>>820
この例ではカウンタを引数渡しでいいと思う。
C言語でいう静的局所変数に相当する機能としてはクロージャがある。
ttp://www.geocities.jp/m_hiroi/xyzzy_lisp/abclisp11.html
クロージャを使ってmember*を実装しようとするとこうなる。

 (let ((cnt 1))
  (defun member* (x lst)
  (cond ((null lst)
  (setq cnt 1)
  0)
  ((eq (car lst) x)
  (prog1 cnt
  (setq cnt 1)))
  (t (setq cnt (1+ cnt))
  (member* x (cdr lst))))))

823 :4/6:2014/05/23(金) 23:37:31.47 ID:VIeF9Nr2
824 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 11:01:01.63 ID:VIeF9Nr2
(defun member* (x lst &hidden (c 1))
(cond
 ((null lst) 0)
 ((eq (car lst) x) c)
 (t (member* x (cdr lst) (1+ c)))))

(member* 3 '(1 2 3 4 5) 1) => ERROR
(member* 3 '(1 2 3 4 5)) => 3

みたいな砂糖が欲しい

825 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 11:14:23.71 ID:EZ1gF0i3
>>823
どうも有り難うございます。書いてもらったSample睨みながら勉強してみます。

826 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 11:15:49.84 ID:SQmi/tAr
nthに合わせて0オリジンじゃないと気持ち悪いな。

824 :5/6:2014/05/23(金) 23:37:56.54 ID:VIeF9Nr2
827 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 11:24:51.58 ID:fRyU8CgY
>>821,824
Lisp的に書くなら関数内で局所関数を定義すると思う
(defun member* (x lst)
(labels ((iter (lst cnt)
(cond ((null lst) 0)
((eq (car lst) x) cnt)
(t (iter (cdr lst) (1+ cnt))))))
(iter lst 1)))

Schemeの名前付きletを移植するとか (Let over Lambdaより)

(defmacro nlet (n letargs &rest body)
`(labels ((,n ,(mapcar #'car letargs)
,@body))
(,n ,@(mapcar #'cadr letargs))))

(defun member* (x lst)
(nlet iter ((lst lst) (cnt 1))
(cond ((null lst) 0)
((eq (car lst) x) cnt)
(t (iter (cdr lst) (1+ cnt))))))

825 :6/6:2014/05/24(土) 01:55:42.59 ID:78dmexXG
828 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 11:33:16.96 ID:C0KuPecL
>>827
たびたびサンクスです
どうも有り難う

829 : デフォルトの名無しさん[] 投稿日:2014/05/23(金) 11:46:22.83 ID:/J+wV7gv
できるだけ無駄をはぶきたくてライブラリ解読して、書き換えて自前のライブラリつくっていってるんだが、usocketの内部をだれか解説してけろ。

830 : デフォルトの名無しさん[sage] 投稿日:2014/05/23(金) 12:54:38.32 ID:3Eda7qDb
usocket-0.6.1/backend/使ってる実装.lispを参考にしてください。
"U"niversal部分はいらないだろうから。

826 :デフォルトの名無しさん:2014/05/24(土) 08:21:03.00 ID:DTqC/a46
ログが失われるほどの鯖落ちなのに
誰も騒がないところを見ると
本当にもう2ちゃんには人居ないんだな

827 :デフォルトの名無しさん:2014/05/24(土) 16:21:26.68 ID:rBEx7EtV
>>820-825
d

828 :デフォルトの名無しさん:2014/05/29(木) 01:43:29.39 ID:Qf2MT9JX
quicklispのインストールに失敗するので質問します
sbclのwindows fork(32bit)をgnupack12.03のhomeディレクトリ直下に置いて使っています

https://github.com/akovalenko/sbcl-win32-threads/wiki
11 MiB ~ sbcl-ci-exe-1.1.4.0.mswin.1288-90ab477-x86.zip: Stand-alone executable for 32-bit Windows (ia32)

OSSはアルミニウムの翼で飛ぶ: gnupack devel 12.03 非公式アップデート
http://aikotobaha.blogspot.jp/2014/05/gnupack-devel-1203.html

です

逆引きCommon Lisp: Quicklispを使う
http://tips.lisp-users.org/common-lisp/index.cgi?Quicklisp%E3%82%92%E4%BD%BF%E3%81%86
のとおりに入力すると
CL-USER(1): (load "./quicklisp.lisp")
CL-USER(2): (quicklisp-quickstart:install)
CL-USER(3): (ql:add-to-init-file)

debugger invoked on a SB-INT:SIMPLE-READER-PACKAGE-ERROR in thread
#<THREAD "main thread" RUNNING {24238849}>:

(ql:add-to-init-file)で止まります
./sbclrcはあらかじめ作成してあります(ただし空)
何か追加で設定しなければならないのでしょうか

829 :デフォルトの名無しさん:2014/05/31(土) 20:17:59.71 ID:68RLDo7O
>>828
Windowsでやるなら Clozure CL のがトラブルなくていいと思うよ。

と、アドバイスしつつ、エラーが断片的すぎてよくわからんゾ、といいたい。

830 :デフォルトの名無しさん:2014/06/02(月) 14:21:49.03 ID:Q2JN1vdj
readやread-charで引数にrecursive-pが真だと
再帰的に呼びだされるって説明があるけどいまいちよく分からない
readでrecursive-pがtだとreadの中でreadが呼びだされてnilだと呼びだされない?
それだとread-charもそうなのかな
ググっても例が見つからないし困った

831 :デフォルトの名無しさん:2014/06/02(月) 15:38:30.88 ID:H3ihprqs
>>830
http://www.mat.uc.pt/~pedro/cientificos/funcional/lisp/gcl_23.html#SEC1349
リーダーマクロ関数からの呼び出しをもっぱら想定しているみたい。

832 :デフォルトの名無しさん:2014/06/02(月) 17:26:57.64 ID:Q2JN1vdj
>>831
英語苦手だしよくわからないよ
(set-macro-character #\@
(lambda (stream char)
(list 'quote (read stream))))

@(1 2 @(4 5 6))
としたら
(1 2 '(4 5 6))
となるし再帰的に処理されてるんだけどなあ
でも
@(#3=(1 2) @(#3#))
とかだと#3#が無いと怒られるしこれが再帰的に呼ばれないってことなのかな

833 :831:2014/06/02(月) 22:02:17.48 ID:H3ihprqs
>>832
じゃあこちらで。
http://g000001.cddddr.org/1289223233

834 :デフォルトの名無しさん:2014/06/02(月) 22:20:10.83 ID:hdza40A5
>>833
ありがとう
結局処理系によって動作が微妙に違って有耶無耶になってるね

835 :デフォルトの名無しさん:2014/06/02(月) 23:28:47.81 ID:Evci24oh
>>830
内部で再帰的に呼び出すかどうかを呼び出し側で制御するための引数じゃないよ。

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

preserving_whitespaceのケースが分かりやすい。

836 :デフォルトの名無しさん:2014/06/02(月) 23:43:50.79 ID:hdza40A5
ああずっと勘違いしてたのか
readに再起されてることを教えるためにrecursive-pをtにするのか
すっきりした

837 :837:2014/06/03(火) 00:08:51.38 ID:cDJn8bWQ
read macroのようにシステムの振る舞いを変える特殊な機構がなければ、
こんなものはプログラマーに見せる必要はないのだ。

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

だからCLの本はマニアックなものが多い。言語屋思考が前面に出てる。

838 :デフォルトの名無しさん:2014/06/03(火) 00:30:35.72 ID:Mp2Ed1vv
インスタンスとletによる束縛の範囲が良くわからないのです。

(defclass foo ()
((a :accessor foo-a)))

(defvar *bar* (make-instance 'foo))

(let ((obj *bar*))
(setf (foo-a obj) 1))

(foo-a *bar*)
=> 1

このとき、obj は let の中で操作されてるのに、何で外側の実態まで変わっちゃうんでしょう??
いっぽうで、

(let ((a (foo-a *test*)))
(setf a 2)
a)
=>2

(foo-a *bar*)
=>1

このときはちゃんとlet内でのみ束縛されてるみたいです。

839 :837:2014/06/03(火) 10:40:12.45 ID:uQjrLyNg
Common Lispに限らないかなり初歩的なことを理解できてないので、
プログラミング入門的な本から始めることをオススメします。
ヒープオブジェクト、バインディング、ポインター辺りのキーワードから。
(setf (foo-a obj) 1)はオブジェクトの破壊的変更ですが、
(setf a 2)はバインディングを変更しただけです。

840 :はちみつ餃子 ◆8X2XSCHEME :2014/06/03(火) 15:10:40.12 ID:hEzMKve3
C++ で書いたらこんな感じかな。

#include <iostream>

class foo {
private:
int a;
public:
int& foo_a(void);
};

int& foo::foo_a(void) {
return a;
}

foo bar;

int main(void) {
foo& obj = bar;
obj.foo_a() = 1;
std::cout << bar.foo_a() << std::endl;

return 0;
}

841 :デフォルトの名無しさん:2014/06/04(水) 13:22:11.96 ID:smqAeE2Q
>>839
便乗でききたいんだけど、

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

ってした時に、a に束縛されるものが、bそのものなのか、bの参照先なのか、ってどうやって判断するんですか?

842 :デフォルトの名無しさん:2014/06/04(水) 13:38:11.71 ID:HmwUcklb
letの仕様で判断するしかないだろ
letの場合、aに束縛されるのは、bを評価した結果だよ

843 :デフォルトの名無しさん:2014/06/04(水) 18:07:09.18 ID:rdwm0BrH
>>841
bそのもの
という場合は、シンボルbの意味になるな
値と参照先の対比で言えば
シンボルbが値として有ることはない。あくまでシンボルbは或る値へのポインタを保持する
代入と言わずに束縛という理由の一つでもある

844 :デフォルトの名無しさん:2014/06/05(木) 10:31:29.17 ID:MplfPKH6
>>843
バインディングの場合は、シンボルが値を保持してるわけじゃない。
環境上でバインディングされてるだけだ。

845 :デフォルトの名無しさん:2014/06/05(木) 10:34:36.82 ID:2vI6486P
>>844
そうどけどそう読めない文だったかな

846 :デフォルトの名無しさん:2014/06/05(木) 16:40:47.76 ID:eDcskf88
>>839の説明がよくない。
ここは破壊的かどうかよりも、let が何を束縛するかが重要だろ。

847 :デフォルトの名無しさん:2014/06/05(木) 16:55:00.43 ID:MplfPKH6
letでaに何が束縛されていようが、
変数aにsetfしたらaの束縛の変更にすぎないのは同じ。
それより問題なのは「*test*」

848 :デフォルトの名無しさん:2014/06/15(日) 13:05:35.20 ID:b/Fd0dwY
質問です
cygwinにClozure Common Lispを入れています
ターミナルからClozure Common Lispを動かして
drakmaをquickloadで入れようとしたらエラーになりました

? (ql:quickload :drakma)
To load "drakma":
Load 1 ASDF system:
drakma
; Loading "drakma"
> Error: Unable to load foreign library (LIBSSL).
> Error opening shared library libssl32.dll : 指定されたモジュールが見つかりません。 .
> While executing: CFFI::FL-ERROR, in process listener(1).

which libssl32.dll や which openssl
でパスが帰ってくるのでそれらへのパスは通っているようです
どうすれば解決しますか?

849 :デフォルトの名無しさん:2014/06/15(日) 13:46:45.14 ID:yc4x9J1B
DLLのロード、cygwinのパス使って解決はしないのでは。

850 :デフォルトの名無しさん:2014/06/16(月) 00:09:49.68 ID:mOjr4QnD
ありがとうございます
cffiの仕組みがよく分からないので調べてみます

851 :デフォルトの名無しさん:2014/06/16(月) 00:50:05.70 ID:E9WcDStG
>>852
cffi というより cygwin の話。
cygwin 経由でファイル操作しようとした場合、 cygwin のランタイムライブラリは cygwin 上のパスから windows のパスへの変換をかけて処理する。
cygwin 用にビルドされていないアプリケーションは cygwin 上で動かしても cygwin のランタイムを経由しないので、 cygwin 上の設定を必ずしも反映しない。
Clozure にはロードパスを明示して指定するオプションがあるはずなので、それでライブラリの場所を直接に指定するといいと思うよ。

852 :デフォルトの名無しさん:2014/06/21(土) 04:07:00.31 ID:3WmZPTyQ
http://www.siginf.com/601.html
科学技術計算用のライブラリとしてものすごくよさそうだけど
ダウンロードの項目とかないしまだ開発中なのかな

853 :デフォルトの名無しさん:2014/06/23(月) 22:01:30.53 ID:/DPPu1fU
どなたか教えて下さい。
または、ヒントになるウェブ上の文章など
ご存知なら記入していただきたい。

lispは、関数がファーストクラスオブジェクトである。
だから、あーしたりこーしたりできる。

なにをもってファーストクラスオブジェクト
とする条件が整うのですか?
またそうでない場合は何と呼ばれるのですか?
セカンドクラスは存在しますか?
そもそもファーストクラスオブジェクトという存在の
起源はいつ、どこで、だれが発端なのですか?

854 :デフォルトの名無しさん:2014/06/23(月) 23:23:47.15 ID:sN8Q1H3I
他のデータと同じように変数に束縛できたり、
印刷できたり、ネットワークで送ったり出来れば、
ファーストクラスオブジェクト。
他のデータとくらべて、なにか大きな制限があれば
ファーストクラスオブジェクトではない。

「大きな」制限がないという意味は、例えば同じオブジェクトを二回送信して二回受信して、
eqにはならないがequalくらいにはなるというような類いのこと。
数字の1ならeqになるけど、リストならeqじゃなくてもいいかみたいな話。

そうでないものをセカンドクラスと呼びたければ呼んでもいい。
単なる英語で特別な意味は無い。

起源はたぶんLispだろう。他にこの手のことが話題になる言語は長い間なかったので。

855 :デフォルトの名無しさん:2014/06/24(火) 15:16:59.52 ID:5xWJp1EJ
854さん、ありがとうございます。
データと同じ様に扱えればファーストクラスとのこと。
lispのプログラムとは究極的には
1, 関数の定義
2, 関数の実行(データを与えられて)
なので、すごく自由なんですね。

856 :デフォルトの名無しさん:2014/06/24(火) 15:28:20.23 ID:JJ61LHPx
関数をネットワークで送るってどういうことなの
S式を送って受け手で評価するってこと?

857 :デフォルトの名無しさん:2014/06/25(水) 10:16:59.34 ID:99OqZGTi
他のデータと同じように扱えればというのは同意だけど、印刷できたりネットワークで送ったりはなんか違くね
あくまでプログラミング言語の表現上でできることによる分類だと理解してるんだけど
まあ厳密な定義がない言葉だから人によって違うのかもしれんが

858 :デフォルトの名無しさん:2014/06/25(水) 11:12:08.10 ID:Fqus7fR8
印刷?よくわからん
ネットで贈るって環境込みでクロージャー送らないの意味なくね?
よくわからん

859 :デフォルトの名無しさん:2014/06/25(水) 13:21:27.03 ID:WPn8ToeQ
http://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88
http://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E9%96%A2%E6%95%B0

ファーストクラス (第一級) とかの区分は、ALGOL な人の、ALGOL の関数はそうではない、という説明で初出するらし。
http://en.wikipedia.org/wiki/First-class_citizen#History

860 :デフォルトの名無しさん:2014/06/25(水) 21:00:35.08 ID:APzd6ej5
ALGOLか。
表示的意味論のStracheyさんだな。

861 :853:2014/06/25(水) 22:06:41.59 ID:bfUMIbrs
ファーストクラスについて質問した853です。
854さんへ返事をした855も私です。
859を見て驚きました。
まさかウィキペディアに項目があるとは「灯台下暗し」でした。
3つ目のリンク(英語のウィキペディア)を、たどれそうですね。
特にそのリンク先の項目
Historyの、First and second class objects.からはじまる10行分の引用元は
おそらく以下の論文32ページの下の方、
Fundamental Concepts in Programming Languages
https://www.itu.dk/courses/BPRD/E2009/fundamental-1967.pdf
に存在していて疑問のキモに近づけている気がします。

そもそも10行分の引用の後ろにある... [4] この索引4番。
上の論文を含む論文集の様なコレ(ググると出てきました)。
Higher-Order and Symbolic Computation
https://cs.au.dk/~hosc/vol13/contents.html
これは、何なのでしょうね?
サブタイトルに
Volume 13, Issue 1/2 (April 2000) Special Issue in memory of Christopher Strachey
とあり、860さんも指摘するこの名前が、インメモリーオブの後にある。
とりあえずは、皆様のおかげです。ありがとうございました。
2ちゃんてスゴイ。

862 :デフォルトの名無しさん:2014/06/28(土) 10:41:12.09 ID:KURc4R4I
ILC応募はじまってるぞ。

863 :デフォルトの名無しさん:2014/06/28(土) 14:25:31.24 ID:3k/D2XmS
そうか

864 :デフォルトの名無しさん:2014/06/28(土) 19:12:53.31 ID:KURc4R4I
おいおい、興奮しねぇのかよ
いくしかねぇだろうが

865 :デフォルトの名無しさん:2014/06/28(土) 19:24:15.63 ID:6G7Aa+Xt
            |i
     \      |.|
      ト\   /| ト
      | トヽ   / | | ト
      | | トヽ\/| | | ト    /
      | | | ト\≧三ミゞ=イ/
     ム彡''´ ̄ ̄    ̄ ヽ{__..
    /             V´
    ノ  __          ',
 ,. == y ̄, __、\_        )      世 界 的 で す も ん ね
 |i  }-| ゝ二 |/ ̄ ̄  /ニ,l
 ヽ__ノ/ヾ _ ノ       > }}
  / >≦'__        し /        乗 る し か な い
   Vて二オカ       (_,/}
   Yこ二ノ!!|          }         こ の ビッ グ ウ ェ ー ブ に
    Y⌒ 从        ∠)
    从从从トミ   _.ィニ二 ̄丶
     ミ三三彡 ' ´      \ \
        /           \ヽ
      /            ミ;,. ', ',
       |   _  _ __    \',.',
      ノ!   | V7\ ´/
     / l /_ゝ| ト >__/ /
     |   ヽン ´  ヽー'
    i|                l
    |:! ヽ              |
    | ト、 `ミ,            l

866 :デフォルトの名無しさん:2014/06/28(土) 23:41:57.76 ID:WOd9pXsx
>>862
ILCってなに?ググっても分からんかった

867 :デフォルトの名無しさん:2014/06/29(日) 00:29:18.53 ID:GtYVa+TG
International Lisp Coference

868 :デフォルトの名無しさん:2014/06/29(日) 11:37:18.19 ID:gwVdKsQj
>>866
"ILC Lisp" でググれば直ぐに出てくるんだが
情報リテラシー能力が欠如しているのかw

869 :デフォルトの名無しさん:2014/06/29(日) 13:50:05.95 ID:kMofjRV8
>>868
後出しはぶざま。

870 :デフォルトの名無しさん:2014/06/29(日) 18:31:52.01 ID:jxL17uOJ
ググればすぐ出てくるものに、その反応こそゴミだな。

871 :デフォルトの名無しさん:2014/06/29(日) 18:37:51.84 ID:rSPW55Gi
>>869
後出しとかw

872 :デフォルトの名無しさん:2014/06/29(日) 19:39:51.80 ID:gwVdKsQj
>>869
ILCだけで絞れなかったら次に思いつくのはLispだろ?
ここは何のスレだと思ってるんだよwww

873 :デフォルトの名無しさん:2014/06/29(日) 21:51:23.27 ID:vXcDBpcb
ますますぶざま。

874 :デフォルトの名無しさん:2014/06/29(日) 22:25:15.24 ID:jxL17uOJ
必死だな。

875 :デフォルトの名無しさん:2014/06/29(日) 23:42:13.17 ID:3G00hY9C
>>867
>>868 
ありがとう
確かに情報リテラシー能力は足りてないと思う
人の検索キーワード見てると勉強になってる

876 :デフォルトの名無しさん:2014/06/30(月) 07:38:38.04 ID:YSr0d58i
情報リテラシーってのはどうでもよくてだな、ILCにみんないこうぜってはなしなんだよ。

877 :デフォルトの名無しさん:2014/06/30(月) 07:52:00.62 ID:f7mL4vcK
初学者の俺にはきっと時期尚早
エキスパートたちは楽しんできてくれ
「驚異のエロトーク、君の彼女を越える?!人工彼女三号アケミチャン、今、Lispの可能性がここに具現する!!」
とか発表されるのかなあ

878 :デフォルトの名無しさん:2014/06/30(月) 08:33:15.78 ID:S7PnoB7N
初学者だからどうとかではなく、参加して信仰心を示すことが大切なのだよ、君。

879 :デフォルトの名無しさん:2014/06/30(月) 13:51:44.06 ID:7FoUPvVO
あらら、そりゃくずだわ
信仰心!
あ、くず
そりゃ、くず
まじ、くず
くずの3乗!

880 :デフォルトの名無しさん:2014/06/30(月) 21:55:50.88 ID:aNL5GHv4
Faith Bookですね

881 :デフォルトの名無しさん:2014/06/30(月) 22:30:33.88 ID:WSGOXIMG
このスレ、ヘンなのが居ついちゃってからどうもダメだね。

882 :デフォルトの名無しさん:2014/06/30(月) 22:40:49.62 ID:r0HKSexR
ILC 2014 ってカナダ モントリオール現地集合やんけw

883 :デフォルトの名無しさん:2014/06/30(月) 22:42:26.17 ID:r0HKSexR
そういや、小俣さんからカリフォルニア現地集合のセミナー案内が来たことあったな
そんなんをさらっと日本語メールで送ってくるなって思った

884 :デフォルトの名無しさん:2014/06/30(月) 23:09:54.32 ID:aNL5GHv4
>>882
モントリオールだとフランス語わからんと生活ままならん
英語だけだとちょっといぢめ入るんだよあそこ。

非常口とか全部フランス語

885 :デフォルトの名無しさん:2014/07/02(水) 02:56:41.39 ID:lG4D7CHT
フランスがフランス語を守るのは国策ですので。
http://ja.wikipedia.org/wiki/%E3%83%95%E3%83%A9%E3%83%B3%E3%82%B9%E3%81%AE%E8%A8%80%E8%AA%9E%E6%94%BF%E7%AD%96

886 :デフォルトの名無しさん:2014/07/03(木) 01:21:37.94 ID:/42+xN9z
linuxでlispつかってるプログラマーの環境が知りたいです。
エディタなのかそれともlimpやlispboxみたいなIDEなのかとか
それと文字入力の組合せはiBus+Anthyよりuim + Anthyの方がいいのでしょうか?
iBus+Anthyでvim使おうと思うとキーボードで日本語入力への切替が出来ず、とても面倒だったので皆さんどうしてるのでしょうか?

887 :デフォルトの名無しさん:2014/07/03(木) 06:44:45.68 ID:9NgNqjgv
vimmerでつ。

888 :デフォルトの名無しさん:2014/07/03(木) 10:43:30.36 ID:m1ee/I8B
emacs 最強。
日本語入力は ddskk

889 :デフォルトの名無しさん:2014/07/03(木) 11:04:55.82 ID:dl+rXweg
>>886
emacsでし、日本語はATOKXなんだけど最近の環境に移行するのにはATOKマンドクサイ

890 :デフォルトの名無しさん:2014/07/03(木) 11:28:14.55 ID:CYaxL587
emacsとmozc

891 :デフォルトの名無しさん:2014/07/03(木) 15:19:42.61 ID:zQnvFAz4
ん?、emacsってローカル変数つかえないと聞いたなあ

892 :デフォルトの名無しさん:2014/07/03(木) 15:35:47.42 ID:dl+rXweg
正確にはemacs+sbcl+slimeって書けばOK?

893 :886:2014/07/04(金) 05:55:47.78 ID:a+Sm66UT
>>892
lispboxを使わずにemacsでプログラミングしてるってことですか?

windowsではlispboxインストールしたけど、linuxもとりあえずemacsでやったほうがいいのかな

894 :デフォルトの名無しさん:2014/07/05(土) 06:39:46.85 ID:uz94kqwx
lispboxてemacs+slimeじゃなかったけ?
俺はemacs+slime+auto-complete+ac-slime+paredit+popwin

895 :デフォルトの名無しさん:2014/07/06(日) 17:40:45.12 ID:pTttFthd
clojureのthreading macroおもすろーと思ってCLで書いてみたんだけど、
書き終わってみてなんか実際の使いどころが思いつかなくて休日を無駄にした気分です
日記

896 :デフォルトの名無しさん:2014/07/06(日) 18:06:04.92 ID:aspDWAp6
>>895
副作用許容するCLだと使いどころあんまないでしょ。
Loopマクロ完全理解とかの方がよっぽどお得、というかあれ完全に使いこなす人見てるといつも羨望のまなざししちゃう。

897 :デフォルトの名無しさん:2014/07/06(日) 20:36:26.95 ID:pTttFthd
>>896
そうですね、やっぱりloopで自然に書けるところはそれで書いちゃうので
あと関数的でも名前長いとなんかいまいち読みやすくなった感がなかったように感じました
単純な関数の組み合わせは結構すっきり書けるようになったんでまあ無駄ではなかったと思いたいです
(-> last-page (+ i) (- 1))
(->> url (ppcre:split "/") #'last #'car (ppcre:split "\\.") #'cadr)

898 :デフォルトの名無しさん:2014/07/07(月) 09:48:07.76 ID:6na4sCwW
>>891
emacs24からスコープの扱いが変わったんじゃなかったっけ?

899 :デフォルトの名無しさん:2014/07/07(月) 12:36:51.74 ID:KxgY/iod
letがあるから昔からローカル変数はある。
スコープがレキシカルな変数、レキシカル変数のことでしょうかね?

900 :デフォルトの名無しさん:2014/07/07(月) 14:10:16.29 ID:eRMueaNX
emacs24からemacs lispでレキシカルスコープが使えるようになった
従来の動的スコープから変更になったわけじゃなくて、デフォルトは動的で、
何らかの指定をするとレキシカルスコープになる
動的スコープの関数からレキシカルスコープの関数を呼ぶこともできるし、逆も可能

ただしこのスレで今話題になってるのは、emacsでlisp使うと言っても、
emacs lispを使うわけじゃなくて外部のlispをemacs上で使う話でしょ?

901 :デフォルトの名無しさん:2014/07/07(月) 16:09:01.70 ID:dUgWwPpk
emacs lispの静的スコープは設定で切り変えるんじゃなくて
昔のlispマシンみたいにclosure構文にしたほうがよかったと思う

902 :デフォルトの名無しさん:2014/07/09(水) 01:21:29.27 ID:/8/fqD8z
そうか。

903 :デフォルトの名無しさん:2014/07/10(木) 13:47:07.90 ID:HShQwxB+
この地味に

そうか。

ってのむかつくんだけど
なにがむかつくってスレ開いて新着レスキタ - .∵・(゚∀゚)・∵. - ッ!!とかおもったら

そうか。

だよ
結構イライラするからやめてくれ

でまた

そうか。

だろ?やめろ

904 :デフォルトの名無しさん:2014/07/10(木) 14:54:39.60 ID:np89A9e3
それ面白い都でも思った?
そうか。ってレスつくの期待してんの?

905 :デフォルトの名無しさん:2014/07/10(木) 18:53:26.27 ID:b8uVYlJ5
>>903これ 前からある書き込みのコピペだよ

906 :デフォルトの名無しさん:2014/07/11(金) 11:00:59.19 ID:tKSWivTs
>>903
創価

907 :デフォルトの名無しさん:2014/07/11(金) 11:11:41.71 ID:VpP/Y762
煎餅

908 :デフォルトの名無しさん:2014/07/11(金) 14:25:42.24 ID:9W9RigEI
布団

909 :デフォルトの名無しさん:2014/07/13(日) 23:35:05.18 ID:Nc6h/Xfp
はじめまして。質問させて下さい。


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


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


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


ls -h
cut -c-11
uniq


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


ubuntu 11.20です。

910 :909:2014/07/13(日) 23:46:36.68 ID:YbxcgjxG
すいません追加です。できたディレクトリに、各日に撮影されたデータを
移動するうまいやり方ってありますか?
ファイル名の頭がyyyy-mm-ddとなっているのと、exif情報があります。
当方プログラミングはほとんどわかりませんが、以上よろしくおねがいします。

911 :デフォルトの名無しさん:2014/07/14(月) 00:02:20.05 ID:AQ9cUEpT
スレ違い。こっち↓で聞いてみたら?
http://peace.2ch.net/test/read.cgi/unix/1404204950/

912 :909:2014/07/14(月) 00:42:44.66 ID:QYx8kOpF
誘導ありがとうございました。こちらでの質問は取り下げさせて頂きます。

913 :デフォルトの名無しさん:2014/07/15(火) 06:15:03.36 ID:59xep59Q
なぜここにきた。

914 :デフォルトの名無しさん:2014/07/16(水) 10:51:34.91 ID:zYYJ84NZ
lsとlispで関係あると思ったとか?

915 :デフォルトの名無しさん:2014/07/16(水) 12:28:38.67 ID:AJ7uNsXY
slとsbclで関係あるのかと思ったのでは?

916 :デフォルトの名無しさん:2014/07/16(水) 13:21:29.13 ID:Y98WTq58
ファイルとかディレクトリ操作でわざわざCLを使う気にもならない。
cl-fadとかを使って頑張るよりもシェルスクリプトを書いたほうが早いと気づいた。

こうして僕はまた一つ、大人になった

917 :デフォルトの名無しさん:2014/07/16(水) 20:49:53.01 ID:4BExK8tU
CLはその辺面倒くさいよね
パスネーム作るのもめんどくさいしファイルディレクトリ操作関連の関数名前長いし

918 :デフォルトの名無しさん:2014/07/16(水) 21:02:18.92 ID:3aowtiLr
関数名は長くてもコピペで終わりでしょ
マウス使えない人?

919 :デフォルトの名無しさん:2014/07/16(水) 21:17:26.36 ID:4BExK8tU
なんでそこでマウスがでてくるの? そこは自動補完使うだろ普通に
単に名前長いとコードが横に長くなるし見た目がごちゃごちゃして嫌いなんだよ
まあ何をする関数なのかがわかりやすいのは利点だけど

920 :デフォルトの名無しさん:2014/07/16(水) 21:23:10.16 ID:3aowtiLr
貧弱な表示器つかってるか
横に長いと読めないと言いたいだけ?

921 :デフォルトの名無しさん:2014/07/16(水) 21:40:20.88 ID:4BExK8tU
虫の居所が悪いなら酒でも飲んでさっさと寝なさいな
おやすみ

922 :デフォルトの名無しさん:2014/07/16(水) 21:45:24.08 ID:2gGxGOPY
ファイルやディレクトリ操作はcommon lispに限らず
pythonとかでもシェルスクリプトより冗長になるけど

923 :デフォルトの名無しさん:2014/07/16(水) 22:13:02.78 ID:4BExK8tU
pythonやperlなんかはCLよりもう少し楽な印象があるけどなぁ
厳密に比較したわけじゃないけど
不満があるなら自分でなんとかしろってのがLispなので少し考えてみるか

924 :デフォルトの名無しさん:2014/07/17(木) 03:31:45.45 ID:9RVv4Ujx
外部コマンドの呼び出しも処理系依存だしexternal-programとかを使って違いを吸収してやる必要があるしな。

925 :デフォルトの名無しさん:2014/07/17(木) 14:29:12.84 ID:zA0F2tu6
最近逆引commonlispが見れなくなって不便
ただでさえ情報が少ないんだから何とかしてよう

926 :デフォルトの名無しさん:2014/07/18(金) 01:09:52.06 ID:vTAgXcei
>>925
ぐぐったら普通に出てきたぞ

927 :デフォルトの名無しさん:2014/07/18(金) 01:26:15.65 ID:FVnspc/u
URL変わってた

928 :デフォルトの名無しさん:2014/07/18(金) 21:55:16.76 ID:BDBW/1YI
cl-ncursesで作ったプログラムがエラーを出したときのデバッグってどうすればいいの?
slimeの上で動かすのは無理だから端末で動かしてるけどエラーが出たら表示が乱れるし
間違ってる箇所の特定が困難

929 :デフォルトの名無しさん:2014/07/19(土) 11:16:55.15 ID:0HpoPve0
>>928
端末でやってるなら、stferrをファイルにリダイレクトとかで出来ないかな?
もしくは、teeとか使ったらどうだろう

930 :デフォルトの名無しさん:2014/07/19(土) 13:47:07.28 ID:Cah7tT4p
ファイルに書き出すのが無難なのかなやっぱり
これで少し楽になりそう

931 :デフォルトの名無しさん:2014/07/20(日) 16:36:48.15 ID:c+tbRQVc
>>928

Unix 系の OS だと

1) slime/emacs 以外の端末を一枚開く
2) 上記端末で, tty コマンドを使って tty デバイスを調べる
3) 端末の shell 上で, sleep 86400 とかの長時間寝るコマンドを発行[1]
4) slime 側で "/dev/pty/<N>"(上で調べた tty デバイス) をオープンして
*standard-input* と *standard-output* を切り替えて実行

てな, ことをやっても slime からデバッグできないかな?
試したわけじゃないけど...

[1] 通常 shell は read で寝てるので, 端末からの入力を shell に食われる
shell が read で寝ないようにするために sleep 実行しておく

932 :デフォルトの名無しさん:2014/07/21(月) 03:54:58.65 ID:BUK6QChG
デバッグ対象のプログラムでソケット開いてswankサーバを走らせ、slimeから接続してデバッグ

933 :デフォルトの名無しさん:2014/07/21(月) 13:13:57.09 ID:1PP1q7+H
(defmacro iglambda (lambda-list &body body)
(let ((args (remove-if
(lambda (arg) (member arg lambda-list-keywords))
(mapcar (lambda (arg) (if (consp arg) (car arg) arg)) lambda-list))))
`(lambda ,lambda-list (declare (ignorable ,@args)) ,@body)))

こんなのを書いたんですが、lambdaみたく#'(iglambda (x) x)でエラーにならないようにする方法ってありますか
普段は#'つけなければいいだけなんですが、他のマクロで#'(iglambda (x) x)みたいに展開されちゃうとエラーになっちゃうので

934 :デフォルトの名無しさん:2014/07/24(木) 22:33:25.53 ID:YIQWfIP0
一時的に*readtable*を書き換えるとか、#'をオーバーライドするとか

935 :デフォルトの名無しさん:2014/07/29(火) 21:07:54.86 ID:lnaxbNJ+
clispのed関数でviではなく別のエディタを使いたいんですがどうすればいいですか

936 :デフォルトの名無しさん:2014/07/29(火) 22:17:13.99 ID:HvnnWmTY
clispの実装詳細は知らないけどunixの流儀として一般的には環境変数のEDITORをみる
たぶんlispレベルでも相当するスペシャル変数があるんじゃないか

937 :デフォルトの名無しさん:2014/07/29(火) 23:00:40.88 ID:FSsnLBrE
>>935
ttp://sourceforge.net/p/clisp/clisp/ci/default/tree/src/edit.lisp
ソース見るとわかるけど
(defparameter *editor* "your-editor")
これで行けるんじゃね?

938 :デフォルトの名無しさん:2014/07/29(火) 23:31:36.89 ID:lnaxbNJ+
>>937
おお!
さっきダウンロードしてソース検索したのに見つからなかったから諦めてました
まさか.lispに書いてあったとは

939 :デフォルトの名無しさん:2014/07/30(水) 03:14:08.25 ID:ymOvaeuA
おおお!
ドイツ語だあ、嬉しいなあ
Liefert den Namen des Editors
かっこええなあ
わかりやすいなあ
しね英語!やで

940 :デフォルトの名無しさん:2014/07/30(水) 18:22:47.39 ID:g1c+taJs
gekommen lisp

941 :デフォルトの名無しさん:2014/07/30(水) 18:34:08.84 ID:fUMWxb+n
Zu lehren das Lisp ist zu lieben sich.

942 :デフォルトの名無しさん:2014/07/31(木) 22:09:56.94 ID:2NEmh/Ub
LISPプログラマーは、キーボードは日本語とUSどっち使ってる人が多いんだろう?
プログラマの人ってUS配列使ってる人多いよね?

943 :デフォルトの名無しさん:2014/07/31(木) 22:27:02.03 ID:e1kodKvW
無変換と変換キーをctrlにしないと小指がしぬ

944 :デフォルトの名無しさん:2014/08/01(金) 02:08:14.90 ID:ARdX3qTq
>>943
無変換はHyper,変換はSuperに当てるのが普通んでもってaの左横はCtrl
親指の自由度って凄いからCtrlを変換キーに当てるのは妥当なんだけどやっぱりalt以外にsuper,hyperは欲しい
漢字変換?んなものはTCODEに限る

945 :デフォルトの名無しさん:2014/08/01(金) 05:31:22.48 ID:XLYd3eQb
US配列とSKK。最高。

946 :デフォルトの名無しさん:2014/08/07(木) 11:28:13.48 ID:HQ4TEMVi
LLVMベースでCommon Lispが動くやつってありますか?

947 :デフォルトの名無しさん:2014/08/07(木) 20:11:39.49 ID:E8mbsF1h
cclを使っています
ターミナルでスクリプトを実行し
入力している文字を表示させない状況で入力させて
その値を取得したいのですが可能でしょうか?

標準入力からは*standard-input*を使えば値を取れることは分かりました
シェルのreadコマンドの、read -s PASSのような機能を想定しています

948 :デフォルトの名無しさん:2014/08/08(金) 13:46:48.16 ID:qccrcm1U
947です
read -sを使ってキー入力を受け取り
lispスクリプトに引数として文字列を渡せば良いことに気づきました
失礼しました

949 :デフォルトの名無しさん:2014/08/08(金) 14:08:50.77 ID:LVetnHZi
わかればよろしい

950 :デフォルトの名無しさん:2014/08/20(水) 10:47:40.69 ID:5yBlZ/IM
情報科学専攻だけど恥ずかしながらLispに触れたことがない
学生のうちにLisper名乗ってみたいから使ってみる
モチベ向上のためにアカデミック以外の現場でLisp使う、便利なのか先輩方教えて下さい

951 :デフォルトの名無しさん:2014/08/20(水) 10:53:31.03 ID:8CcAuI4d
そんなこと言ってる奴は勉強しても無駄。

952 :デフォルトの名無しさん:2014/08/20(水) 11:25:51.51 ID:d2pZ5gy3
>>950
Lisperはなろうとしてなるものではないのだ、なっちまうのだよ

953 :デフォルトの名無しさん:2014/08/20(水) 11:27:18.03 ID:5yBlZ/IM
>>951
そうすか 覚える必要はないからいいけど(´・ω・`)
ただ数式処理なんかでMathematicaやMaximaみたいな関数型言語に密接な環境には常日頃お世話になってるんで本格的に特性を理解したいんだよね

954 :デフォルトの名無しさん:2014/08/20(水) 11:34:36.71 ID:Ar4bcC3q
どっちも偽関数型だ。


LISP - Wikipedia
関数型言語に分類されるが、ほとんどのLISP方言は、変数への束縛だけでなく、代入やデータ構造の破壊的操作も可能という、手続き型言語の性格ももっている。


Mathematica - Wikipedia
プログラミング言語としての Mathematica は、項書き換えを基本として関数型と手続き型の両方をサポートするマルチパラダイム・プログラミング言語である。
Mathematica は、ウルフラムらが1979年頃に開発した Symbolic Manipulation Program を起源とし[5]、プログラミング言語 ALGOL・LISP・ APL、および、数式処理システム Macsyma の影響を受けている[6][7]。

955 :デフォルトの名無しさん:2014/08/20(水) 23:59:45.83 ID:7ZTzP0p/
>>952
ワラタw
確かに自分もそうだ

956 :デフォルトの名無しさん:2014/08/28(木) 21:56:13.74 ID:+EU13Tgr
リスパーになりたいのに
リスパーって言われたいのに
ぜんぜんなれない俺

957 :デフォルトの名無しさん:2014/08/28(木) 22:30:25.06 ID:Nk/Y1yrf
あんたがlispを必要としていないか
あんたが必要とされてないか、どっちかだろう

958 :デフォルトの名無しさん:2014/08/28(木) 22:56:00.95 ID:Gw1dAD8r
>>956
マトリックスのモーフィアスが言ってただろう、感じろ!

959 :デフォルトの名無しさん:2014/08/29(金) 08:10:40.48 ID:IguOVOzJ
>>957
バカにレスされたくない

960 :デフォルトの名無しさん:2014/08/29(金) 08:11:23.52 ID:IguOVOzJ
>>958
はぁい

961 :デフォルトの名無しさん:2014/09/04(木) 23:27:36.02 ID:IshzZhlV
以前マクロの中で例外が使えれば今のマクロの弱点を克服できるみたいなページ読んだんだけど誰か分からないかな?

外側のマクロに対して内側のマクロから例外を出して書き換えるやつなんだけど

(iterator (x '(1 2 3 4))
(collecting acc x))
みたいなマクロからcollectingのところで例外を出して
iteratorで例外を補足してから
(iterator (x '(1 2 3 4))
(let ((acc nil))
(collecting acc x)))
みたいにコードを変えて例外処理のリスタートでcollectingの処理に戻るみたいなやつ。

962 :デフォルトの名無しさん:2014/09/04(木) 23:47:41.63 ID:IshzZhlV
あったこれだ
http://qiita.com/guicho271828/items/2852196ddf4c48ff0e3c

963 :デフォルトの名無しさん:2014/09/05(金) 00:27:28.37 ID:xOBKBssI
shiroさんも似たようなこと言ってた
http://blog.practical-scheme.net/shiro?20121227b-lisp-hare-tortoise

964 :デフォルトの名無しさん:2014/09/08(月) 10:14:08.39 ID:VPTlsC/M
同じこと言ってるようには思えないんだけど、どこを同じと思ったので?

965 :デフォルトの名無しさん:2014/09/09(火) 12:08:12.95 ID:YU9mY7gP
>>962
なんでマクロの展開は
macroexpand -> eval -> macroexpand ...
みたいな構造になるんだろう?そっちの方が作りやすいのかな?
lispの実装をしたことがある人は一杯居るだろうからその辺教えてほしいな

966 :デフォルトの名無しさん:2014/09/09(火) 13:13:33.09 ID:xSuWWikN
>>965のいう他のやり方はどんなの?

967 :デフォルトの名無しさん:2014/09/09(火) 14:21:39.62 ID:3jKRZ45a
>>962
いいなこれ、ほしい

968 :デフォルトの名無しさん:2014/09/09(火) 14:53:22.81 ID:YU9mY7gP
>>966
自分が思っていた事としてマクロはコンパイル時に実行される関数としか考えていなかった。
なんで当然common lispの関数で使える機能(例外、ライブラリとして実装したバックトラック機能)もマクロでも使えると思っていた。
だから何故コンパイル時と実行時でできることが違うようになってるのか気になった。他のlispどうなってるのかとかね。

969 :デフォルトの名無しさん:2014/09/09(火) 17:52:36.36 ID:FZ79e7BA
>>968
それもあるよ

970 :デフォルトの名無しさん:2014/09/09(火) 20:12:58.42 ID:/ZjY2rNK
マクロはコンパイル時前提じゃないし。

971 :デフォルトの名無しさん:2014/09/09(火) 23:44:21.53 ID:OOYpvr4f
マクロ展開時でも何でもできるのが Lispの良いとこだよ。scheme は知らないけど。

972 :デフォルトの名無しさん:2014/09/17(水) 02:49:53.97 ID:C4OaNAqf
(defparameter x 123)
(defun foo ()
(let ((x #'(lambda () x)))
(funcall x)))
としたときに (foo) を評価すると 123 が返ることを期待したのですが、
実際に SBCL で評価してみると、
* (foo)
#<FUNCTION (LAMBDA () :IN FOO) {10044EEACB}>
のように関数が返ります。
1 行目の defparameter の代わりに setq にすると期待通り 123 が返るのですが、
動作の違いがわからなくなってしまいました…。
どなたかわかる方教えて頂けますでしょうか?

973 :デフォルトの名無しさん:2014/09/17(水) 07:07:25.82 ID:qtKu3tUs
> 1 行目の defparameter の代わりに setq にすると期待通り 123 が返るのですが、
これが原因. defparameterで宣言すると, ダイナミック変数になる. こういうミスを減らすために*x*のような名前を付けるマナーがある.
トップレベルでsetqだと大丈夫だがこれも微妙. (define-symbol-macro x 123)しても良いがこれも微妙だが、この場合はこっちのが良いか.

974 :デフォルトの名無しさん:2014/09/17(水) 21:06:13.39 ID:C4OaNAqf
>>973
ありがとうございます。スペシャル変数とレキシカル変数の違いが十分理解できてなかったです。
(funcall x)により#'(lambda () x)が評価されて、xの値が返るのですが、
xはdefparameterでスペシャル変数になっているため、そのときに参照しているxの値、
つまり#'(lambda () x)が返っているようですね。

975 :デフォルトの名無しさん:2014/09/18(木) 12:08:50.47 ID:esVVPZkH
スペシャル変数というかダイナミック変数って、何がうれしいの?

976 :デフォルトの名無しさん:2014/09/18(木) 12:33:40.03 ID:gl5GJBEB
let で束縛すると便利

977 :デフォルトの名無しさん:2014/09/18(木) 13:56:39.79 ID:jUxkvtnX
>>975
「環境」の一時上書き。

978 :デフォルトの名無しさん:2014/09/19(金) 00:10:23.14 ID:5yTgoIyx
束縛ってちょっとエッチぽくていやん

979 :デフォルトの名無しさん:2014/09/19(金) 06:46:54.26 ID:O3QZpvkM
>>975
基本,単に大域変数としてつかわれる.
便利なのは関数の引数をずらずら列べなくても良いところじゃない? 他の言語と一緒だね.

980 :デフォルトの名無しさん:2014/09/19(金) 10:37:36.39 ID:X120Ti+X
帯域脱出するとunbindされるところが大域変数とは違う。
マルチスレッドの時も振る舞いは大域変数と全く異なる。

981 :デフォルトの名無しさん:2014/09/19(金) 11:58:41.45 ID:mBwsz/nF
>>980
ほうほう

982 :デフォルトの名無しさん:2014/09/19(金) 20:42:10.71 ID:7xkfrLWD
オペンキョウしてます
おっぱいあると捗るのに
オマンコご褒美なら捗るのに

983 :デフォルトの名無しさん:2014/09/19(金) 22:52:50.09 ID:O3QZpvkM
>>980
逆では? ローカルに未束縛な状況は,スペシャル変数でしか作れない.
マルチスレッドでのスペシャル変数の振舞いは規格の外だから,処理系間である一定のコンセンサスがあるだけ.
スペシャル変数と対置して語られる大域変数とは何を指しているのか.トップレベルのsetqは未定義だし.
基本,と前置きしてるのに.

984 :デフォルトの名無しさん:2014/09/20(土) 00:28:02.56 ID:rTgfsjb+
ぐだぐだと

241 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)