Emacs Lisp
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG少数派による互助を中心に、初心者の相談も気が向けば受け付けます。
単なる Emacs ユーザーは別板の Emacs 関連スレにどうぞ。
*関連スレ
LISP Scheme Part2
http://pc.2ch.net/test/read.cgi/tech/1002584344/
LISP Scheme
http://pc.2ch.net/test/read.cgi/tech/987169286/
00021
NGNG0003デフォルトの名無しさん
NGNGその利点は何?
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNGいやCは使ってると思うが…
Emacs Lispがなくて、かわりにカスタマイズや拡張をCだけでやるしかないとし
たら、あんなに気軽に拡張はできなかったね。.emacs書き換えるたびにビルド
し直すんだろ?(w
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG> 先生!なぜEmacsはメジャーなCとかではなくてマイナーなLispを採用したのですか?
> その利点は何?
CがメジャーでLispがマイナーと言ってる時点でもうなんか終わってるな。
Lispは十分メジャーだよ。
それにカスタマイズ用に俺自作謎言語なマクロを実装しているエディタだって
沢山あるのに…。(エディタに限らないが)
0008デフォルトの名無しさん
NGNG柔軟だから。C よりはるかに柔軟だから。
0009デフォルトの名無しさん
NGNG実際はともかく、C メジャー、Lisp マイナーというのが普通(?)の多くの人の考える
ところのような気がするのですが。
0010デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/unix/1001087615/l50
こっちじゃダメなのか?
0011デフォルトの名無しさん
NGNGelisp ライブラリの数の多さを見れば十分メジャーだよ。
C に比較すれば少ないという点は否定しないけどね。
0012デフォルトの名無しさん
NGNGどうすんのさ。Cインタプリタでも書く?
それならLispにした方が2^24倍かしこいだろ。
0013デフォルトの名無しさん
NGNGCなんてほとんど使われてないと思うけど…
(あるのか?)
0014デフォルトの名無しさん
NGNG>>3 は秀丸とかWZとかのC風マクロ言語を意識してるんじゃない?
0015デフォルトの名無しさん
NGNGうん、そうかも。それってどマイナーだよね。
0016デフォルトの名無しさん
NGNGdefun と message と ifが使えるようになったにょ〜。
0017デフォルトの名無しさん
NGNG先が思いやられるな
0018デフォルトの名無しさん
NGNGelisp が「本物」の lisp や scheme だったらもう文句なしなのに.
0019デフォルトの名無しさん
NGNG「本物」の lisp であっても再帰には制限あると思うけど。
Schemeはともかく。
0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNGGNU Emacs自体はScheme(1975年)ほど古くはないけど、
elispの仕様はMacLispとかの古いLispに非常に近いね。
特に、dynamic scopeしかないところが。
0022デフォルトの名無しさん
NGNG> それならLispにした方が2^24倍かしこいだろ。
やはり残りの8bitはタグですか?
0023デフォルトの名無しさん
NGNGずいぶん重なるんでじゃないですか?
0024デフォルトの名無しさん
NGNG00251
NGNGやはりそうなるんでしょうか。
この板に来るんだけれども、UNIX 板などには来ない人からのレスを期待して
しまっていました。lisp 人口が少しでも増えないかなとか思いつつ。
lisp か C かはアレとして、>>16のような人が増えると、みんなが幸せに
なれますね。
0026デフォルトの名無しさん
NGNGちょっとした小物が多いだろうし。
0027デフォルトの名無しさん
NGNGElispが上位8ビットをタグに使っていたことを知っている人が
いるとは思わなかった。今は5ビットだけどね。
0028デフォルトの名無しさん
NGNGUNIX板はEmacsスレは結構盛んです。一ヶ月半の間に500近い書き込み。
自分もよく教えてもらってます。
0029名無しさん@Emacs
NGNG厨房っぽい質問してもシカトされるので、こういうスレは助かります。
今、「リスト遊び」とelisp introの日本語訳を読んでます。
テキストを扱う仕事なので、非常に興味を引かれます。
最初は基地外みたいな言語だと思ったけど、なんとなく理解できてきました。
OSを問わずほぼ同じ環境を整えられるというのは、
計り知れないメリットだと思います。
一生かけて使い込んでみようかなという気になります。
0030デフォルトの名無しさん
NGNGどのような時なんでしょうか?
dynamic scope だけでも特に困ったこと無いんですが...
0031デフォルトの名無しさん
NGNGタグ5bitってLSBに持ってるんですよね? で、セルは32bitアラインで配置かな。
俺が見たLispは68010用。よってMSB8bitがタグ。これ最強。
今はこういう貧乏臭い実装って嫌われるから鬱。
0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNG仮引数に対しては静的だよね?
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNGなんでMSBにTAGつけるのにアラインさせるの?
LSBも空きができるじゃん。
0036デフォルトの名無しさん
NGNG違う。最初のLISPはIBMの機械。
Macの実装が多いのは、昔からメモリたくさん積んでたし、
リニアで何メガバイトもアクセスできるという、68000の石の特性も
あると思う。
0037デフォルトの名無しさん
NGNG仮引数って (defun hoge (hage) ..)
の hage の部分ですか? それも動的スコープだと思う.
>>34
初期の MacLisp という名が混乱の元では.
0038デフォルトの名無しさん
NGNGなるほどー。ありがとです。
003933
NGNGhageの方です。
0040デフォルトの名無しさん
NGNGたしかどっちも動的 scopeだと聞いた記憶がある。
そこに静的 scopeの schemeが気炎を吐いていたと。
静的 scopeの方が compileするためには楽だけど、interpreterだと
そんなに問題にならないのかもな。
macroとか書くときにイヤーソなことにならないかしらん。
0041暗黙の名無しさん
NGNG0042デフォルトの名無しさん
NGNGそのときのために
set-g-value : (setq gGlobalValue num)
inc-g-value ; (setq gGlobalValue (+ gGlovalValue 1))
put-g-value ; (insert int-to-string gGlobalValue)
って3つのコマンド作ったんだけど、もしかして標準で同じようなのってある?
0043デフォルトの名無しさん
NGNG1+ のような関数ならあるけど, 破壊的なのはないと思った.
破壊的な汎用 1+ は macro で書ける. elisp manual の macro の所に
サンプルがあったと思う.
僕はキーボードマクロでも eval-expression を使うことが結構あるな.
0044デフォルトの名無しさん
NGNGMIT AI Lab. の出身で、彼自身が Lisp プログラマだから。
ということは偶然が単に定着しているだけかな。
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNGgclを早速動かしてみようとおもいcygwinに入れました。
インストールの途中でraw_gcl.exeがスタックダンプを
吐き出して止まります。。。どうしよう。
0047デフォルトの名無しさん
NGNGソースのコメントに日本人の名前が入ってるから
これ使いたいけど自分じゃちょっと厳しいかも。
0048匿名λ式
NGNG自由変数のscopeがlexicalなのが静的。そうでないのが動的。
静的の利点は、効率とprogramの可読性。
(defun foo (x)
(bar))
;; 互いに独立なので、fooとbarは同一lexical scapeではない。
(defun bar ()
x)
で、barからfooのxが参照できるのが動的。
;; Schemeはこれが出来ない。MacLisp, InterLisp, elispは可能。
;; Common Lispはスペシャル変数だけ可能。
;; MacLispにはcompile時のみ出来ないという時代もあった。Shallow binding以前。
(defun baz (x)
(let ((y))
(seq y (+ x x))
y))
xの参照はbinding levelを一つ越えているけど、lexical scape内だから可能。
これが「静的」の意味。binding levelはlexicalなものに限って越えられる。
;; scapeにおいて、lexical = staticって用法は他の言語で一般的。
;; S式は動的に変化するのが特徴の一つだから何か変な話だけど。
004945
NGNGhttp://www.google.co.jp/search?q=cache:jGHzkwQfeA0:village.infoweb.ne.jp/~fwhw5892/cygwin/+cygwin+GCL&hl=ja
ここにも(2000.08.05)書いてあるとおりCygwinでgclは厳しいみたいです。
どうしよう。gソースの中へ入ってがんばるか、あきらめて他の
マシンで使うか。んー、、
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGMeadowつかい始めたんですが、デフォルトだとc/c++モードの
オートインデントが半角スペースなんです。
4タブにしたいんですが、どうしたらいんですか?
0053デフォルトの名無しさん
NGNG動的スコープは、Schemeなら簡単なマクロで書けるでしょ。
でも、名前がうっかりぶつかるとプログラムが壊れるから不便だよね。
>動的スコープ。
やっぱりλならα変換ルール(束縛変数の名前を変えても意味が変わら
ない)が成り立ってくれないと…
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNG簡単に書けるよ?
(define x #f)
(define foo
(lambda (new-x)
(let ((old-x x))
(dynamic-wind
(lambda () (set! x new-x))
(lambda () (bar))
(lambda () (set! x old-x))))))
(define bar (lambda () x))
もちろん、実際には(fluid-letとかの名の)マクロを使うけど。
0056デフォルトの名無しさん
NGNGそりゃ、xをグローバルにすりゃ書けるだろ
0057デフォルトの名無しさん
NGNGshallow bindingっていう手法だけど、知らないのかな?
Emacs Lispがやってるのは、本質的にこれと全く同じ。
005856
NGNG知ってるよ
でも意味が異なるだろ
0059デフォルトの名無しさん
NGNG「Unix板逝け **終了**」
で終わったのに、この違いはなんだ(藁
0060デフォルトの名無しさん
NGNG多分、>>3のおかげ。あの質問のおかげで最初の十数レスがまともな物になって、
そのおかげでそれに続く話題も(終了などにならずに)まともな物になりました。
(そういう雰囲気が作られたわけです)
2ちゃんでは、スレの初めの方のレスはかなり大きな意味を持っています。
0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGこめんな、それ言ったのはおれだよ
0063デフォルトの名無しさん
NGNGどう違うの? 全く同じだと思うが。
0065デフォルトの名無しさん
NGNGH○PやR○byの煽り合いスレよりゃぁだいぶんマシ。
0066デフォルトの名無しさん
NGNGひとつ気づいたんだけど、ある程度難しい話をしてると、奴等は寄ってこないんだよね。
0067匿名λ式
NGNG> でも、名前がうっかりぶつかるとプログラムが壊れるから不便だよね。
> >動的スコープ。
*standard-output*みたいなのを、multi thread環境で使う、
って局面ではあった方が便利だよね。
竹内さんもbitのTAOの連載で言っていたけど。
ただ、thread内でsingletonとして利用しないと、>>53の言うようにまずいわな。
>>55の実装のためには、「thread-localな環境」が欲しくなるな。< multi threaded
こういう研究や実装って最近どうなんですか? > 現役の方々
0068デフォルトの名無しさん
NGNGそーか、ここのひとはみんな優しくてそのようなあたりまえのことは指摘しないのかな。
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNGどうせ elisp と互換がないのだったら scheme にした方が
よかったような気がするんだけど.
0074デフォルトの名無しさん
NGNG汚くてもC++の方が実用性あるのといっしょ
0075デフォルトの名無しさん
NGNGWhats?
0076デフォルトの名無しさん
NGNG試してからいえっつーの。
もし、dynamic-wind をよく知っているのに問題に気づかないというなら
lexical scope か代入のことをよく知らんのだ。
0077デフォルトの名無しさん
NGNGまさか、>>55にでてくるトップレベルのxが
実際にxという変数名だと理解してるのだろうか?
0078デフォルトの名無しさん
NGNGSchemeのfluid-letと同等ではない。
しかし、Emacs Lispのdynamic scope変数とは同等だろ?
(ここはElispスレだということを理解してる?)
0079デフォルトの名無しさん
NGNGRubyに実用性が無いという点にのみ同意。
0080デフォルトの名無しさん
NGNG厨房を呼ぶ呪文か。やめい。禁ッ
0081デフォルトの名無しさん
NGNG明示的に仮引数でやるようにした方が見通しいいと思うんだけど,
結構いろいろな package で使ってるようですね. skk とか wl とか.
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNG0086匿名λ式
NGNG((gnu (gnu is not unix)))
gnu)
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNG(car gnu) => gnu
(car (force (cdr gnu))) => gnu
(car (force (cdr (force (cdr gnu))))) => gnu
しかし全然Emacs Lispと無関係。
0089デフォルトの名無しさん
NGNGを忘れてる。
0090名無しさん@お腹いっぱい。
NGNGウィザードまでは使ってもあくまでソース編集からコンパイルまでは
Emacsですか?
0091デフォルトの名無しさん
NGNG0092名無しさん@お腹いっぱい。
NGNGそれは無理だと思うけどウィザードで生成したコードを、
編集するところにEmacs使ってるのかなっておもってさ。
0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNGMeadow は違うの?
0095デフォルトの名無しさん
NGNG非同期プロセスは使えるの?
dos の時はもちろん使えなかったけど.
0096匿名λ式
NGNGXEmacs動いてるんちゃう?
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNGものかも.
0099デフォルトの名無しさん
NGNG変態配置覚えちゃいなよ。
一週間もあれば慣れるよ。
010097
NGNGありがとう。
>>99
仕事柄、NOTEPADやVB/VCを主に使うので・・
多分、これだけあれば違和感ないと思うんだけど。
Home/End 行頭/行末
Ctrl+Home/Ctrl+End 文頭/文末
Shift+カーソル 選択移動
Ctrl+カーソル 単語移動
Ctrl+X カット
Ctrl+C コピー
Ctrl+V ペースト
Ctrl+A 全選択
Ctrl+S 上書き保存
Ctrl+F 検索
Ctrl+Z/Ctrl+Shift+Z Undo/Redo
F3/Shift+F3 次検索/前検索
0101デフォルトの名無しさん
NGNG0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNG;; しかし scheme とかに逸れていってしまうんだな...
0104名無しさん@XEmacs
NGNGンプを得るにはどのように書けばいいのでしょうか?
diredは `ls -l` を使ってるらしいと聞いたのですがelisp単体では無理?
0105デフォルトの名無しさん
NGNGUser-agent: がどう関係するのかわからんが、file-attributes じゃダメなの?
0106デフォルトの名無しさん
NGNGxyzzyならGates.lてファイルが用意されているんだけどね。
Emacsでは選択テキスト(リージョン)の反転表示は
無理じゃないかな?
0107デフォルトの名無しさん
NGNG無理じゃない.
transient-mark-mode
0108デフォルトの名無しさん
NGNGしかし Gates.l とは (ワラ
けどスレと全然関係無いね。
0109名無しさん@XEmacs
NGNGできました!
(format-time-string "%Y/%m/%d %T" (nth 5 (file-attributes "/home/hoge/.emacs")))
0110名無しさん@Emacs
NGNGみたいなリストの中身を全てconcatするときって普通どうやります?
とりあえず
(eval (cons 'concat '("a" "b" "c"...)))
ってしたけどこのやり方が普通なのかどうかさっぱり。
0111名無しさん@Emacs
NGNGリージョンが指定されてる時とされてない時に動作が変る関数はどうやって作っ
たらいいんでしょう。
(defun hoge (&optional start end)
(interactive "r")
(message "hoge"))
だと、リージョン指定してないときにエラーがでます。
0112デフォルトの名無しさん
NGNG(apply 'concat '("a" "b" "c"...))
普通かどうか知らんけど。
0113名無しさん@Emacs
NGNGサンクス! apply の存在を知りませんでした。逝ってきます。
0114名無しさん@Emacs
NGNGtransient-mark-mode にしてたのが原因でした。
transient-mark-mode の場合、transient-region-active-p で
region が指定されてるかどうかチェック出来るみたいなので、
それを使うことによって解決しました。
0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNG0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNG(let ((f
(lambda (n)
(if (> n 0)
(concat "もじれつ"
(apply f (list (- n 1))))))))
(apply f (list 3)))
というコードを書いてみたが、apply() 使うと引数をいちいち
list() でくくらんといかんのが気に食わんのだけど。
他にクロージャを実行する関数ってどんなのがあったっけ?
0119デフォルトの名無しさん
NGNG0120118
NGNGありがとう。括弧がひとつ減ったよ。
0121デフォルトの名無しさん
NGNGのようなやつって scheme みたいな lexical scope の
ものでは動かないんだけど、Emacs lisp では
普通の手法ですか?
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNGschemeならもっと簡潔に書けるよ。
0124デフォルトの名無しさん
NGNGつーか末尾再帰(非再帰ループ)でかけるんじゃ?
0125デフォルトの名無しさん
NGNG(letrec ((f (lambda (n)
(if (= n 0)
""
(string-append "もじれつ" (f (- n 1)))))))
(f 3))
0126デフォルトの名無しさん
NGNG(let f ((n 3))
(if (= n 0)
""
(string-append "もじれつ" (f (- n 1)))))
0127デフォルトの名無しさん
NGNG(let f ((n 3)(r '()))
(if (= n 0)
(apply string-append (reverse r))
(f (- n 1) "もじれつ")))
0128デフォルトの名無しさん
NGNG(let f ((n 3)(r '()))
(if (= n 0)
(apply string-append (reverse r))
(f (- n 1) (cons "もじれつ" r))))
0129121
NGNGdynamic scope であることに依存して書くのは
コーディングスタイルとしてどうなのかなと思って.
まあ emacs lisp だからいいんだろうけど.
僕もそうやって書いてるし(藁
0130デフォルトの名無しさん
NGNGdynamicかlexicalかの問題じゃなくないか?
Emacs Lispのletがschemeのletrecと同じなんでしょ?
0131デフォルトの名無しさん
NGNGこれってインデントはemacs-lisp-modeあたりに任せるとして、
改行はどこでやるのが普通なんでしょうか?
さっぱり見当がつきません。
0132名無しさん@Emacs
NGNG0133ageたら食い付く冬の厨
NGNGProjectBuilderのエディタなんか使ってられっか!(`Д´)
0135デフォルトの名無しさん
NGNGなぜ (cons (cons 10 20) (cons 30 40))
が ((10.20) (30.40))
でなく ((10.20) 30.40)
の形になるのでしょうか?
考えると夜もねむれません
0136デフォルトの名無しさん
NGNG0137135
NGNG((10 20) 30 40)場合
第1 (10 20)
第2 30
第3 40
(10 20) (30 40)の場合
第1 (10 20)
第2 (30 40) です
0138デフォルトの名無しさん
NGNGconsは「対」を作るオペレータ。
「対」はドット表記であらわす。
(cons 1 2) => (1 . 2)
ただし、「対」の最後のcdrにnilを入れた形式をlispでは「リスト」という。
(cons 1 nil) => (1) ドット対では(1 . nil)
(cons 1 (cons 2 nil)) => (1 2) ドット対では(1 . (2 . nil))
通常lispではリスト形式で出力され、
ドット対表現はconsが1つしかない構成でのみ出力される。
リストを作る場合、普通はconsよりもlistを使う。
(list 1 2) => (1 2)
0139デフォルトの名無しさん
NGNG0140デフォルトの名無しさん
NGNG(cons 1 (cons 2 nil))と同じ。
誤解があるのかもしれないので言っておくと、
ドット対表現のピリオド'.'は小数点のそれとは何の関係もない。
で、
((10.20) (30.40)) を作る場合、
(list (cons 10 20) (cons 30 40))
または、
(cons (cons 10 20) (cons (cons 30 40) nil))
0141デフォルトの名無しさん
NGNG付けたし。
cdrがpairやnilでない「行儀の悪いリスト」でも
ドット対表現で出力される。
(cons 1 (cons 2 (cons 3 4))) => (1 2 3 . 4)
(list* 1 2 3 4) => (1 2 3 . 4)
(1 2 3 . 4)はドット対であらわすと (1 . (2 . (3 . 4)))
0142135
NGNG形式的にそのように出るということでしょうか?
ただ、不思議なのは 上記 1 2 (3 4)でもよさそうなものなのに
なぜ cdr 側が (1 2) 3 4 でしょうか?
0143デフォルトの名無しさん
NGNG>ただ、不思議なのは 上記 1 2 (3 4)でもよさそうなものなのに
>なぜ cdr 側が (1 2) 3 4 でしょうか?
意味わからん
0144135
NGNG参考にさせていただいてちょっと考えてみます
listは純リストを作成する関数ですよね?
ですので list 1 2 はセル的に
[1][→] [2][nil]ですよね
(1 2) 3 4はどのようなセルになるのでしょうか?
勉強し始めの初心者ですみません
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNG((1 2) 3 4)
のこと?
ドット対であらわすと((1 . 2) . (3 . (4 . nil)))
作る場合は(list (list 1 2) 3 4)
または(cons (cons 1 (cons 2 nil)) (cons 3 (cons 4 nil)))
それとも括弧で括ってないって事は、多値のことかな
0147146
NGNGまちがい。
ドット対であらわすと((1 . (2 . nil)) . (3 . (4 . nil)))
0148デフォルトの名無しさん
NGNG((1 2) 3 4) は ((1 . (2 . nil)) . (3 . (4 . nil)))
0149135
NGNGその場合セルは
[*1参照][*2参照]
*1[1][*3参照]
*3[2][nil]
*2[3][*4参照]
*4[4][nil]
ですよね? 1.2のペアと3.4のペアがある
その時なぜ 1.2のペアだけ ( )が付くのでしょうか?
0150デフォルトの名無しさん
NGNGこれでどう?等幅フォントでみてね。
┌─┬─┐ ┌─┬─┐ ┌─┬─┐
│││─┼→│││─┼→│││/│
└┼┴─┘ └┼┴─┘ └┼┴─┘
│ ↓ ↓
│ 3 4
↓
┌─┬─┐ ┌─┬─┐
│││─┼→│││/│
└┼┴─┘ └┼┴─┘
↓ ↓
1 2
0151デフォルトの名無しさん
NGNGルートのconsのcarにlistつくってるからだよ
([]←この表記ほとんど意味無いからやめたほうが良いよ)
0152デフォルトの名無しさん
NGNGうーんと、
(car '((1 2) 3 4))
(1 2)
(cdr '((1 2) 3 4))
(3 4)
(car '((1 2) (3 4)))
(1 2)
(cdr '((1 2) (3 4)))
((3 4))
だよ?
0153デフォルトの名無しさん
NGNG> その時なぜ 1.2のペアだけ ( )が付くのでしょうか?
リストはよく使うデータ構造なので、いつも (a . (b . (c . nil))) と書く
のは大変だから (a b c) と書けるようにしようと決めただけ。
自分でオブジェクトを文字列に変換するプログラムを作ってみろ。
0154デフォルトの名無しさん
NGNG「なんでcdrだけ特別扱い?」みたいな(w
0155デフォルトの名無しさん
NGNGcdr のどこらへんが特別扱いっぽいのでしょう?
うにゃ?
0156デフォルトの名無しさん
NGNGcarはほとんどがatomで、cdrはpairかnil
引数や内部イテレータもcdrの方向だし。
特別扱い、というかcar/cdrの使い道が異なる。
0157デフォルトの名無しさん
NGNG((((((nil . f) . e) . d) . c) . b) . a)
0158デフォルトの名無しさん
NGNG使い道が異なるってことで納得。
>>157
前から順番に使っていくってことも先入観というか、固定観念ってこと
ですね。うっかり、当然とか思ってしまいそうですけど。
0159135
NGNGまず、前提として (1.2) 3.4は要素数は3ですよね?
148,150さんの構造の場合は2分木的に綺麗に分かれますから
(1.2) (3.4) のように要素数2個のように綺麗に分かれないのでしょうか?
(cons (cons (1 2) cons (3 4))のようの cdr部 cons (3 4)が
car 部cons (1 2)と同じように書いても
>>153さんのゆうとおり cdr 部は自動的に展開して
(1.2) (3 (4.nil))のようになるのでしょうか?
0160135
NGNG”なんで 呼んでもいない関数が実行されるんだ!!”
と言ってるのと同じ気はしますが、Liaperにとっては
空気のように当然のことだと
0161135
NGNGcdr部はnilに突き当たるまで展開されるんですね。
ありがとうございました。
0162デフォルトの名無しさん
NGNG> すみません 私の質問がまとを得ていないようで
> まず、前提として (1.2) 3.4は要素数は3ですよね?
えーと、要素数ってのがなにのことをいているのかと。
全部の cons セルの数のことなのか、なんなのか。
あと、1.2 って書くと小数みたいであれなんで、"." の前後には
空白を書いておかないとだめだと思うんです。
> (cons (cons (1 2) cons (3 4))のようの cdr部 cons (3 4)が
は、(cons (cons 1 2) (cons 3 4)) ですよね。
cons は cons セルの car 部と cdr 部に他のセルへのポインタをセットする
感じだと思います。
0163デフォルトの名無しさん
NGNG(equal (cons (cons 1 2) (cons 3 4))
'((1 . 2) . (3 . 4)))
=> t
0164135
NGNGすみません気をつけます。
もともとは car部と cdr部に同じように
セルのポインタをセットするのになぜ
cdr部だけ展開されるのかなっと
やっとわかりました cdr部は全ての要素まで
伸びるんですね
0165匿名λ式
NGNG> もともとは car部と cdr部に同じように
> セルのポインタをセットするのになぜ
> cdr部だけ展開されるのかなっと
そういう習慣だからです。
要素をcar, 残りのリストをcdrに、というコンスセルを使ったリストの仕様は、
コンスセルそのものの仕様とは無関係です。
ただし、そうでないLispは存在しません。
コンスセル: cons, car, cdr, null, consp, nil
リスト: memq, list, append
で、リストはコンスセルを使って構築されています。
(1 . (2 . (3 . nil)))→(1 2 3)は、この状況におけるsyntax sugarに過ぎません。
0166デフォルトの名無しさん
NGNGコンスセルかリストかで分けるならリストになるはずだし。
0168デフォルトの名無しさん
NGNG0169名無しさん@Emacs
NGNG=> t
だよ
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNGこれを再帰呼出しした時にはどのように
扱われるのでしょうか?
0172デフォルトの名無しさん
NGNGM-x disassemble 使え。
0173デフォルトの名無しさん
NGNG0174名無しさん@Emacs
NGNGM-x shell のプロンプトに使われていて、C-a の挙動に影響しているのですが
詳しく知りたいのです。
0176名無しさん@Emacs
NGNG(defun hoge (dir)
(interactive "fDirectory: ")
(message "Directory=%s" dir))
と書いてあるとしますよね。これを評価して
M-x hoge で ~/elisp/ RET すると ~/elisp/ ディレクトリではなく
~/elisp/hoge.el というファイル名が渡ってしまって困るのですが、これはそ
ういうものなんですか?
0177デフォルトの名無しさん
NGNG> (interactive "fDirectory: ")
でなくて
(interactive "DDirectory: ")
では?
0178リスプ?
NGNGおねがいします。
0179名無しさん@Emacs
NGNGあ・・・そうですね。本にそう載ってたんですが。
単純なこと聞いてすみません。
>>178
何をどう sort したいのか書かなきゃ答えようがないのでは?
# どっちにしても私も分からないけど。
0180リスプ?
NGNG引数にランダムな数字のリストをおいたとき、値として大きい(小さい)順に
並べ替えられたリストが出力されてくるようなプログラムを教えてもらいたいのです。
よろしくおねがいします。
0181デフォルトの名無しさん
NGNGsort とか stable-sort とか?
(sort '(10 9 8) '<)
=> (8 9 10)
(sort '(8 9 10) '>)
=> (10 9 8)
0182教えてください!
NGNG(dufun sort ・・・)見たいな感じで教えてもらえないでしょうか?
おねがいします。
0183デフォルトの名無しさん
NGNGや、もとからあるでしょ。
0184教えてください!
NGNGけど、ぜんぜんわからなかったので。
0185名無しさん@Emacs
NGNGほーこんなこともできるのかぁって感じですごく(・∀・)イイ!!
それだけ。
0186デフォルトの名無しさん
NGNGつーか sort なんて簡単でしょ?
;; しかし elisp でやれとは、物好きな奴がいたもんだな。
0187デフォルトの名無しさん
NGNGそれとも セクース しようぜ!でしょうか。
0188デフォルトの名無しさん
NGNGedebug 中に g で Go! したら Meadow さんはお亡くなりになった。(-_-)ウツダ
0189デフォルトの名無しさん
NGNG逝ってきます。
0191デフォルトの名無しさん
NGNGobject が sex であるかどうかを調べます.
0192「リスト遊び」
NGNG0193デフォルトの名無しさん
NGNG0194名無しさん@Emacs
NGNG> 上の教えて君じゃないがクイックソートを書いてみようとした。
リストで qsort って書けますか?
やはり一度、配列に変換していますか?
0195名無しさん@Emacs
NGNGだれか翻訳してる?
俺がやるとしたら、前のやつを利用してもいいの?
あのマニュアルって GPL なの?
やり始めた後で出版されると、徒労だなー。
0196デフォルトの名無しさん
NGNG元のドキュメントが GPL なんで、翻訳も GPL だよん。
ソースは ftp.ascii.co.jp/pub/GNU や openlab.ring.gr.jp/gnujdoc あたりに。
0197名無しさん@Emacs
NGNG漏れはイッテヨシだった…
あとで存在を知った邦訳のオンラインマニュアルのが数倍つかいやすいでやんの
0198Emacs-Lisp厨
NGNGd:/hoge/info にある emacs-[0-9]+ というファイルを emacs-ja-[0-9]+ とい
う名前でコピーするプログラムを書いてみました。
わざわざ elisp で書く必要もないのですが。
簡単に書けるかと思ったら、書いてみると意外に難しかった・・
こうやったらもっと簡単に書けるぞ (゚Д゚)ゴルァ
というツッコミをお待ちしています。
(let ((files (directory-files "d:/hoge/info"))
old-file new-file
rename-list)
(save-excursion
(set-buffer (get-buffer-create "*tmp*"))
(erase-buffer)
(while files
(setq old-file (car files))
(if (string-match "emacs-\\([0-9]+\\)" old-file)
(progn
(setq rename-list (cons old-file rename-list))
(insert old-file "\n")))
(setq files (cdr files)))
(goto-char (point-min))
(setq rename-list (nreverse rename-list))
(cd "d:/hoge/info")
(while (re-search-forward "emacs-\\([0-9]+\\)" nil t)
(setq new-file (concat "emacs-ja-"
(buffer-substring (match-beginning 1)
(match-end 1))))
(copy-file (car rename-list) new-file t)
(setq rename-list (cdr rename-list)))))
0199Emacs-Lisp厨
NGNG# あとsave-excursion の使いかたとかいまいちよくわかっていないのですが…
0200デフォルトの名無しさん
NGNG(mapc
(function (lambda (file)
(let ((new-file (replace-in-string file "emacs-" "emacs-ja-" t)))
(copy-file file new-file t))))
(directory-files "d:/hoge/info" t "\\`emacs-\\([0-9]+\\)\\'" t))
いちいちバッファに書く必要なんぞない。
0201Emacs-Lisp厨
NGNGやっぱりこれくらい単純になるんですね。replace-in-string というのも初め
て見ました。勉強しに逝ってきます。
0202デフォルトの名無しさん
NGNG`mapc' is a compiled Lisp function
(mapc CL-FUNC CL-SEQ &rest CL-REST)
Documentation:
Like `mapcar', but does not accumulate values returned by the function.
結果をリストにする必要がないから若干効率がいい。
0203デフォルトの名無しさん
NGNGせたりパターンを指定したりできることくらいすぐ分かるはずだ。
標準だったらC-h fでできるからこれくらい覚えとけ。あとC-h vモナー。
0204Emacs-Lisp厨
NGNGdescribe-function はしたんですが、mapcar と mapconcat しかなかったので。
何でだろ…
0205デフォルトの名無しさん
NGNG> 結果をリストにする必要がないから若干効率がいい。
嘘書いちゃだめだよ。lisp/emacs-lisp/cl-extra.el 見てみれ。
emacs 21のbuilt-inのmapcならその通りだけど。
>>204
(require 'cl)
あまりお勧めしない。
0206Emacs-Lisp厨
NGNGっと思ったら >>205 の (require 'cl) でできました。
cl ってことは Common Lisp の関数なんですかね。
0207デフォルトの名無しさん
NGNG(require 'cl) してまで使う必要ないだろ。mapcar 使っとけ。
0208Emacs-Lisp厨
NGNGはい、これから使うときは mapcar 使うつもりです。
ところで replace-in-string って XEmacs にしかないんですかね?
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNG0211デフォルトの名無しさん
NGNGあります? calender とか使ってできる方法があれば教えてください。
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNGregion 間で M-=
lisp でのやり方は知らん
0214211
NGNGinteractive にではなくて elisp プログラムとして使いたいのですが。
自分で書くとしたら…
1. (current-time-string) で今日の曜日と日付をとってくる。
2. その週の月曜日が何日かを出す。
3. 先週の月曜日が何日かを調べる。
って感じになりますかね。月の始めの場合の処理が難しそうなんでちょっと辛
いかなぁ。
;; メイルのテンプレート用に勉強のために作るつもりです。
;; 勉強なんだから苦労してでも作れって言われそうですが、なるべく簡単な
;; 方法でやりたいので。(それも自分で考えろ (゚Д゚)ゴルァ だけど)
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNG私なら…
1. (nth 6 (decode-time)) で今日の曜日を取得
2. 先週の月曜日が何日前になるかを算出
3. (decode-time) の DAY を n 日前にして encode-time
;; DAY が 0以下でもちゃんと処理してくれる:-)
必要に応じてまた `decode-time' するなり、`format-time-string' なり。
calendar 使うなら…
(calendar-gregorian-from-absolute
(calendar-dayname-on-or-before
1
(- (calendar-absolute-from-gregorian (calendar-current-date)) 7)))
0218211
NGNG週間作業報告を書くのに先週一週間分の日付を入れなきゃいけないので(w
今は手作業で入力してるんで面倒なんですよね。
>>216
ありがとうございます。参考になりました。encode-time と decode-time 使っ
てやってみます。
>>217
わかりました。これから lisp のソースもいろいろ読んで研究します。
;; TAGS ファイルも作れたし。
0219デフォルトの名無しさん
NGNG0220名無しさん@Meadow
NGNG倉庫行き回避に、先週の月曜はいつだ、を作ってみた。
いきなり、土日の先週の月曜っていつだ?って考え込んだ。
元のお題が「週間作業報告を書くのに先週一週間分の日付を入れなきゃいけないので」
なので、土日なら同じ週の月曜としてみた。
月曜 〜 金曜 → 先週の月曜
土曜 〜 日曜 → 今週の月曜
効率より、修正のしやすさをちょっと考慮。
(let* ((today (decode-time
;;(encode-time 0 0 0 Day Month Year)
))
(day (nth 3 today))
(month (nth 4 today))
(year (nth 5 today))
(dow (nth 6 today)) ;0(Sun)-6(Sat)
(dst (nth 7 today))
(zone (nth 8 today))
days-before)
(cond
((= dow 6) ;Sat
(setq days-before 5))
((zerop dow) ;Sun
(setq days-before 6))
(t ;Mon - Fri
(setq days-before (+ 7 (1- dow))))
)
(format-time-string
"%Y/%m/%d"
(encode-time 0 0 0 (- day days-before) month year dst zone)))
0221デフォルトの名無しさん
NGNG0222名無しさん@Emacs
NGNG質問者です。
最終的に先週の日付を求める部分はこうなりました。
(defun my-last-week-day (n)
(let* ((d-time (decode-time))
(youbi (nth 6 d-time)))
(setcar (nthcdr 3 d-time)
(- (nth 3 d-time) 7 (- youbi n)))
(decode-time (apply 'encode-time d-time))))
(format-time-string
"%Y/%m/%d"
(apply 'encode-time (my-last-week-day 1)))
=>"2002/01/28"
考えてみたら月曜だけじゃなくて先週一週間分の日付が必要だったので、
n が 1 の時は月曜、2 なら火曜、、、の日付を返すようにしました。
;; 普通は 0 から?
変数名、関数名は適当です(w
修正しやすいかどうか分かりませんが、今見たら自分でもちょっと…(w
;; ズルをして某板でも質問をしたかもしれません(-_-)ウツダ
0223名無しさん@Emacs
NGNG土日に使うことはないかなぁと思って。
0224デフォルトの名無しさん
NGNGhnf-float-time で浮動小数点型にして、適当な演算後に hnf-time-float で
リストに戻しているが、そこの処理のおかげで Nemacs で動かないという(藁
そういえば Emacs21 には float-time という built-in が追加されたけど、
time-float はないのよね。
0225デフォルトの名無しさん
NGNGフォローありがと。
0226225
NGNG0227名無しさん@Meadow
NGNG#もう落としてしまった方がいいんだろうか?
おまけで、遅い quick sort。
ほとんどパクリだが stable にしてみた。
(defun qsort2 (cmp l)
(let ((q2 (lambda (l1 m l2 l)
(if l
(if (funcall cmp (car l) m)
(funcall q2 (append l1 (list (car l))) m l2 (cdr l))
(funcall q2 l1 m (append l2 (list (car l))) (cdr l)))
(append (funcall q1 l1) (cons m (funcall q1 l2))))
))
(q1 (lambda (l)
(if l
(funcall q2 nil (car l) nil (cdr l))
)
)))
(funcall q1 l)
))
;;使い方
(qsort2 'car-less-than-car '((4 . "4") (2 . "2") (1 . "1")
(2 . "3") (3 . "3") (5 . "5") (1 . "2")))
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG(defun foo ()
(setq x (+ x 1))))
(foo) ==> Error: Symbol's value as variable is void: x
ってなるけど elisp てこういう仕様なの?Common-Lisp だと下のように
なるんだけど。
(foo) ==> 1
(foo) ==> 2
:
0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNGそんなの作ってるなんて聞いたことないし。自分で作れてってことだね。
これは。
それにしてもUNIXな人たちはXMLになんであんなに無関心なんだ?
0232名無しさん@XEmacs
NGNG(lexical-let ((x 0))
(defun foo ()
(setq x (+ x 1))))
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNGなるほど、ありがとう。
0235デフォルトの名無しさん
NGNGlexical scope で function を bind したいんですが、
何か方法ないでしょうか。
つまり一時的に、既存の関数の動作をかえるような
ことがしたいんです。
cl には lexical-let があるんですが、
value cell の方は lexical になるものの、
function cell の方は面倒見てくれないようです。
なぜそんなことをしたいかというと、
普通の advice では変更が無理な状況があって、
関数ごと書きかえないといけないんですが、
長々と余計なコードを .emacs に書きたくなくて。
advice でできれば数行ですむのに、
関数を丸ごと書くと百行単位になってしまうんです。
ちなみに cl には flet という便利なものも
あるんですが、残念ながらこれは lexical では
ない様子。lexical-flet みたいなのがあればいいのに。
0236235
NGNGその後 labels という lexical な flet があることがわかりましたが、
結局 advice では使えませんでした。
(defadvice my-test (around test)
(labels ((car ()
(my-car)))
ad-do-it))
こんな風にすると ad-do-it 内では car の bind が無効に
なるし(当り前ですが)、また ad-do-it を展開するような
macro を使っても、advice が ad-do-it を有効にするのは
関数の実行時のようなので、結局無理ということがわかりました。
もともと advice は lexical な変数や関数を考えて作ってないので、
仕方ないのですが。
0237名無しさん@Meadow
NGNG>長々と余計なコードを .emacs に書きたくなくて。
>advice でできれば数行ですむのに、
本当にこっちの優先度が高いのなら、元の関数をバイト・コンパイルしなけれ
ばなんとかできそうな気もするが。
0238235
NGNG自分で advice もどきの macro を作って、
一応できるにはできたのですが、(byte-compile してても OK)
しかしそうすると advice に対応できなくなって
汎用性がなくなるので、結局使うのはやめました。
参考までに書くと、こんな感じのやつ。
hoge を advice すると、結局使えなくなります。
(defmacro new-hoge ()
`(labels ((new-func () old-func))
,(symbol-function 'hoge)))
0240名無しさん@Meadow
NGNGそういえば起動時 loading adviceってあるな。
hook みたいなもんかな。
0241デフォルトの名無しさん
NGNGadvice は既存の関数を書きかえる時に便利だよ。
とりあえず elisp の info でも読みな。
0242デフォルトの名無しさん
NGNG(require 'hoge))
と
(require 'hoge)
はどのように効果が違うのか誰か教えてくだされ。
0243読まずにカキコ
NGNG上だと(require ..)の結果を実行してしまわないか?
0244242
NGNG> 上だと(require ..)の結果を実行してしまわないか?
どちらでも実行(というか評価)されるんじゃないのですか?
0245デフォルトの名無しさん
NGNG場合による。
0246名無しさん@Meadow
NGNG絶対無理?
0247デフォルトの名無しさん
NGNGつーかemacsのマニュアルみてよ
多分無理だと思うけど
0248Lisp 1.5
NGNG無理。process filter使って複数のprocess/network stream扱うのは可能。
0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNGあるバッファでだけ関数をおきかえたいっての。
できたら少し便利かも??
0251名無しさん@Emacs
NGNGあるモードでだけおきかえる、ってのじゃだめなの?
0252デフォルトの名無しさん
NGNG0253デフォルトの名無しさん
NGNG0254名無しさん@Emacs
NGNGPerl でいうところの、
$data{'name'}='Mona';
$data{'age'}=14;
$data{'prop'}='AA';
push(@list,\%data);
みたいなデータ構造をEmacs Lispでやるには
どうしたらいいですか?
0255デフォルトの名無しさん
NGNG(setq data '((name . "Mona") (age . 14) (prop . "AA")))
追加するときは
(setq data (cons '(hoge "foo") data))
=>((hoge "foo") (name . "Mona") (age . 14) (prop . "AA"))
;; あんま自信なし(汗
0256デフォルトの名無しさん
NGNG16進数を10進数で表示させる関数を作ろうと思いました。
が、引数で '20'が渡ってきたとして、
?\x20を生成&評価させることってできるのでしょうか?
0257デフォルトの名無しさん
NGNGお望みのままに処理すると
(eval (car (read-from-string (concat "?\\x" (number-to-string 20)))))
こうかな? マクロにすると
(defmacro my-dec-to-hex (num)
(car (read-from-string (concat "?\\x" (number-to-string num)))))
こんな感じ。でも ?\x20 を評価して 32 になるのは FSF の場合であって
XEmacs だとダメです。 それに read-from-string とか使っててダサいな。
誰かまともなの示して。
0258デフォルトの名無しさん
NGNGを
(read [string])
でいいのでは?
どうせエラー処理しないなら
0259257
NGNGところで read-from-string だとどのようにエラー処理ができるのか
Info 読んでもよく分らん。よろしければ教えて。
0260デフォルトの名無しさん
NGNG;; とか思うのは俺だけ?
0261デフォルトの名無しさん
NGNGできました。ありがとうございます。
\?\xってやってできなかったので、
Cみたいな関数つくってでガマンしてました。(w
0262256,261
NGNGこんな感じにしてみました。
ツッコミあったらよろしくお願いします。
(defun dec-to-hex-or-hex-to-dec (num)
"10進数->16進数, 16進数->10進数"
(interactive "sNum?: ")
(if (string-match "0x" num)
;; 16進数->10進数
(message "%s is %d." num (read (concat "?\\x" (car (split-string num "0x")))))
;; 10進数->16進数
(let ((int (string-to-int num)))
(message "%d is 0x%x." int int))))
0263258
NGNGふたりともとってもいい人というか、関係ない文字を渡されたときのこととか考えてないのね。
エラー処理とは、そういうことを指してました。
ちなみに、elispレベルのエラー処理をするなら、condition-caseで引っかけるのが普通でしょう。
>>262
せっかくなので、ちょっとだけ。
機能的には、大文字にも対応できるようになったはず。
(defun dec-to-hex-or-hex-to-dec (num)
"10進数->16進数, 16進数->10進数"
(interactive "sNum?: ")
(let ((case-fold-search t))
(if (string-match "^0x\\(.+\\)" num)
;; 16進数->10進数
(message "%s is %d." num (read (concat "?\\x" (match-string 1 num))))
;; 10進数->16進数
(let ((int (string-to-int num)))
(message "%d is 0x%x." int int)))))
0264257
NGNG> >>256,257
> ふたりともとってもいい人というか、関係ない文字を渡されたときのこととか考えてないのね。
> エラー処理とは、そういうことを指してました。
> ちなみに、elispレベルのエラー処理をするなら、condition-caseで引っかけるのが普通でしょう。
うん、だから condition-case は使うとして、エラー処理における read-from-string の
read に対する優位性について知りたいのです。よろしければ。
あと、XEmacs は (char-to-int (read "?\\x10")) とすれば 16 が返ります。
;; int-to-string は number-to-string のエイリアスなのに、char-to-number がない
0265258
NGNGsignalが発生するような場合ではどっちを使っても大差ない。
read-from-stringに渡せる2つの追加パラメータと、返り値のcdrの情報が利用できるだけです。
readだとall or nothingなので。
0266デフォルトの名無しさん
NGNG>?\x20を評価させると 32になるので、
とあるけど、これはあくまでchar型を16進表示したものだから、
16進数を10進数に変換させるには不適当。
(char-to-int (read "?\x200")) ;; XEmacs なもんで(^^;
-> 32
(read "#x200") ;; こっちが正解
-> 512
0268256,261,262
NGNGmatch-string()なんてのもあったのか。サンクス。
>>266
XEmacsは使ってないのですが、とりあえずメモっておきます。
サンクス
0269デフォルトの名無しさん
NGNG(current-buffer) を見て分岐する様な関数に置き換える、とか…
…何か問題が出そうで恐いけど。
0270デフォルトの名無しさん
NGNG関数だとやっかいそうな気がするね。
まぁ、ふつう advice で切り分けるんだと思うけど。
ところで2重、3重に advice が重なると、それらの適用順とか
どうなるんだろう。前から気にはなってるが調べる気力がない。
;; それ以前に知力もない
0271デフォルトの名無しさん
NGNGたぶん高速化のために inline 展開したいような関数とか、
(nth 3 list) だけなようなものに使うんだろうと思うけど、
そこそこの size のある関数で、それほど速度も要求されてなさげな
ものでも defsubst されてるのを見ると分らなくなってきました。
0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNGhttp://www.sr3.t.u-tokyo.ac.jp/~takekawa/gnujdoc/emacs-20.6/emacs-ja_toc.html
まぬある嫁
0276Lisp 1.5
NGNGsplit-window-vertically
M-x help-for-help k C-x 2
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNGUNIX板の方が盛況だね。
あっちはemacsが普段の環境って人もいるし。話も出やすいんでしょう。
0280KOKUYO
NGNG第1引数を探索して取り除くように拡張した関数はどうやって
作ればいいんですか?
0281デフォルトの名無しさん
NGNGkazu さんの「リスト遊び」を読んでみると楽しいよ
0282デフォルトの名無しさん
NGNGマルティは市ね
0284名無しさん@Emacs
NGNG'(progn
(fset 'old-homo
(symbol-function 'homo))
(defun homo ()
・・・・・・・・・・・)))
何てしたときに、
homoのデバッグが出来ません。
なんか方法があるの?
0285デフォルトの名無しさん
NGNGデバッグできないとは homo() を後から edebug しようにもできないのか?
にしても、homo() だなんて、レス付けるのも嫌な関数名にしやがって。
0286Lisp 1.5
NGNG「homoをbreakpointに指定したのに止まらない。」
とお前は言いたいのだろう。
debugger何使ってるの? edebugでも駄目か?
0287284
NGNG>> 286
.emacs.el内で、homoをoverwriteして
その中でbreakpoint設定してます。
edebugです。
homo内で止まってくれないんです。
0288Lisp 1.5
NGNGちゃんと調べずに聞き返すけど、
edebug.elじゃなくて、debug.elってことはない?
debug.elはsymbol-functionを書き換えるから。
0289名無しさん
NGNGLISP Scheme Part5
http://pc.2ch.net/test/read.cgi/tech/1023091882/260-
0290名無しさん
NGNG0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNG同じというか。現状で(学問的に)OSがどう定義されているのか
不勉強で知らないのですが、使った感じはOSそのものです。
Emacs上で動くアプリケーションは、ネットニュースリーダー、
WWWブラウザ、2chブラウザ、エディタ、統合開発環境など。
その他、だれかが
「これはEmacs Lispでは書けないな」とどっかでelisperに言ってしまうと、
それがどこからともなく、 comp.emacs.sources (かな)
にでて来るかもしれないというのは面白いよね。
ここらへんで、「おまえOSになりたいとコソーリ思っているのだろう!」
とEmacsを嫌いになる人もいるけど、これは考え方の違いだから
しかたないよね。
0293名無しさん
NGNG0294デフォルトの名無しさん
NGNG窓口はシェルだけど、じっさいに欲しいものがあるのは
その奥にあるOSという感じで言ってみたんだけど。
0295デフォルトの名無しさん
NGNG0296名無しさん
NGNG0297デフォルトの名無しさん
NGNGにたぶんそんな感じのものがあるとおもいます。
0298デフォルトの名無しさん
NGNGelispをやるか。寝言みたいなこといってすまん。
0299名無しさん@カラアゲうまうま
NGNG0302名無しさん@カラアゲうまうま
NGNG0303デフォルトの名無しさん
NGNGストレス解消してる人って結構多いぞ。俺はソフトウェア
関連の職についているけど、みんななんていうか、
自分の思いどうりに開発できる俺プロジェクトみたいなの
持っている人ってけっこういるぞ。
0304名無しさん@カラアゲうまうま
NGNG0305デフォルトの名無しさん
NGNGまぁシェアウェアにするのも一つの手かもしれないけど、
ストレス解消で書いたものでサポートまでするのめんどうだ
っていうんで、無料で配っちゃっている友だちもいるけどな。
0306デフォルトの名無しさん
NGNGまともじゃないかもしれないが、日本のソフトウェア界って、自慢システムみたいな
のはないのかな? いや、なんていったかなrubyの松本さんが認定されたみたいな
企画があった気がしたんだけど、傲慢ないいかただけど「そりゃそうだろうけど、
釣れるとかいう言葉を(俺は今なら別に全然平気なんだけど)使ったら
侮辱ととるすごく若い優秀な人がいるんじゃないの?」と思っちゃうんだよね。
いやちょっとアメリカにかぶれていんだけど、アメリカはなんつーか自慢したもの勝ち
みたいな感じなんだよね。別にそれが全然すごいことじゃなくても、なんていうか
あ、今回の宝くじははずれでしたみたいな感じで、どんどんどんどんやってみると
いうか、それで、その宝くじがハズレでも、みんな「ああ残念だけどハズレちゃった
ね」みたいなかんじで、「じゃもしかしたら次は当たりかもね、ガンバレヨ!」って
感じかな。そんで、俺は意識したことがないんだけど、よくよく考えてみるとRMS
つまりFSF(フリーソフトウェアファウンデーション)を創設した
リチャードストールマンが日本の偉い人に「日本に来てやってみない?」と
誘われたんだけど「僕のいるばしょは日本にはないような気がする」といったって
何か雑誌で読んだのだけど、もしかしてこれってそういう感じなのかなと、
おこがましくも感じてしまいました。
0307306
NGNGという人はたくさんいるだろうけど、雰囲気として勝ったもんがちみたいな感じね。
そんでRMSみたいに「そりゃ金もたくさんありゃ面白いかもしれねーけど、
プログラミングを究めたほうがもっとおもしろいぜ!!」みたいな人もいると。
でもRMSは最近プログラミングしてんのかな?
0308デフォルトの名無しさん
NGNGしかし、そこまで視野を広げるって凄いな。
0309デフォルトの名無しさん
NGNG感じかな。
0310名無しさん@カラアゲうまうま
NGNGrubyのって、IPAの未踏ソフトウェア創造事業とかいうやつかな。
0311デフォルトの名無しさん
NGNG金銭的に厳しいけど志があるハッカー(すごいプログラミングをする人という意味)
を最低限救済するシステムとしては、機能してるとおもうけど。
0312311
NGNG0313名無しさん
NGNG0314ななしさん@お腹いっぱい
NGNGどのような方法があるのでしょうか?
dynamic loading というやつ(←まだ内容が良く分かってない)
以外にもやり方があるのでしょうか?
0315ななしさん@お腹いっぱい
NGNGhttp://www.alc.co.jp/
(defun eijiro (pattern &optional mode)
"Look up PATTERN in the online Eijiro dictionary.
MODE should be \"ej\" for English-Japaneseor
or \"je\" for Japanese-English."
(interactive (lookup-pattern-input))
(let ((cgi "http://home.alc.co.jp/db/owa/eijiro_red2")
(word-prefix "word_in=")
(mode-prefix "type_in=")
;(url)
;(hexified-pattern)
(top-margin 15))
(or mode (setq mode "ej"))
(setq hexified-pattern (url-hexify-string pattern))
(setq url (concat cgi "?" word-prefix
hexified-pattern "&" mode-prefix mode))
(w3-fetch url)
(message (concat "Looking up : " pattern ))
(set-window-point (selected-window) (point-min))
(scroll-up top-margin)))
英日/日英 自動切換えはまだです…
(やりたいという意思表示は &optional mode あたりに…)
xemacs 21.4 (patch 6) でしか確認してません。
0316ななしさん@お腹いっぱい
NGNG0317デフォルトの名無しさん
NGNG「自慢の.emacsを貼り付けよう」スレって知ってる?
自動切換え可能になったら是非自慢して下さい。
0318ななしさん@お腹いっぱい
NGNG0319英辞郎 on the Web
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1004551074/317
http://pc.2ch.net/test/read.cgi/linux/1021865124/227
0320名無しさん@Emacs
NGNG7行で書けるようなネタ無いー?
0321名無しさん@Emacs
NGNGまともに役に立ちそうな使い方が思いつかないけど。
(defun ゚Д゚ () (message "ゴルァ!")) ;; ここで C-j
゚Д゚
(゚Д゚) ;; ここでもういちど C-j
"ゴルァ!"
0322デフォルトの名無しさん
NGNG(defun ・∀・ ()
(goto-char (1- (point)))
(princ "イイ!!")
(newline))
0323デフォルトの名無しさん
NGNG0324デフォルトの名無しさん
NGNGところでC言語で
#define _
for(;_;){
}
で無限ループってのがあったね。等幅フォントだと泣いている顔に見える。
0325デフォルトの名無しさん
NGNG入力がめんどくさい。
0326名無しさん@カラアゲうまうま
NGNG逆か?
0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG↓現状、こういうことしているんですが。。。
(defvar alist '(("111") ("222") ("333") ("444") ("555")))
(("111") ("222") ("333") ("444") ("555"))
(let ((num 0))
(mapcar
(lambda (mem) (setq num (1+ num))) alist)
num)
5
length
0331デフォルトの名無しさん
NGNG(defun length (x)
(cond ((eq x ()) 0)
(t (+ 1 (length (cdr x))))))
0333デフォルトの名無しさん
NGNGint length(obj x)
{
int i = 0;
while (pair(x)) {
i++;
x = cdr(x);
}
return i;
}
0334デフォルトの名無しさん
NGNGbuilt-in関数はCで書いてある。
引数がリストの時の処理はだいたい↓みたいな感じ。
(defun my-length (list)
(let ((num 0))
(while list
(setq num (1+ num)
list (cdr list)))
num))
>>331
それだと長いリストを渡すとstack overflowしちゃう。
elispは末尾再帰もしてくれないので、リスト処理はループに展開するのが
定石っぽい。
0335デフォルトの名無しさん
NGNG(do ((a alist (cdr a))
(i 0 (+ i 1))
((null a) i))
0336329
NGNGサンクス。勉強になりますた。
関係ないけど、最近Cでも (if ... とか
variable = if(...).. とか書きたくなってしまう。(-_-)ウツダ
0337デフォルトの名無しさん
NGNG(require 'cl) すれば使える。
0338デフォルトの名無しさん
NGNGhttp://www.paulgraham.com/thist.html
>I asked RMS when he was implementing emacs lisp why
>it was dynamically scoped and his exact reply was that
>lexical scope was too inefficient.
0339デフォルトの名無しさん
NGNG0340Lisp 1.5
NGNG「静的scopeは非効率すぎー」とはっきり言うたよ。ほんまやよ。
0341_
NGNGってできますか?昔VisualStudioかDelphiのエディタで重宝した動きなんですけど・・・
0342デフォルトの名無しさん
NGNG(defun my-back-to-indentation-or-beginning-of-line ()
(interactive)
(let ((p (point)))
(back-to-indentation)
(if (= p (point))
(beginning-of-line))))
こんな感じでどう?
0343Lisp 1.5
NGNGう〜ん「静的scopeじゃあうまくいかんのよ」くらいかな?
"window/buffer/frame local variable"なんかは動的scopeの方が親和性高いし。
0344デフォルトの名無しさん
NGNGうーん、そうかなあ。
(let ((var 'hoge)) (with-current-buffer buf (func var)))
とかvarがbuffer localなのを忘れてやっちまった場合、なんで挙動不審なの
か悩むことになる。
ところで、CVSをのぞいてみると、lexbindってブランチがあって、
lexical scopeもbuilt-inでできるように作業してるみたい。
0346デフォルトの名無しさん
NGNGbuffer とかだけじゃなくて、他の物にも local な変数が欲しくなったりするし…
global の変数の方が、動的の恩恵を受けてそうな気がするな…
let で気軽に束縛して、引数みたいに使えるから。
…本当は、引数にした方が良いんだろうけど。
0347真性厨
NGNG(defun get-token ()
(defun hogehooloop (s)
(let ((ended nil))
(while (not (eobp))
(let ((c (char-befor)))
(if
(or (= ?\r c) (= ?\n c) (= ? c) (= ?\t c))
(setq ended s)
(setq s (cons c s))))
(forward-char 1))
ended)
(let ((chars (hogehooloop '()))
(and chars (getStringFromList (reverse chars)))))))
0348デフォルトの名無しさん
NGNGえーと…これって、 elisp なんだよね?
・内側の defun って、多分 local にならないと思う。
こう云う使い方なら、 cl の flet とかを使う方が良いんじゃないかな…
・hogehooloop では、引数の s を書き換えてるのに、返してるのは ended だね…
buffer の最後迄走査して、空白とかを除いて、 list にしてるけど…
それは普通、 token って呼ばなそう…
もしかして、 ended も while の条件だったり、返す値が違ったりしない?
・細かい事だけど、 char-befor -> char-before だと思う。
・最後の and は、 when を使う方が分かり易いんじゃないかな。
・あと、 getStringFromList って、標準の関数?
見付からなかったけど…
0349真性厨
NGNGはい、
×(while (not (eobp)) → ○? (while (not (or eobp ended))
ですた…。
あと、getStringFromListは、そういう関数がここにほしかったけど、
みつかりませんでした。ユーザコードでは書けなそう山車。
こういうときどう探すんですか?
C-h f ^i で出る候補のバッファで、それっぽい
キーワードでサーチしてるんですが…。
#↑キーバインド変えてますけど、デフォルトのバインドってことで.
>引数の s を書き換えてるのに、返してるのは ended だね…
これだとsをwhileの条件に使えないので、こうなりますた。
あ、sは引数だから、呼んだ側でそれをそのまま使ってやればいいのか。でも
それってあんましよろしくないような気がするのは、漏れが厨だからでしょうか。
>えーと…これって、 elisp なんだよね?
いひひひひ…。厨の糞コードの見本ですかね。。。
普通、こういう処理をするときは、
・skip-chars-forward + buffer-substring
・looking-at + buffer-substring
などを使うのが常套手段だ。
どうでもいいけど、括弧が全然合っていないのだが。
0351デフォルトの名無しさん
NGNGgetStringFromListに相当するのはconcatかな。
0352真性厨
NGNG>concat
そ、それだぁ! 激しくキホソの予感。鬱氏。
>・skip-chars-forward + buffer-substring
>・looking-at + buffer-substring
なるほど。こいつぁいいです。
というより、こうしない漏れがアフォなんですな。
ううむ、無理してスクラッチからこんな糞コード書いてるより、
先人のコードいじりからはじめて
こういういろんな関数と言うか、常套手段を会得した方が速いのでしょうか。
しかし、まともなのってみんなでかくてむずいんだよなぁ。
0353デフォルトの名無しさん
NGNGまずemacs-lisp-introを全部嫁。
0354デフォルトの名無しさん
NGNG>>349
> ○? (while (not (or eobp ended))
また細かいけど、 eobp は関数だから括弧が要るよ。
私も前やって失敗した…
探し物は… info 読んでからは、 M-x apropos とかだと思う。
> あ、sは引数だから、呼んだ側でそれをそのまま使ってやればいいのか。でも
> それってあんましよろしくないような気がするのは、漏れが厨だからでしょうか。
うーん… setcar とかで書き換えれば、呼んだ側からも参照出来るけど…
私も余り良くないと思う。
ended は単に t に設定して、戻り値には s をそのまま使う、とかを考えてた。
文字の判定も while の条件に含めちゃうとか。
> いひひひひ…。厨の糞コードの見本ですかね。。。
ごめん、そうじゃなくて…見慣れない関数が有ったりして、不安になっただけ。
0355真性厨
NGNGなるほど、Info、これですね。
http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp.html
(実はLinuxでもmanする人だったりする。逝ってよしか)
とにかく修行してまいります。
>> いひひひひ…。厨の糞コードの見本ですかね。。。
>ごめん、そうじゃなくて…見慣れない関数が有ったりして、
いや、事実極上の糞コードですから。
0356デフォルトの名無しさん
NGNGhttp://nicosia.is.s.u-tokyo.ac.jp/boomborg/boomborg-red-j.html
何に使うのかわからんのですが。
0357デフォルトの名無しさん
NGNG何に使うの?
0358デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/unix/1001393679/621
0359デフォルトの名無しさん
NGNGの一番上で書かれてる関数dired-find-alternate-fileを
dired-modeになった時に呼び出す方法が分かりません。
教えてクレヨン。。
0360デフォルトの名無しさん
NGNGC-h b して探せ。
0361デフォルトの名無しさん
NGNG0362デフォルトの名無しさん
NGNGなら割り当てろ。
0363デフォルトの名無しさん
NGNGenter押しても新しいバッファを作らないようにす
るやつみたいなんだけど、それってキーに割り当
てるんじゃなくて。。
うまく説明できないスマソ
0364デフォルトの名無しさん
NGNGdired-find-alternate-file って、その場でそこにある file を開くみたいだよ。
mode の切り替えとかじゃなさそうだけど。
0365デフォルトの名無しさん
NGNGそういうことでしたか。
dired-mode-mapをどうにかこうにかすれば
いいんですね。ありがとうございました。
0366デフォルトの名無しさん
NGNGでけた
0367デフォルトの名無しさん
NGNG0368名無しさん@カラアゲうまうま
NGNGelispライブラリを誰か作ってたような
0369デフォルトの名無しさん
NGNGうん。標準のはあるんだけど、それ以外をコンバートしたい。
0370名無しさん@カラアゲうまうま
NGNGいや、elispにあってxyzzyにない関数を追加するとか、動作の違いを吸収する
とか、そういうやつ。
yatexの移植か何かで作ってたんじゃなかったかな。
0371デフォルトの名無しさん
NGNGhttp://emacslisp.org/
0372デフォルトの名無しさん
NGNGども。xyzzy関係のリンクにEmacs lisp 移植キットというのがありました。
ttp://members.tripod.co.jp/osuneko/xyzzy/xyzzy.html
これはelisp独自関数をxyzzyで書き直したもので、これを読み込んでも
elispのファイルが素で動くものではないみたいです。
これを元にちょっとじたばたしてみたいと思います。
0373デフォルトの名無しさん
NGNG0374デフォルトの名無しさん
NGNG0375デフォルトの名無しさん
NGNGemacs21 なら a に bind されてるようですが?
0376デフォルトの名無しさん
NGNG0377デフォルトの名無しさん
NGNGこれは、emacs18.55.1でelispの関数が今のとちょっと(だいぶ?)
違います。そこで、elファイルを書くのに、help functionで検索
しなければならず、大変です。どっかに、elisp18、19、20あたりの
対照表などありませんでしょうか。
0378デフォルトの名無しさん
NGNGemacs --batch --no-site-file でもう一つ起動してみたら、意外に重くなかった。
w3m-antenna 風の関数で使ってみたけど、結構便利かも。
0379デフォルトの名無しさん
NGNGお手軽マルチスレッドだね。
もうちょっと、詳しく解説してくれると嬉しいです。
0380デフォルトの名無しさん
NGNGさせたい処理を prin1-to-string して、 emacs --eval の引数にしてみただけ…
結果は、適当な symbol で始まる list を print して、呼んだ方が read してる。
load-path は呼ぶ時の値で設定して、 coding は binary で逃げた。
通信が print しか思い付かなかったし、あんまり凄い事はできなそう…
0381デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/unix/1032611750/170-
(defun display-state ()
(interactive)
(let ((buf (get-buffer-create "*display state*"))
(list (buffer-list)))
(display-buffer buf)
(save-excursion
(set-buffer buf)
(erase-buffer)
(insert (format "バッファの合計数: %d\n" (length list)))
(insert (format "バッファの合計サイズ: %d\n"
(apply '+
(mapcar (lambda (x) (set-buffer x) (buffer-size))
list))))
(insert (format "読み込んでる elisp 数: %d\n" (length features))))))
0382デフォルトの名無しさん
NGNGC-uM-|
perl -pe 's/^/\t/g'
とかやってるんですけど、
これを一つ動作でやる関数はどうコーディングすればいいでしょうか?
Mx lines-to-perl<ENTER>
s/^/\t/g<ENTER>
みたいにしたいっす。
0383デフォルトの名無しさん
NGNGそのまま、 shell-command-on-region で perl を呼べばいいんじゃないかな。
start と end は (point-min) と (point-max) だろうし。
command は… (interactive "s") あたりで渡したいのを取って、
"perl -pe '%s'" に format するとか。
output-buffer と replace は t でいいかな。
詳しくは、 simple.el にある定義とか elisp の info とかを参照。
0384デフォルトの名無しさん
NGNG例えば、現在カーソル付近にある文字列を読み取り外部スクリプトに
渡しているようなコマンドなのですが、
Symbol's value as variable is void:
というエラーがでますので、デバッグしたいのです。
0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNGあやしい関数の defun のとこで
edebug-defun する、とか。
0387デフォルトの名無しさん
NGNG(run-at-time 3 nil 'info)
これを *scratch* で eval すると3秒後に info が
起動しますが、そこで d を押すと一度目はエラーに
なってその後 d を押してもエラーにならないのですが。
一度目のエラーは回避できますか?
エラーの原因は *scratch* では d は self-insert-char で、
info に切り替わっているのに、 self-insert-char を実行しようとして
このinfoバッファはread-only ですよと起こられるようです。
0388デフォルトの名無しさん
NGNGelispとLispとどの程度共通性がありますか。何か、大学でLispの授業が
あるんだけど、一応自分でかなりelispは作ってきたから、かなり共通な
らとってみようかと。
0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNG0391名無しさん@Emacs
NGNGelispのマニュアルの最初の方読めよ。
0392デフォルトの名無しさん
NGNGみたいな…
0393デフォルトの名無しさん
NGNGかたぎの人生を踏み外した気もしますが、後悔はしていません。
0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNGscheme のコンパイラを作成とかやりました。
でもこれは講義というより実習かな。
0397デフォルトの名無しさん
NGNG(macro hoge x y)ってできる
マクロとかってありますか?
0398デフォルトの名無しさん
NGNG`(setq ,var (append ',list ,var)))
0399デフォルトの名無しさん
NGNG0400デフォルトの名無しさん
NGNG0401デフォルトの名無しさん
NGNG0402名無しさん@Emacs
NGNG0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNG(defun navi2ch-article-link-ml-change-period (mlname)
(let ((point 0))
(if (setq point (string-match "\\." mlname))
(navi2ch-article-link-ml-change-period
(concat (substring mlname 0 point)
"-"
(substring mlname (1+ point)))))))
として、(navi2ch-article-link-ml-change-period "mona.giko-foo.bar")
などと呼び出した場合、mona-giko-foo-bar という形で返ってきてほしい
のですが、実際には nil が戻ってきてうまくいきません。
最後に評価されている (setq point (string-match "\\." mlname)) が
nil になっているからだ、という事はわかるのですが、どうすればスマート
に書けるでしょうか?
まだ Lisp の形式になれないのか、混乱してばかりでして…
0405デフォルトの名無しさん
NGNGfalseの時にmlname自身を返せばいいんじゃない?
あと、let使ってるからsetqは不用、navi2ch〜は、
↓みたいに残りの部分だけに適用するだけでいいと思う。
間違ってたらスマソ
(defun navi2ch-article-link-ml-change-period (mlname)
(let ((point (string-match "\\." mlname)))
(if point
(concat (substring mlname 0 point) "-"
(navi2ch-article-link-ml-change-period
(substring mlname (1+ point))))
mlname)))
0406名無しさん@Emacs
NGNG(let ((point 0))
(if (setq point (string-match "\\." mlname))
(navi2ch-article-link-ml-change-period
(concat (substring mlname 0 point)
"-"
(substring mlname (1+ point))))
mlname)))
でいーんじゃないのか? if の condition 部分が nil のとき
(= 再帰の終わり)で値を返しましょう.
0407406
NGNGそこで,ちょっと知恵を絞ってみた↓.
(defun foo (mlname)
(mapconcat (lambda (e) e) (split-string mlname "\\.") "-"))
0408デフォルトの名無しさん
NGNG(navi2ch-replace-string "\\." "-" mlname t)
でいいんじゃないの?
0409デフォルトの名無しさん
NGNG0410デフォルトの名無しさん
NGNGそれとも正規表現としての意味か?
0411デフォルトの名無しさん
NGNGただの文字列だけど。
\を2回書いているのは、本来のエスケープシーケンス文字の意味で
使われる\を、文字'\'そのものとして表すため。
(これはC言語の文字列と同じ)
文字列の内部表現は\.
さらに、この文字列はstring-matchへ正規表現文字列として
渡されるので、\はメタ文字に対するエスケープ文字と解釈される。
よって、string-matchにはただの文字ピリオド'.'を渡した事になる。
0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNG0414デフォルトの名無しさん
NGNG>>405-408 さん、どうもありがとうございます。特に >>407 には感動しました。
mapconcat なんてのがありましたか。
実はですね、UNIX 板のキチガイスレにこんなのがありまして、
http://pc.2ch.net/test/read.cgi/unix/1037490849/89
[linux-users:90000] なんてのを、リンクにしてくれるものなんです。
ですが、[Momonga-users.ja:00002] などというのは、途中にピリオドがある
ため、元のコードじゃ使えないので、ちょっと改造しようと思いまして。
これで一応、使えるようになったかなと思いきや。別の問題が。
0415404
NGNG(defun navi2ch-article-link-ml-put-link-property ()
"ML のタグにリンク属性を付加するって関数です"
(save-excursion
(point-min)
(while (re-search-forward
"\\[\\([A-Za-z0-9_-]+\\)[ :]+\\([0-9]+\\)\\]" nil t)
(let ((url (navi2ch-article-link-ml-get-url (match-string 1)
(string-to-number (match-string 2)))))
(and url (navi2ch-article-set-link-property-subr
(match-beginning 0) (match-end 0) 'url url))))))
という部分があるのですが、該当する正規表現の部分を [A-Za-z0-9_.-] と
いう形にしてピリオドにもひっかけようと思ったのですが、
Signaling: (args-out-of-range #<buffer "*navi2ch article http://pc.2ch.net/linux/dat/1036429182.dat"> 13 14)
signal(args-out-of-range (#<buffer "*navi2ch article http://pc.2ch.net/linux/dat/1036429182.dat"> 13 14))
byte-code("..." [window-configuration err set-window-configuration signal] 3)
navi2ch-bm-select-article(nil)
call-interactively(navi2ch-bm-select-article)
と、停止してしまいます。正規表現にピリオドを含めた事がおかしいのだと
思うのですが、[] 内にある場合は問題ないですよね?
それとも、ピリオドを含めた事で、予想外の範囲までひろってるという事でしょうか?
0416デフォルトの名無しさん
NGNGEmacs に評価させる elisp コードは,Lisp パーサで解釈されてから
正規表現エンジンに渡されるので, Lisp パーサが文字列作る時に
\\ が二つ必要になる.それに対して,M-x で呼んだ時は Lisp パーサ
通らねぇで直に正規表現エンジンに渡るから \. で良いんだ.
0417デフォルトの名無しさん
NGNGなんだっけ、here-documentって使えなかったっけ。
0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNG0421デフォルトの名無しさん
NGNG> (defun navi2ch-article-link-ml-put-link-property ()
> "ML のタグにリンク属性を付加するって関数です"
> (save-excursion
> (point-min)
ここはたぶん (goto-char (point-min)) だろうね。
> という部分があるのですが、該当する正規表現の部分を [A-Za-z0-9_.-] と
> いう形にしてピリオドにもひっかけようと思ったのですが、
それと、navi2ch-article-link-ml-momonga-users.ja()
つーのを定義すればいいはず。 エラーは別の原因じゃない?
0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNGを知りますた…
0424デフォルトの名無しさん
NGNGまぁすぐ書けそうな気もしますが
0425デフォルトの名無しさん
NGNG(let ((str-num "0xffffffff"))
(if (string-match "^0x\\(.+\\)" str-num)
(message "%s is %d." str-num
(read (concat "#x" (match-string 1 str-num))))))
"0xffffffff is -1."
0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNG(prin1 (read-string "re: "))
みたいな感じてこと?
0429デフォルトの名無しさん
NGNGうわー、まったくその通りでした。
関数名にはピリオドだめだと、勝手に決めつけてました。コロンが OK なの
は知ってましたが、ピリオドも通るんですね。
うまく動きました。ありがとうございます。
0430デフォルトの名無しさん
NGNGregexp-quote か?
0431424
NGNGこんなのあったんですね。
0432デフォルトの名無しさん
NGNG(string-to-int "1010" 2)
(string-to-int "ffff" 16) -> 65535
こんな事がやりたいのか?まぁ,#x とか #b とかの prefix 付きで
read しても良いわけだが….
0433デフォルトの名無しさん
NGNGそうです。どうもありがとうございました。
0434デフォルトの名無しさん
NGNG(defun diff (e a)
(cond ((atom e) (cond ((eq e a) 1) (t 0)))
((eq (op e) '+)
(make-sum (diff (arg1 e) a) (diff (arg2 e) a)))
((eq (op e) '*)
(make-sum (make-prod (diff (arg1 e) a) (arg2 e))
(make-prod (arg1 e) (diff (arg2 e) a))))))
(defun op (e) (car e))
(defun arg1 (e) (cadr e))
(defun arg2 (e) (caddr e))
(defun make-sum (x y)
(cond ((eq x 0) y) ((eq y 0) x) (t (list '+ x y))))
(defun make-prod (x y)
(cond ((eq x 0) 0) ((eq y 0) 0)
((eq x 1) y) ((eq y 1) x) (t (list '* x y))))
で、-,/,sin,cos,tan,exp,logなどを含む式も微分できるようにdiffを変更して
(* (exp (- x)) (sin (* 2 (* pi x))))を微分せよって問題です。
なんかうまく答えが出てくれなくて・・
0435デフォルトの名無しさん
NGNG0436デフォルトの名無しさん
NGNG(when A B)
(and A B)
どれが好き?
0437デフォルトの名無しさん
NGNG0438デフォルトの名無しさん
NGNGand でやるのはちょっと変則的な気がして、あんまり好きじゃない。
0439デフォルトの名無しさん
NGNG(if A (if B C)) は (if (and A B) C)
で書くかな。
書いてる時の気分によるところが最も大きいような気もするけど。
0440デフォルトの名無しさん
NGNG0441デフォルトの名無しさん
NGNG((eq (op exp) 'sin)
(make-product (diff (arg1 exp) var) (list 'cos (arg1 exp))))
((eq (op exp) 'cos)
(list '- (make-product (diff (arg1 exp) var) (list 'sin (arg1 exp)))))
0442デフォルトの名無しさん
NGNG(if cond (prog A B C)) はすげー嫌。完全に個人的な趣味だが。
0443434
NGNG0444デフォルトの名無しさん
NGNG(make-product e (diff (arg1 e) a)))
0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNG何とかごまかす方法は無いでしょうか。
0447名無しさん@カラアゲうまうま
NGNG0448デフォルトの名無しさん
NGNG0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG(defmacro def (name args &rest body)
`(defun ,name ,args (catch 'RETURN ,@body)))
(defmacro return (exp) `(throw 'RETURN ,exp))
(def f (a) (return (+ a 15))
おら。すでに Lisp じゃねー気もするが。
0451デフォルトの名無しさん
NGNGまずmacroを覚えれ
0452デフォルトの名無しさん
NGNG0453デフォルトの名無しさん
NGNG----BEGIN BASE64----(sexp2html.el.gz)
H4sICMq57T0CA3NleHAyaHRtbC5lbACdVcFu00AQPTdfMd1Ldw+OVbigpM0Fcaio
EIfcKIeNPY0tvLZrr0n9P77xASBx4FrR7+AzkJhZJ47tNqWQSLF3Zt7b93bGznwO
H77fNc3P3x8n8znIEu0NhNpqOJGzyJqEo0fAH1qjDvdrCtjYJgjivV4jLPleqEHe
IBERjc09vKnizyBeZ6nF1HrLOkcBs6BdgrB4a33ebw5BpAuScV7Za+/Vo4SpNshU
eV3E68j2eRJtVqEWSvV1r7KwHtBEpyCWF8vLNwP6WVQMqnIQJd7m3oJ1QalNnuDx
8UhR1TshXicx/WgQbHrm+5vNZlrrKMumQWZ8AeLy4t1boUhoXNrTAVcLdokXhxIv
B85ajVFlzHQ6fcKKakHNXfOl+dr8+Parud82u3PHLVeTiQzxukrB6rW3KG0Rp2uQ
tFBUW612gbI2qyzxXBdc8pT490hLrXUoSEpLSINmhQXsAl1pzm32XEclJybkJ05L
LKiNZxwWLmR0HuiCSlxnQaKaOFuSeh6ClJ+w3mRFmAOqDs+5QBMPfWXfDNWIc8Hn
cUQkUrbhx7FXQgCguyrlIABjneAvrlLuydCUToMoK/a2EiReuYuynfYkjlgASJ3n
SQ0n241lEG7zisHwUNmZhqjA63NWuCUllQsxqifuYUCc+Xrh3O/k9iZA2gLRqeWD
ZZyUrDatkgRcjoTazLT37Vb7A3Sm2sxI8yje35GNDth4xPO/YP6Fr5uNB7CdR67q
ZrYr4pcfT6Aiz/0xHW1wGNxDdl1/LnZV8OO7q3qk+6OZ7nnrDeQW/MTxUNb+1x6L
Hv8mwhQOGHG7uj8NcK9goJclzLJE7R828QyxBzX6T4p0zO2DO/kDTW9JqeYGAAA=
----END BASE64----
0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNG0457453
NGNG>>455 なにそれ?
>>456 すまぬ。漏れは「S 式だとインデントが楽」とか「ページ内の
H[1-5] タグを検索してインデックス作成」くらいしか考えてなかった。
つまらんネタを振って申し訳ない。逝ってきます。
0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNG("gazelle" . (b1 b2))
("lion" . (c1 c2))
("tiger" . (d1 d2))))
上のlistから
("giraffe" "gazelle" "lion" "tiger")
なlistを作りたいので
(defun print-elements-of-list (list)
(let (q)
(while list
(setq q (append (caar list) q))
(setq list (cdr list)))
(print q)))
としましたが、
(116 105 103 101 114 108 105 111 110 103 97 122
101 108 108 101 103 105 114 97 102 102 101)
となってしまいます。
どうすれば良いですか?
0460デフォルトの名無しさん
NGNG(mapcar #'car animals)
0461デフォルトの名無しさん
NGNGfunction で quote してるのはなんで?
0462459
NGNGぐっ、勉強不足でした。
ありがとう。
0463デフォルトの名無しさん
NGNG便乗質問、しつれいします。
(mapcar (lambda () (hogehoge)) foobar))
(mapcar '(lambda () (hogehoge)) foobar))
(mapcar #'(lambda () (hogehoge)) foobar))
(mapcar (function (lambda () (hogehoge))) foobar))
これらはどう違うんでしょうか? (3番目と4番目は同じ?)
ふつーはどうすべきなんだろう?
0464デフォルトの名無しさん
NGNG2番目以外は全部同じ。バイトコンパイルしないなら2番目も同じ。
普段は1番目でいいんじゃない?
0465デフォルトの名無しさん
NGNGlambda → (function (lambda ...
マクロだった・・・
0466デフォルトの名無しさん
NGNG('(lambda (x) (* x x)) 10)
(#'(lambda (x) (* x x)) 10)
((function (lambda (x) (* x x))) 10)
0467デフォルトの名無しさん
NGNG含めて文字列を渡したい時どうすればよいですか?
(call-process "c:/usr/local/bin/foo.exe"
nil nil nil "hoge hage")
これだと
$> c:/usr/local/bin/foo.exe hoge hage
になってしまいますよね
$> c:/usr/local/bin/foo.exe "hoge hage"
にしたいんです。
"\"hoge hage\"" "\\"hoge hage\\"" とかやってみましたが
上手くいきませんでした。
0468デフォルトの名無しさん
NGNG> "\"hoge hage\"" "\\"hoge hage\\"" とかやってみましたが
前者で渡るはず。
上手くいかないのはfoo.exeのせいじゃないのかな?
> これだと
> $> c:/usr/local/bin/foo.exe hoge hage
> になってしまいますよね
> $> c:/usr/local/bin/foo.exe "hoge hage"
> にしたいんです。
この辺からして違ってそうなので、本当に期待している動作からして怪しいが。
#本当にそういうシェルだったら御免ね。
0469デフォルトの名無しさん
NGNG>前者で渡るはず。
>上手くいかないのはfoo.exeのせいじゃないのかな?
やっぱ、ダメでした。
c:/usr/local/bin/foo.exe "hoge hage"
だとチャント動くので、も少し粘ってみます。
0470デフォルトの名無しさん
NGNG本当に期待どーりに動いてるか edebug で調べてみれ。
0471デフォルトの名無しさん
NGNG>>470
すまんです。
思い出しました。
$> c:/usr/local/bin/foo.exe "hoge hage"
この例からもわかるとおり、cygwin環境です。
emacsは、IMEとmouse cursorパッチを当てたNTemacsで
argument editting 拡張されているのを忘れてました.
でも、
c:/usr/local/foo.exe /t hoge.txt "bar boo"
と指定は出来無そうだ。
お騒がせしました。
0472468
NGNGとりあえずこれが間違ってるな。
> call-process で起動するprocessの引数にダブルクォーテーションも
> 含めて文字列を渡したい時どうすればよいですか?
含めたいのは引用符じゃなくて空白なわけね。
0473デフォルトの名無しさん
NGNGいいえ、
スペースを含んだ文字列を引用符で囲ったものを
引数に指定したいんです。
0474デフォルトの名無しさん
NGNGスペースを含んでる文字列は引用符で囲って渡されるんじゃないの。
0475デフォルトの名無しさん
NGNG> c:/usr/local/foo.exe /t hoge.txt "bar boo"
> と指定は出来無そうだ。
え?何でできないの?
0476デフォルトの名無しさん
NGNGnil nil nil "hoge hage")
でいいんじゃないの?
確かスペースがどうのとか考えなくてもよかった気がする
0477デフォルトの名無しさん
NGNG>>475
>>476
IMEパッチでは、argument editting拡張されていて
引数の渡し方が、色々操作できるんです。
(mw32misc.el参照)
バニラNTEmacsでは、それでOKなんですが、
IMEパッチ適用でdefaultの挙動が変わってしまってます。
それで、
define-process-argument-editing
を色々いじってるんですが、上手くいきません。
質問を変えると、
バニラNTEmacsと同じ挙動をさせるには,
define-process-argument-editing
をどのように指定したらよいか教えてください。
#板違いかな
0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNGひ ろ ゆ き 必 死 に な っ て る な w
マ ス ゴ ミ の 報 道 に な ん て 反 応 し な い で
無 視 し と け
0480デフォルトの名無しさん
NGNGもともとかなりのヘタレだから
0481IP記録実験
NGNGhttp://qb.2ch.net/test/read.cgi/accuse/1042013605/
1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNG言 え な い こ ん な イ ン タ ー ネ ッ ト じ ゃ
0484デフォルトの名無しさん
NGNG0485デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0486デフォルトの名無しさん
NGNG同意だね。
リスクなんか気にするような奴は負け犬だね。
0487デフォルトの名無しさん
NGNG「コテハン戦隊ラウンジャー」に鑑定依頼してきますた
0488デフォルトの名無しさん
NGNGつまらないので寝ます。
0489デフォルトの名無しさん
NGNGhttp://ooo.2ch.net/jikken/kako/1027/10275/1027521762.html
0490デフォルトの名無しさん
NGNG<血液型A型の一般的な特徴>(見せかけの優しさ・もっともらしさ(偽善)に騙されるな!)
●とにかく気が小さい(神経質、臆病、二言目には「世間」、了見が狭い)
●他人に異常に干渉する(しかも好戦的・ファイト満々でキモイ)
●自尊心が異常に強く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとする
(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際にはたいてい、内面的・実質的に負けている)
●「常識、常識」と口うるさいが、実はA型の常識はピントがズレまくっている(日本の常識は世界の非常識)
●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者に弱く、弱い者には強い)
●あら探しだけは名人級(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす)
●基本的に悲観主義でマイナス思考に支配されているため、性格がうっとうしい(根暗)
●一人では何もできない(群れでしか行動できないヘタレ)
●少数派の異質、異文化を排斥する(差別主義者、狭量)
●集団によるいじめのパイオニア&天才(陰湿&陰険)
●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい)
●他人からどう見られているか、体裁をいつも気にしている(「世間体命」、「〜みたい」とよく言う)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度も言う、知障)
●表面上意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は個性・アク強い)
●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う)
●自ら好んでストイックな生活をし、ストレスを溜めておきながら、他人に猛烈に嫉妬する(不合理な馬鹿)
●執念深く、粘着でしつこい(「一生恨みます」タイプ)
●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。しかも冷酷)
●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(他人をけなして相対的に自分の立場を引き上げようとする等)
それと、O♀はエコヒイキきつくて、冷酷だからな。
A♂の異質排除×O♀の冷酷=差別・いじめ とあいなる。
0491デフォルトの名無しさん
NGNG電2とは何かな?
0492デフォルトの名無しさん
NGNGで書いたりするが、それはIPが取られてないからじゃない
0493デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNGヾ(=・ω・)ゞゲリーな文系女 ◆/OQtXsetN.
あうあう ◆/OQtXsetN.
Dumm.com ◆/OQtXsetN.
オバハンコテ ◆/OQtXsetN.
馬鹿も風邪を引く ◆/OQtXsetN.
下痢女@ゲリ〜@携帯
通称ゲリーさんです。
私が腐れ30男さんのスレから拉致しました。
批判要望・電2板によくいらっさいます。
住人じゃない人も知っている事を書き込んで、楽しいでふか?粘着くん。
0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNG今のうちに親戚回りしておきな。
0499デフォルトの名無しさん
NGNG誰も何も言えない時代が来そうな伊予柑
0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNG削除系の板は今までも(恐らくリモホ表示以前から)
SETTING.TXTの設定でIPを記録していましたが、何か?
0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNGencode-timeやらdecode-timeやらがありません。
この環境で、現在日付を求める関数とかって作れますか?
いや、標準で入ってるcalendarとかは、ちゃんと表示できてるわけで、
スキルさえあればできるんでしょうけど、
ソース見ても全然分かりませんでした。。
0504503
NGNGこれの部分文字列使えば日付とか使えそうです。…
0505デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0506デフォルトの名無しさん
NGNG怖いのは警察ではないぞ。
0507デフォルトの名無しさん
NGNG0508デフォルトの名無しさん
NGNG0509デフォルトの名無しさん
NGNGperlとかだと「-e ファイル名」とかって調べられるんですけど。
そのファイルが既に存在しているかどうか、を調べたいんです。
0510デフォルトの名無しさん
NGNG>1 :ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ :03/01/08 17:13 ID:???
>そんなわけで、qbサーバでIPの記録実験をはじめましたー。
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/l20
IP記録実験PART2
http://qb.2ch.net/test/read.cgi/accuse/1042020193/l20
これまでのあらすじは あたりに誰かお願い。
0511デフォルトの名無しさん
NGNGちょっと面白いので好。
0512デフォルトの名無しさん
NGNGfile-exists-p ってえのがあるけど。
0514デフォルトの名無しさん
NGNG国内サッカー板が見れない…
0515デフォルトの名無しさん
NGNG0516デフォルトの名無しさん
NGNGさ〜よな〜ら、大好きな2ちゃん〜♪
0517デフォルトの名無しさん
NGNG0518デフォルトの名無しさん
NGNG2ちゃんねるって知ってる?
とか聞かれた。絶対テレビの影響で人増えるな・・・
0519デフォルトの名無しさん
NGNG逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。
二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm
ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。
0521デフォルトの名無しさん
NGNG政治経済学部に比べて著しい低学歴、特に、ひろゆきの卒業した中央大学文学部
のようなヘボい大学に共通しているのは、文化水準が低いという事です。18歳から22歳を
ヘボい大学で過ごすということは、致命傷と言えます。2ちゃんねらーの大半は
岡田克彦氏に比べて、著しい低学歴ですから、取り返しはつかないのです。
せめて、http://www.geocities.co.jp/MusicHall-Horn/1091/で、氏の作品に触れましょう。
0522デフォルトの名無しさん
NGNG顧客情報の開示を行うことを明らかにするだけだ。
責任は書き込んだ奴が取るだけ。
0523デフォルトの名無しさん
NGNG0524山崎渉
NGNG0525デフォルトの名無しさん
NGNG日本にいるなら日本の法律を守りませう
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNG詳細は自治スレへ
0528デフォルトの名無しさん
NGNGはい。
0529デフォルトの名無しさん
NGNGって聞いたんだけど、何で?わからんのだけど。
これを読め!
っての知ってたら示してくれると嬉しいです。
教えてくんでスマソ
0530デフォルトの名無しさん
NGNGあのさ、「何で?」どころじゃなくて、
意味がつかめないんだけど。
質問の仕方ってのがあるだろ。
0531山崎渉
NGNG0532山崎渉
NGNG0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNG気にするんだYO!! だから cons セルを節約するために破壊的操作 nconc, nreverse
なんてのがあるんだYO!! しかし、優秀な gc (ACL とか)を持ってる処理系なら
破壊的操作なんてしないでバリバリ cons しまくるのが真の漢。
0535デフォルトの名無しさん
NGNG(let ((now (current-time)))
(+ (ash (car now) 16) (car (cdr now))))
なんてのを書いてて、整数が28ビットなのに気がつきました。
とりあえず四則演算、大小比較と、文字列との相互変換ができれば
幸せなんですが。
0536デフォルトの名無しさん
NGNGちょっと調べて、bignum.elとか気の利いたパッケージがあると
思ったけど整数(28bit)と浮動小数点数しかないみたいね。
http://list-archive.xemacs.org/xemacs-beta/200105/msg00205.html
こういうモジュール組みこむしかないのかな。
0537デフォルトの名無しさん
NGNGflet とか dolist とか、すごいね。便利。
他に dotimes、lexical-let、case、push、pop
ぐらいしかみてないんだけど、おすすめマクロ
とかあったら、おせーて下さい。
0538535
NGNGサンクスコ。
ttp://list-archive.xemacs.org/xemacs-beta/200105/msg00205.html
漏れはちゃんと理解できないけど、何やら難しそうですね。
とりあえずこんななんちゃってコードでごまかしました。
つまり整数でなく常に浮動小数点数を使うということで。
(defun my-number-to-string (n)
(let ((str (number-to-string n)))
(cond
((string-match "\\.[0-9]+" str)
(substring str 0 (match-beginning 0)))
(t
str))))
(defun my-string-to-number (str)
(string-to-number (concat str ".0")))
...
(let (now (current-time))
(+ (* 1.0 (expt 2 16) (car now)) (car (cdr now))))
0539デフォルトの名無しさん
NGNGmultiple-value-bind や destructuring-bind はどうでしょうか?
(multiple-value-bind (a b) (values 1 2)
(list a b))
==> (1 2)
(destructuring-bind (a b) '(1 2)
(list a b))
==> (1 2)
0540デフォルトの名無しさん
NGNGこのような整数のリストのリストに 1+ を map して
((2 3 4) (5 6 7))
を得るにはどう書きます?
0541デフォルトの名無しさん
NGNGこう?
(setq list '((1 2 3) (4 5 6)))
(mapcar (lambda (x)
(mapcar '1+ x))
list)
0542デフォルトの名無しさん
NGNG(if (listp x) (mapcar (lambda (x) (hoge f x)) x)
(funcall f x)))
こんな関数なかったかな?
(hoge '1+ '((1 2 3) (4 5 6)))
((2 3 4) (5 6 7))
0543デフォルトの名無しさん
NGNG(let (x)
(cond
((null l)
nil)
(t
(setq x (car l))
(cond
((integerp x)
(setq x (1+ x))
(cons x (hoge (cdr l))))
((listp x)
(cons (hoge x) (hoge (cdr l)))))))))
0544デフォルトの名無しさん
NGNG括弧の色を変えるにはどうしたらいいでしょう?
ちょいと薄めの色にしたい。
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNG(cond ((null l) nil)
((integerp l) (1+ l))
((listp l) (cons (hoge (car l)) (hoge (cdr l))))))
0547デフォルトの名無しさん
NGNGhttp://namazu.org/~satoru/programming/permstr.html#pale-parens
0548デフォルトの名無しさん
NGNG0549名無しさん@XEmacs
NGNGなんだけど、edebugがうごかん。
っていうか、M-x edebug-defun で、関数をinstrumenting
したのに、その関数が呼ばれたときになにもおこらん。
0550デフォルトの名無しさん
NGNGhttp://science.2ch.net/test/read.cgi/rikei/1046173479/l50
*:□
0551デフォルトの名無しさん
NGNG(buffer-substring-no-properties
(save-excursion (beginning-of-line) (point)) (point))
0552デフォルトの名無しさん
NGNG0553551
NGNGどうもありがとうございます。
本当はカレント行の文字列をゲットするつもりで書いたのですが、
書き間違ってました...。
(buffer-substring-no-properties (point-at-bol) (point-at-eol))
で実現できますけど、他にありませんでしたっけ?
0554デフォルトの名無しさん
NGNGそれでいいんでないの?
Emacs20 だと point-at-bol, -eol がないから
>>551 みたいにしなくちゃいかんが。
0556デフォルトの名無しさん
NGNGline-{beginning,end}-position
0557デフォルトの名無しさん
NGNG0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNG0560デフォルトの名無しさん
NGNG0561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
NGNG0563デフォルトの名無しさん
NGNG0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNG0567名無しさん@Emacs
NGNG0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNG0570デフォルトの名無しさん
NGNGemacs20 や xemacs では cl だから、今のところ特にメリット無いな。
>>503
18.55 だなんて、かなりレアそうだな。
比較的メジャー(?)な nemacs でも 18.59 だから。
0571デフォルトの名無しさん
NGNG0572デフォルトの名無しさん
NGNGbyte-opt.el あたりには、 dynamic binding だと苦しい、って書いてあるね…
(lexical-scope) とかの form を導入する idea も書いてあるけど、実現されてないみたいだし…
0573デフォルトの名無しさん
NGNGbytecode.cのソース読んでみたけど、よくわからなかった
0574デフォルトの名無しさん
NGNG0575デフォルトの名無しさん
NGNG0576デフォルトの名無しさん
NGNGelisp イラネ
0577デフォルトの名無しさん
NGNGそういう symbol に印つけて、印があったら stack に積まずに破壊的に代入する…とかってできるのかな。
…そういう処理してたら、普通の関数は今より遅くなるだろうけど。
やっぱり、 lexical scoping の宣言とか使って最適化できるほうがいいんだろうな…
0578デフォルトの名無しさん
NGNG自分自身への tail-call のように、単純な形の場合にしか保証できないような気がします。
メリットをデメリットがうわまわりそうです。
やっぱり lexical scoping で multi thread な emacs 希望。
0579デフォルトの名無しさん
NGNG(let ((foo 'inner)) inner-process ...))
みたいに、最後に束縛するときって、 foo を 'outer に戻せなくてもいいよね。
一般化すると…束縛作る form の末尾の部分で、更に束縛作るとき、って感じだと思う。
outer の末尾で inner が束縛作るとき、 outer が作った束縛を、 inner が作ったように引き継いで…
重複する部分は inner のほうで上書きするようにすると、相互再帰くらいならできそうな気がする。
…やっぱり demerit 大きいかな…
あ、私も multi-thread ほしい…
でも、 dynamic binding と multi-thread って相性悪そうだから、 lexical ができてからかな…
それとも、 obarray 差し換えとかで対応できるかな。
0580デフォルトの名無しさん
NGNGその時点での stack に上乗せするのではなく、
その時点での stack を全部一つの環境に押し込んで一つにして、
その後は、その上に積んでけばよいのでわ?
0581デフォルトの名無しさん
NGNG(define (ack m n)
(cond ((zero? m) (+ n 1))
((zero? n) (ack (- m 1) 1)) ;※a
(else (ack (- m 1) (ack m (- n 1)))))) ;※b
schemeでは、aとbの最後のackは末尾再帰になるんだけど、
これがdynamic-bindだと、どういう問題が出るの?
0582デフォルトの名無しさん
NGNGその場合は関係無い
0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG(defun foo (func)
(funcall func))
(defun bar (func)
(foo #'(lambda () (print "bar") (funcall func))))
(defun test ()
(bar #'(lambda () (print "test"))))
> (test)
"bar"
"bar"
"bar"
:
上記のような関数が foo 内で無限ループして、
"Lisp nesting exceeds max-lisp-eval-depth"
というエラーになってしまいます。
foo の仮引数 func と bar の仮引数 func を別の名前に
変更すれば期待通りに動作します。
しかし、foo がライブラリ関数で、bar がユーザの関数で
あるような場合、ユーザがたまたま func という変数を使っ
てしまうと無限ループしてしまいます。
ライブラリ関数として高階関数を使う場面は多いと思うの
ですが、このような状況をどのように回避したらよいので
しょうか?
ちなみに Common Lisp では上記のような現象は起こりません。
0585デフォルトの名無しさん
NGNGそれこそ dynamic binding の長所であり短所
0586584
NGNGでも、 >>584 のコードを Common Lisp (ACL) で実行すると期待通り
に動作します。Emacs Lisp と Common Lisp の無名関数(lambda)内の
binding の仕方が違うということでしょうか。
となると Emacs Lisp では高階関数をまともに使えないような気が
しますが、そういうもんなのでしょうか?
0587デフォルトの名無しさん
NGNGCommon Lisp は lexical scoping だったと思うけどな。
elisp には Common Lisp っぽいことのための cl っていう package があって…
その中に lexical-let っていう、そんなときのための macro があるし。
無名関数に限らず、関数内での symbol の bind のされかたが違うの。
だから、外部から参照する symbol は、名前が被らないように気をつけなきゃいけない。
my-bar-func みたいに、 package 名で prefix したり、少し説明的な名前にしたり。
それが >>585 も云ってる、 dynamic binding の短所。
0588デフォルトの名無しさん
NGNG問題になってるのは、 let とかで bind してる場合、でいいんだよね。
(defun foo (x)
(let ((bar (cons x bar)))
(if (> x 0) (foo (- x 1))
bar)))))
(defvar bar nil)
みたいなとき、 foo が呼ばれるたびに bar が stack に積まれてっちゃう、っていう。
0589デフォルトの名無しさん
NGNGえ、マジで?
barはletで書き換わるけど、それはlet有効範囲内での話で、
fooから戻ったらdefvarのbarはnilのままじゃないの?
(foo 3) ;としたら、
=>(3 2 1 0) が返るけど、
bar
=>nil
でしょ?
>>584
をelispの規則でtestを基点にインライン展開したら、
どうなるんだろう。
#'(lambda〜の中のfuncはシンボル参照として
そのまま残ったりするのかな。
scheme流に展開すると、破壊操作でもない限り全部展開できる。
(define (test)
((lambda() (print "bar") ((lambda()(print "test")]
つまり
(define (test) (print "bar")(print "test"))
0590デフォルトの名無しさん
NGNGそれがdynamic(ry
ここで色々書くより
http://www.gnu.org/manual/elisp-manual-21-2.8/html_node/elisp_147.html
理解できるまでこのセクションを何度でも読み直すのがはやいと思われ。
0591デフォルトの名無しさん
NGNGどもです。
ちょっと勉強してきます。
0592デフォルトの名無しさん
NGNGあ…ごめん、もちろん let 有効範囲内。再帰してる間の話。
>>588 の関数で再帰してくと、 call stack の他に binding stack もあふれる、っていう例。
# …でも (foo 3) は (3 2 1 0) じゃなくて (0 1 2 3) 、と重箱の隅をつついてみる。
0593584
NGNGありがとうございました。
「Emacs Lisp does not have closures.」
ということで理解できました。
dynamic binding だとしても、foo の束縛(func)が bar の束縛(func)を shadow
してくれるのでは? と考えていたのですが、無名関数(lambda)はただの cons で
(つまり変数束縛をもたない)、funcall で実行されるときの束縛が利用されるということですね。
> (consp #'(lambda () (print "bar") (funcall func)))
t
0594デフォルトの名無しさん
NGNG(defun for-each-rec (func &rest lists)
(cond ((null (car lists)) nil)
(t (apply #'funcall func (mapcar #'car lists))
(apply #'for-each-rec func (mapcar #'cdr lists)))))
(defun for-each-do (func &rest lists)
(do ((lists lists (mapcar #'cdr lists)))
((null (car lists)) nil)
(apply #'funcall func (mapcar #'car lists))))
> (for-each-do #'(lambda (x y) (print (cons x y))) '(1 2 3) '(4 5 6))
(1 . 4)
(2 . 5)
(3 . 6)
nil
0595デフォルトの名無しさん
NGNG(while (car lists)
(apply func (mapcar 'car lists))
(setq lists (mapcar 'cdr lists))))
(for-each-while (lambda (x y) (print (cons x y))) '(1 2 3) '(4 5 6))
-| (1 . 4)
-| (2 . 5)
-| (3 . 6)
=> nil
0596デフォルトの名無しさん
NGNG>>588 の foo を例にすると、 let の中で tail-call してて、呼ばれた foo も let で終わってる。
内側の let の中では、この二つの let が作る binding は、一つにまとめちゃっていいよね。 (>>579)
それで、一つにまとめると同じ symbol は隠れちゃうから、上書きしちゃっていい。
そういう最適化ができれば、たぶん少し複雑な再帰でも、 binding stack 成長させずにできそうな気がするけど…どうだろ。
関数末尾の let とかを特別視して、 tail-call のときにそういう binding をまとめられる binding として記憶しとくことと、
末尾の binding 作るときにまとめられる binding があるかどうか確認して、あればまとめることが必要になるけど。
0597デフォルトの名無しさん
NGNG関数も動的スコープなので
(defun bar ()
(defun foo () 'x))
(defun foo ()
(bar)
(foo))
(foo)
x
となるです。つまり、呼び出す関数セルに何が入ってるかは実行時まで
わからないので、束縛をまとめるのは難しいんじゃないかと。
0598デフォルトの名無しさん
NGNGそれは top level environment であって、関数の動的スコープとは関係ないのでは。
0599デフォルトの名無しさん
NGNG・ Top Level からの呼び出しは常に末尾ではない
・ 束縛をまとめるのが可能なのは末尾呼び出しの場合のみ
0600デフォルトの名無しさん
NGNG確かに compiler だけで実行前に最適化するのは難しいと思う。
interpreter に直接 stack 書き換えてもらう、って感じで考えてた。
compile の時点だと、末尾で呼び出しや束縛があることまではわかるよね。
compile した関数だけ最適化されればいいなら、これに専用の byte-opcode とか割り当てればいいのかも。
普通の束縛や呼び出しの代わりにそっちを使ったときだけ、 interpreter が stack 書き換えてくれるの。
これだと、それ以外の関数の実行への悪影響は、そんなに大きくならないかも。
0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNG(??? "\"aaa\\\\bbb\\\\ccc\"")
=> "aaa\\bbb\\ccc"
0603デフォルトの名無しさん
NGNG=> "aaa\\bbb\\ccc"
0605デフォルトの名無しさん
NGNG#<<EOH
emacs-lispにhere documentて無いですか?
EOH
=>"\nemacs-lispにhere documentて無いですか?\n\n"
0606山崎渉
NGNG0607山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNG(transient-mark-mode t)の状態で、バッファを編集(リージョン各行頭に文字挿入など)し、繰り返し編集できるようにアクティブマークを再設定したいんですが、どうやっても色付き部分が消えてしまいます。
pc-select.elを参考にしてみたんですが、あれは編集が発生しないのでマークが消えないようなのです。
0610デフォルトの名無しさん
NGNG0611名無しさん@お腹いっぱい。
NGNG0612デフォルトの名無しさん
NGNGじゃあこのスレはなんなのかというと・・・
0613名無しさん@お腹いっぱい。
NGNG次のような関数を作りました。
(defun backward-delete-path ()
(interactive)
(backward-delete-char 1)
(while (not (eq (preceding-char) ?/))
(backward-delete-char 1)))
(define-key minibuffer-local-completion-map "\C-w" 'backward-delete-path)
(define-key minibuffer-local-map "\C-w" 'backward-delete-path)
(define-key minibuffer-local-must-match-map "\C-w" 'backward-delete-path)
で、C-w を連打すると Text is read-only と怒られてしまいます。
C-a した時に止まる場所になったらそれ以上は文字削除しないようにしたいのですが
どの部分でどのようにチェックをかけたら良いでしょうか?
0614デフォルトの名無しさん
NGNG0615613
NGNGFind file: ~/elisp
とした場合、C-a は ~ の位置で止まるのですが
ここでは (bolp) は nil とされてしまい、
F の位置でのみ t と判断されるようです…。
0616デフォルトの名無しさん
NGNG1字ずつ消すんでなくて、スラッシュを検索して一気に消す方がよさそうな気も。
0617613
NGNGへたれですいません。
0618名無しさん@お腹いっぱい。
NGNG別解だが、narrow-to-region して編集するのが Emacs のお作法
>>617
backward-kill-word でも使っとけ
0619デフォルトの名無しさん
NGNGうーん、せっかくヒントを貰っているようなんですが解りません。
narrow-to-regionで隠せばバッファを編集しても
deactivate-markを免れるのかと思いきやうまくいかず。
0620デフォルトの名無しさん
NGNGコーディングされているからね。まあ、無理矢理やってやれないことはないけど。
(setq keep-mark-active nil)
(setq deactivate-mark-hook nil)
(add-hook 'deactivate-mark-hook
(lambda () (when keep-mark-active
(setq mark-active t
keep-mark-active nil))))
(local-set-key "\C-c\C-a"
(lambda(beg end)
(interactive "r")
(save-excursion
(goto-char beg)
(while (< (point) end)
(beginning-of-line)
(insert "> ")
(next-line 1)))
(setq keep-mark-active (and transient-mark-mode mark-active))))
C-uみたいな、続いて指定されたコマンドの後にmark-activeを復活するような
コマンドを作ると少しはおもしろいかも。
ちなみにリージョン行頭に文字挿入ならC-x r tな。
>>618がいってるのは、範囲指定の編集はnarrowするのがemacsの伝統で、
これはwidenするまでそのままだからなんのコマンドでも好きなだけ同じ
範囲に適用できるってことだと思う。
ところでnarrow-regionしている間mode lineに何か表示するelispってどこかに
ないですか。
0621デフォルトの名無しさん
NGNGこんな感じ、ってことじゃないかな。
(defun backward-delete-path ()
(interactive)
(save-match-data
(let ((pos (point)))
(if (search-backward-regexp "/." (line-beginning-position) t)
(delete-region (match-beginning 0) pos)
(delete-region (line-beginning-position) pos)))))
0622613
NGNG最後の行を以下のようにして期待通りの動きになりました。
(delete-region (line-beginning-position) pos))
(insert "/"))))
0623Lisp 1.5
NGNG言語仕様をレキシカルスコープにすればそんなことはやらなくてすむ。ただし、
buffer localな変数がないのはきついので、"環境"について拡張が必要になる。
current stack frame内slot(lexical scoped)→buffer local環境→top level環境
guile-emacsはどうなっているのだろう…
0624名無しさん@お腹いっぱい。
NGNG> ところでnarrow-regionしている間mode lineに何か表示するelispってどこかに
> ないですか。
%n じゃ不満?
0625620
NGNG%n が何のことかよくわからないです。
……とmode-line-formatを見ると、ああ、なるほど。了解しました。
ありがとうございます。好みに合うよういじってみます。
0626デフォルトの名無しさん
NGNG全部 lexical にすると、かなり非互換な package が出そう…
global variable を default argument みたいに使って、適宣 let するっていう使いかた、手軽でいいし…
そういうののために fluid-let とか用意すると、そっちで同じ問題が出るだろうし。
環境のほうは、もうちょっと好きにいじれたら…って思う。
buffer 以外にも、いろんな状態に応じた local の環境作れたりすると楽しそう…
0627デフォルトの名無しさん
NGNGうおお、感謝です。
ばっちりいけました。
0628山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0629デフォルトの名無しさん
NGNG0630デフォルトの名無しさん
NGNG0631デフォルトの名無しさん
NGNG0632名無しさん@Emacs
NGNG0633デフォルトの名無しさん
NGNG(defun hogehoge ()
(let ((command))
(setq command (read-from-minibuffer "% "))
(shell-command command)
;; 後処理
))
ミニバッファにいる時に C-g した時は shell-command() を実行しないで
後処理だけやらせたいのですが、どのようにすればよいのでしょうか?
0634名無しさん@お腹いっぱい。
NGNGcondition-case
0635633
NGNGどうもありがとうございます。
いまいちスマートじゃありませんが、とりあえず出来ました。
(defun hogehoge ()
(let ((after-proc (lambda (arg) arg)))
(condition-case nil
(progn
(shell-command (read-string "% "))
(funcall after-proc t))
(quit
(funcall after-proc nil)))))
0636633
NGNG8進数 600 か 文字列 "600" を 10進数 384 にすることは可能でしょうか?
GNU-Emacs21.3 だと (read (concat "?\\" "600")) で一応出来ましたが、
XEmacs21.4.9 だと ↑これやると落ちてしまいます。
0637デフォルトの名無しさん
NGNG(defun oct2dec (oct)
(when (numberp oct)
(setq oct (int-to-string oct)))
(let ((cl (mapcar 'char-to-string (string-to-char-list oct)))
(dec 0))
(while cl
(setq dec (+ dec (string-to-int (car cl)))
cl (cdr cl))
(when cl
(setq dec (* 8 dec))))
dec))
0638デフォルトの名無しさん
NGNGstring-to-number() で第2引き数を指定。
0639デフォルトの名無しさん
NGNGどうもありがとうございました。
0640デフォルトの名無しさん
NGNGたまに見かける、
'(info-xref ((t (:foreground "DarkGreen"))))
とかの
(:hogehoge value :hagehage val)
っていったいなんですか?
おしえてけろ。
0641デフォルトの名無しさん
NGNG0642名無しさん@Meadow
NGNGでも、「変態配置」を覚えとかないと、結局どこかで不便になる予感。
半日コーディングしてたら慣れたよ。慣れると便利だしね。
0643デフォルトの名無しさん
NGNGというか、キーコード番号ってどうやったら調べられるんですか?
Sigmarion3でEmacsCEを使ってるんですが、「/」の位置に[up]があるので
SKKユーザのおれには激しく辛いのです。
0644デフォルトの名無しさん
NGNG"0" "1" "2" ですが、この展開をしてくれる関数ってありますか?
0645Lisp 1.5
NGNG(keyboard-translate 'up ?/)
が効きますかね?
0646デフォルトの名無しさん
NGNG"a*" とかは何を返せばよろしいの?
"" "a" "aa" ...
こんなの?
0647デフォルトの名無しさん
NGNGはい。無限個の文字列の集合を得たいのです。
0648デフォルトの名無しさん
NGNG無限個の文字列を得るためには無限のリソースが必要
無限個の文字列を表現するには無限のリソースは必要ない
0649デフォルトの名無しさん
NGNGちなみに遅延ストリームを使えば無限の文字列を有限のリソースで扱える。
ダイナミックスコープでは制約もありそうだけど。
0650644
NGNGなんか違う人が答えてる...。
そう思って "^" と "$" で括ったのですが、無理がありましたかね。
基本的に、展開したい正規表現は "^\\(hoge\\|huga\\)hoehoe$"
といった書式だと決まっているので、自分で作ればいいのかな...。
無限の文字列になる場合は、エラーを返すようにするとか。
0652デフォルトの名無しさん
NGNG遅延ストリームは無限個の表現であって無限個そのものではない
0653Lisp 1.5
NGNGああ、Emacsって未だに文字は整数だったね。
keyboard-translateでも整数しか扱えないや。
じゃあ無理だよ。ちまちまdefine-keyしていくしかない。
XEmacsCEつーのも、xmodmapもないだろうし:-)
0654山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0656山崎 渉
NGNG0657デフォルトの名無しさん
NGNG消えていく)のですが、これはどこで設定できる
でしょうか?
0658657
NGNG0659デフォルトの名無しさん
NGNGperform-replace て置換の対象がバッファなんですが、変数に対して置換する
ようなのはあります?
テンポラリなバッファ作って置換後に変数にコピー・・・てやらんとダメなん
でしょうか?
0660デフォルトの名無しさん
NGNGreplace-regexp-in-string (emacs21)
replace-in-string (xemacs)
って事?
0661デフォルトの名無しさん
NGNGををを!ありがとうございます。
meadow2なのに GNU Emacs 20.3版のElisp リファレンスを見てました。
やっぱし apropos すべきでした。すんません。
0662デフォルトの名無しさん
NGNGemacsを一生使い続けるつもりで、elispを覚えたいのですが、
良質サイト、良書、などありましたらお願いします。
又、Lisp, CommonLisp, Emacs Lisp の違いというのは何でしょうか?
0663デフォルトの名無しさん
NGNGリーダーマクロがないとかそーゆうのはおいといて.
* Common Lisp に劣るところ
- ダイナミックスコープである(クロージャが…)
- 多倍長整数がない,有理数もサポート外
- CLOS のような標準の Object 指向システムがない
- 末尾再帰の最適化ができないため,再帰より反復を使うことになる場合がある.
* いいところ
- emacs が唯一の処理系(Common Lisp は GCL,ECL,CLISP,CMUCL,Allegro,LispWorks と乱立気味)
↑ xemacs とか meadow といった亜種もあるけど
- エディタと一体なので編集系関数が充実
- 文字列処理(正規表現とか)は Common Lisp に比べてめっちゃ強力
- 便利なデバッガがついてくる(M-x edebug-defun とか)
0664デフォルトの名無しさん
NGNG0665デフォルトの名無しさん
NGNG動的スコープの利便性を活かす場面は、そう頻繁には現れない。
なにより最適化が難しい。
バイトコードコンパイラが末尾再帰の展開をしない原因でもある。
独自LISPは変わらずとも、バインディング規則の変換ツールを作って、
本体はさっさと静的スコープに移行しちゃった方がいいと思う。
EmacsLispのメンテナ自身が、もう動的スコープは嫌だとゲロってます。
それと、まともな整数型は欲しいね。関連してFFIが無いのも痛い。
いまだにWindowsのDLLやUNIX系のsoの様な外部モジュール関数が使えない。
タグに8bitも使ってるんだから、新しい型を定義するのは困難でも無い気がする。
RMSは何を考えているのか。どういうわけかFFIを嫌ってるらしいけど。
0666デフォルトの名無しさん
NGNG静的だと、最適化しやすいぶん、いじりにくくなると思う。
関数は hook と advice があればなんとかできるかもしれないけど…
静的な hook や advice ってどんな感じなんだろ…
変数は、 fill-column みたいな defvar されてるのを一時的に差し換える手段がなくなっちゃうと思う。
参照する関数全部が optional の引数を取って、そっちを優先するようにすればいいけど…
参照したい変数が増えると、定義がすごいことになるだろうし…
いっそ、 FFI 導入して、 guile も標準でつけちゃうとか…
0667デフォルトの名無しさん
NGNGとはならんか?
0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
NGNGCommon Lisp みたいにスペシャル変数にして (let ((*fill-colum* 80)) ...) でいいじゃないか.
個人的には CommonLisp キボンヌなんだが,rms は CommonLisp が好きじゃないらしいからなぁ…
0670山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNG動的な束縛が共存できるなら、そんなに困らないかも。
基本的に静的で、 defvar したのは動的とか。
0675デフォルトの名無しさん
NGNGfluid-let はグローバル変数だけで↓とかできないよね?
(defun foo ()
(let ((x 1) (y 2))
(bar)))
(defun bar ()
(+ x y))
(foo)
3
あとグローバルと fluid-let の間のスコープに同名の変数があるとそっち見ない?
これは組んだ奴が悪いのか…
0676CL 派
NGNG(defun f ()
(let ((msg "fubar you lose again!!"))
(declare (special msg)) ;; これないとエラー
(g)))
(defun g () (print msg))
0677デフォルトの名無しさん
NGNGしづらくなるケースもあるかも?
■ このスレッドは過去ログ倉庫に格納されています