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

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

1 :デフォルトの名無しさん:2013/02/20(水) 15:31:16.00
Lisp Schemeスレでは恥ずかしくて聞けないようなことを質問したり、
Lisp Schemeスレの話題は高度すぎて気後れする人が話しあったり。
それ以外でもCommon Lispについての話題なら歓迎します。

ま、ゆっくりやりましょう。

「いいものの本質は、いかなる時代においても変わらない」byパワーズ

■前スレ
【入門】Common Lisp その9【質問よろず】
http://toro.2ch.net/test/read.cgi/tech/1330888006/

■Wiki
http://wiki.fdiary.net/lisp/ (id:guest pass:cl)
http://cl.cddddr.org/
http://tips.lisp-users.org/common-lisp/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

28 :デフォルトの名無しさん:2013/02/24(日) 13:31:22.34
初心者の俺が練習がてら書いてみた
破壊的変更よく知らないので戻り値で返す

(defun two-times-every-node(tree)
(cond ((null tree) tree)
((atom tree) (* tree 2))
(t (cons (two-times-by-node (car tree)) (two-times-by-node (cdr tree))))))

(print (two-times-every-node '(1 (2 5 (10 30)) 3)))

29 :デフォルトの名無しさん:2013/02/24(日) 13:32:25.79
再帰で呼び出す関数名が間違ったままだった・・・
(defun two-times-every-node(tree)
(cond ((null tree) tree)
((atom tree) (* tree 2))
(t (cons (two-times-every-node (car tree)) (two-times-every-node (cdr tree))))))
(print (two-times-every-node '(1 (2 5 (10 30)) 3)))

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

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

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

32 :デフォルトの名無しさん:2013/02/24(日) 14:05:07.09
>>27
初心者の俺も練習がてら書いてみた。

(defun 2bai-2bai (node)
(if (consp node)
(mapcar #'2bai-2bai node)
(* node 2)))

(2bai-2bai '(1 (2 5 (10 30)) 3))

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

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

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

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

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

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

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

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

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

41 :デフォルトの名無しさん:2013/02/26(火) 01:44:26.04
sbclのwindows fork版ライセンスについて質問します
https://github.com/akovalenko/sbcl-win32-threads/wiki
ここで入手できるバイナリと自作のlispソースを一緒に配布するとき、
どのようなライセンスにしなければならないのでしょうか
sbcl自体は public domain + BSD-style licenses のようですが…

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

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

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

44 :デフォルトの名無しさん:2013/02/28(木) 00:35:27.69
>>41
昔書いたやつどぞー。責任は持てんので、あくまでも参考程度に。

http://cl.cddddr.org/index.cgi?%E8%89%AF%E3%81%8F%E3%81%82%E3%82%8B%E8%B3%AA%E5%95%8F#H-1z3jsjcugixm7

ちなみに、他のライブラリを使ってそれを同梱する場合、
そっちのライセンスにも注意。特にGPL。

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

46 :デフォルトの名無しさん:2013/02/28(木) 16:16:19.02
slimeのC-M-,に割り当てられているslime-previous-locationとはどういう関数なのでしょうか?

説明には "Go to the previous location, depending on context.
When displaying XREF information, this goes to the previous reference."

と在るのですがprevious locationというのが何を指しているのか分かりません。
どなたかお教えくださいm( _ _ )m

47 :デフォルトの名無しさん:2013/03/02(土) 20:48:54.59
(setq parameter '(`(,a ,b) `(,c ,d) `(,e ,f)))
というリストがあったとして

`(let (,@parameter)) ; とすると
;; (let (`(,A ,B) `(,C ,D) `(,E ,F))) になりますが(分かる)

`(let hoge
`(let (,,@parameter))) ; とすると

;; (LET HOGE
;; `(LET ((,A ,B) (,C ,D) (,E ,F))
;; )) ;という風に前者と違って`が消えたものが挿入されるのは何故なのでしょうか?

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

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

50 :デフォルトの名無しさん:2013/03/02(土) 23:29:30.98
>>48,49
ありがとうございます。`(`(,A ,B))が`((,A ,B))と等価なのですね。
しかし``(,,A ,,B)と`(,A ,B)は等価ではないのですね。
以下のマクロを読み解こうとしてドツボにはまっていました。難しい!

(defmacro once-only ((&rest names) &body body)
(let ((gensyms (loop for n in names collect (gensym))))
`(let (,@(loop for g in gensyms collect `(,g (gensym))))
`(let (,,@(loop for g in gensyms for n in names collect ``(,,g ,,n)))
,(let (,@(loop for n in names for g in gensyms collect `(,n ,g)))
,@body)))))

51 :デフォルトの名無しさん:2013/03/02(土) 23:49:09.29
`(`(,a))は`((,a))と等価じゃなくね?

(let ((a "hoge"))
(list 'ほら `((,a)) `(`(,a))))
;=> (ほら (("hoge")) (`(,A)))

``(,,@parameter)が
`(`(,A ,B) `(,C ,D) `(,E ,F))にならずに
`((,A ,B) (,C ,D) (,E ,F))になるのってどうなんだろう。
そのコードは後者の挙動を前提にしているような。

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

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

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

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

54 :デフォルトの名無しさん:2013/03/11(月) 21:57:44.02
java等のようにクラスの中にメソッドを定義する
オブジェクト指向ができるlispのライブラリってあるんですかね?

defclass class-name ({superclass-name}*) ({slot-specifier}*) ({method-specifier}*)
みたいに定義して(method object)で呼び出せるようなの

pclには(send object 'foo)になるのが嫌だから今の形になったとあるけど
(foo object)で呼び出せるようにするのって不可能だったんですかね?
sendが嫌だというなら(slot-value object 'foo)だってsendと似たようなもんだと思うんですけど..

55 :デフォルトの名無しさん:2013/03/11(月) 22:48:48.12
>defclass class-name ({superclass-name}*) ({slot-specifier}*) ({method-specifier}*)
ここまで決まってたら10分ぐらいでマクロ作れそうだな。

sendが残ったままだったら、slot-valueを使う時に(send object 'slot-value 'foo)としなければいけない。
sendはメソッド呼び出しで、slot-valueはあくまでアクセスするためのメソッド。

pclにはsendが残ったままだったら、
(mapcar #'foo '(obj-a obj-b obj-c))としたい時に
(mapcar #'(lambda (x) (send x 'foo)) '(obj-a obj-b obj-c))としなければいけず、
これではLISPの力を発揮しきれないという様な事が書いてあった気がする。

56 :ハツネツ:2013/03/11(月) 23:21:23.65
Javaのようにクラスの中でメソッドを定義するマクロを作りました

(defmacro my-defclass (class-name superclasses slots methods)
  `(progn
     (defclass ,class-name ,superclasses ,slots)
     ,@(mapcar #'(lambda (method-spec)
                   (destructuring-bind (method-name args &rest body) method-spec
                     `(defmethod ,method-name ((this ,class-name) ,@args) ,@body)))
               methods)))

(my-defclass person ()
  ((name :initarg :name)
   (age :initarg :age :accessor age))
  ((greet (your-name)
     (format nil "Hello, ~a! my name is ~a." your-name (slot-value this 'name)))
   (birthday ()
     (incf (slot-value this 'age)))))

(setf taro (make-instance 'person :name "Yamada Tarou" :age 20))

(slot-value taro 'name) ;=>"Yamada Tarou"
(greet taro "hoge") ;=> "Hello, hoge! my name is Yamada Tarou."

(slot-value taro 'age) ;=> 20
(age taro) ;=> 20 ↑と同じ (:accessor ageとしたから使える)
(progn
  (birthday taro)
  (birthday taro)
  (age taro)) ;=> 22

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

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

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

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

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

62 :デフォルトの名無しさん:2013/03/14(木) 00:43:41.46
フィボナッチ数列を行列のべき乗で求めるやつ書いてみたら
なかなかあほっぽくなっとるからかっちょよく書いとくれ
doはなんか物騒だったので使えんかった
xyzzyで動かしちょる

(defun fibv (n)
(let ((a 1)(b 1) (c 1) (d 0) (a2 1) (b2 1) (c2 1) (d2 0)
(t1 0)(t2 0)(t3 0)(t4 0))
(while (> n 0)
(setq t1 (+ (* a2 a) (* b2 c)))
(setq t2 (+ (* a2 b) (* b2 d)))
(setq t3 (+ (* c2 a) (* d2 c)))
(setq t4 (+ (* c2 b) (* d2 d)))
(setq a2 t1)
(setq b2 t2)
(setq c2 t3)
(setq d2 t4)
(setq n (- n 1)))
d2))

参考
http://itpro.nikkeibp.co.jp/article/COLUMN/20061010/250176/

63 :デフォルトの名無しさん:2013/03/14(木) 02:42:13.88
>>62
再帰を使わずに書きたいのね、多分
こんな感じだろうか。

(defun fib (n)
(loop with (a b c d) = '(1 1 1 0)
for (a2 b2 c2 d2) = '(1 1 1 0)
then (list (+ (* a2 a) (* b2 c))
(+ (* a2 b) (* b2 d))
(+ (* c2 a) (* d2 c))
(+ (* c2 b) (* d2 d)))
repeat n
finally (return d2)))

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

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

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

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

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

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

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

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

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

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

74 :デフォルトの名無しさん:2013/03/16(土) 14:14:13.11
CLOSで名前の衝突に気を使うのがかったるい
たとえば、パッケージA,Bを別々に定義して、その中でそれぞれクラスA, Bを定義、
そのクラスをパッケージαで使う、とか考えた時に、

;; まずAを定義して
(defpackage :A (:use :cl) (:export :attr-of))

(in-package :A)

(defclass A () ((attr :reader attr-of)))

;; 次にBを定義
(defpackage :B (:use :cl) (:export :attr-of))

(in-package :B)

(defclass B () ((attr :reader attr-of)))

;; αで2つを一緒に使おうとすると、名前が衝突して落ちる
(defpackage :child-alpha (:use :cl :A :B))


A-attr, B-attr, とかいうアクセサはオブジェクト指向的じゃないから嫌だけど、
attr-ofにすると、先にアクセサ用パッケージでシンボルを用意するのもダルい。

いっそパッケージを、アクセサ、クラス、総称関数の3つだけにしたらいいのかね。
お前らはどうやってんの?

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

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

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

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

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

79 :デフォルトの名無しさん:2013/03/16(土) 21:49:19.62
これに対するマクロor関数を作っていただけますか?
以下のnthを1まとめにしようとしています
2時間粘っても上手く行きません・・・

(nth 6 (nth 3 (nth 4 (nth 8 (xmls:parse (drakma:http-request *sample-xml*))))))
(nth 3 (nth 2 (nth 4 (nth 8 (xmls:parse (drakma:http-request *sample-xml*))))))

80 :デフォルトの名無しさん:2013/03/16(土) 21:59:27.44
(defmacro nnnnnnth (obj &rest indices)
(reduce (lambda (a i) `(nth ,i ,a)) indices :initial-value obj))

(macroexpand '(nnnnnnth hoge 1 2 3 4))
; => (NTH 4 (NTH 3 (NTH 2 (NTH 1 HOGE))))

希望と合ってる?

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

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

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

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

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

84 :デフォルトの名無しさん:2013/03/16(土) 22:44:43.37
>>79
XMLのツリーを操作するときにリストとして直に扱うのはあまりお勧めしません。
(nth 6 ...)や(caddddr ...)のようなコードでは何をやっているのかさっぱり分かりません。

XMLSなら

(let ((xmls (xmls:parse "<element attribute=\"value\">text</element>")))
(xmls:xmlrep-attrib-value "attribute" *xmls*))

のようにすれば要素の値を取得できます。既存のアクセサを使ったり、
自分でアクセサを作って利用することを強くお勧めします。

また、XMLSはリストの使用を全面に押し出したプロダクトなので、初心者には向きません。
エラーハンドリングも簡略化されているため、コードを追えないと原因も探れません。
慣れないうちはClosure XMLでDOMやSTP、XPathを使った方が良いと思います。

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

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

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

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

http://tips.lisp-users.org/common-lisp/index.cgi?XML%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0

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

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

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

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

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

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

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

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

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

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

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

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

100 :デフォルトの名無しさん:2013/03/20(水) 15:00:45.68
質問です。

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

"hogehoge 'abc' 1112 'def'999 'ghi'"
でクオーテーションで囲まれている部分を$(数字) で置き換えて
"hogehoge $(0) 1112 $(1)999 $(2)"
という風にしたいのですが

"hogehoge $(0) 1112 $(0)999 $(0)"
となってしまいうまくいきません

(let* (
(value "hogehoge 'abc' 1112 'def'999 'ghi'")
(pattern "\\('[^']*'\\)")
(eval-value value)
)
(setq eval-value (replace-regexp-in-string pattern (format "$(%d)" 0) eval-value nil nil 1))
(setq eval-value (replace-regexp-in-string pattern (format "$(%d)" 1) eval-value nil nil 1))
(setq eval-value (replace-regexp-in-string pattern (format "$(%d)" 2) eval-value nil nil 1))
)
1回目のreplace〜で全て$(0)になってしまい、引数が↓のときとおなじ結果になってしまいます。
(replace-regexp-in-string pattern (format "$(%d)" 0) eval-value)

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

199 KB
新着レスの表示

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


read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)