Emacs Lisp 2
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG少数派による互助を中心に、初心者の相談も気が向けば受け付けます。
単なる Emacs ユーザーは別板の Emacs 関連スレにどうぞ。
前スレ
Emacs Lisp
http://pc2.2ch.net/test/read.cgi/tech/1004551074/
関連スレ
Emacs part10
http://pc.2ch.net/test/read.cgi/unix/1066719492/
LISP Scheme Part8
http://pc2.2ch.net/test/read.cgi/tech/1058263391/
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004前スレ988
NGNG(fset 'original-defun (symbol-function 'defun))
(defun map-tree (f tree)
(if (consp tree) (mapcar #'(lambda (item) (map-tree f item)) tree)
(funcall f tree)))
(defmacro defun (name argument-list &rest body-forms)
(let ((new-name (intern (concat "cl-" (symbol-name name)))))
`(original-defun ,new-name ,argument-list
,@(map-tree #'(lambda (item)
(if (eq name item) new-name item))
body-forms))))
(defun fact (n)
(if (<= n 1) 1
(* n (fact (1- n)))))
(symbol-function 'cl-fact)
=> (lambda (n) (if (<= n 1) 1 (* n (cl-fact (1- n)))))
;;; *** これを忘れずにしよう ***
(fset 'defun (symbol-function 'original-defun))
0005前スレ988
NGNG(defun even-p (n)
(if (zerop n) t
(odd-p (1- n))))
(defun odd-p (n)
(if (zerop n) nil
(even-p (1- n))))
(symbol-function 'cl-even-p)
=> (lambda (n) (if (zerop n) t (odd-p (1- n))))
(symbol-function 'cl-odd-p)
=> (lambda (n) (if (zerop n) nil (even-p (1- n))))
0006前スレ988
NGNG(defvar cl-symbol-list '(fact even-p odd-p)) ; cl の symbol すべてを列挙する
(defmacro defun (name argument-list &rest body-forms)
(let ((new-name (intern (concat "cl-" (symbol-name name)))))
`(original-defun ,new-name ,argument-list
,@(map-tree #'(lambda (item)
(if (memq item cl-symbol-list)
(intern (concat "cl-"
(symbol-name item)))
item))
body-forms))))
0007デフォルトの名無しさん
NGNGこれは多分必要だろうね。
ついでに subrで定義されてるけど clで再定義されちゃう関数対策も。
0008デフォルトの名無しさん
NGNGでしょう。漏れもさりげなくロードされてたみいだしもういいや。2ch で必死にl を
排除しても使ってるパッケージがロードしてちゃぁねぇ。ぶっちゃけランタイムにロー
ドされてても実害ないんだろ?
0009デフォルトの名無しさん
NGNG例えば、emacs20 で mapc は cl 関数として
(mapc CL-FUNC CL-SEQ &rest CL-REST)
と定義されていた。emacs21 になって built-in になったんだけど、
(mapc FUNCTION SEQUENCE)
と、一つしかシーケンスを受けとらなくなった。NEWS には新規にmapc が実装
されたとは書いてあるけど、cl ユーザーへの notice は何も無し。ランタイ
ムで cl を要求するコードは推奨してないのだから、そういったコードへの配
慮は必要無いってことみたい。
00108
NGNG知らない間にロードされてんの。アンロードとかできないんでしょ?
使ってる elisp を全部チェックして cl 使ってるやつを排除するのマンドクサ。
激しく致命的な問題があるなら考えるけどさぁ…。
0011デフォルトの名無しさん
NGNG(require 'loadhist)
(file-dependents (feature-file 'cl))
これでわかるよ。
0013デフォルトの名無しさん
NGNGcolor-theme を外して…げっ!eieio とか外しちゃ話になんねぇ…。つーか…これって、
コンパイル時に使ってるだけの奴もひっかかってない??やっぱ手動チェックかなぁ…。
0014デフォルトの名無しさん
NGNGcl ロードしていいよ。もう cl 使うな原理主義者の文句は甘受する。
つーか、(require 'cl) するだけじゃねーか?俺関数が乱立するよか
よっぽどマシだろ。
0015デフォルトの名無しさん
NGNGtuareg, eieio, ecb, haskell-mode, ilisp, python-mode
speedbar とかかな。sml-mode や navi2ch や Mule-UCS の一部にも
eval-when に囲まれてない (require 'cl) があるな。でもコンパイル
して使う分には問題ないの?つーか、そこまでして cl は避けなきゃいけないの?
0016デフォルトの名無しさん
NGNGそもそも、なんで elisp にはパッケージ管理等の名前空間管理システムがないの?
そもそも、なんで elisp は dynamic bind なの?
0017デフォルトの名無しさん
NGNG言動を見てると、Emacs Lisp はあくまでもエディタ拡張用言語であり、
本格的なプログラミングには別の言語を使って欲しいような感じ。
0019デフォルトの名無しさん
NGNGか、cl なんかロードしちまってもいいんじゃねーの?と flim とかで苦しんだ漏れは思うわけだが。
ま、病的に cl を恐れてるんじゃなければ、かまわんだろ。そんなことより
もっと elisp 話しようよ。
0020デフォルトの名無しさん
NGNGそだね。じゃあ、どうでもいいネタをひとつ。こういうマクロ作ってみた。
make-symbol の使い方はこんなんでいいの?
(defmacro alist-bind (var-list alist &rest body)
;; (declare (indent 2) (debug t))
(let ((tmp-alist (make-symbol "tmp-alist")))
`(let ((,tmp-alist alist))
(let ,(mapcar #'(lambda (var) `(,var (cdr (assq ',var ,tmp-alist))))
var-list)
,@body))))
(setq alist '((a . 1) (b . 2)))
(alist-bind (a b) alist
(list a b))
=> (1 2)
0021デフォルトの名無しさん
NGNG# たとえ eval-when-compileとかしてなくっても、だ。
clな関数な話題は、なるべく lispスレを利用していただきたい。
0022デフォルトの名無しさん
NGNGmake-symbol はそれでいいけど、
< `(let ((,tmp-alist alist))
> `(let ((,tmp-alist ,alist))
0023デフォルトの名無しさん
NGNG> clな関数な話題は、
今の話題は cl な関数自身ではなく、cl がもたらす弊害について。
つまり、このスレ以上に適切なスレはない。
おまいが舞う構わないは全く関係無い。
0024デフォルトの名無しさん
NGNGcl って elisp で書かれた elisp 用のライブラリだよね?
0025デフォルトの名無しさん
NGNGcl の弊害って今まででた奴は A. 標準関数を拡張しちゃう、B. 俺関数とあたる、
C. 将来の非互換の可能性、くらいか? B. C. はあらゆるライブラリに共通だと
思うが、A. はいかんともしがたいな。我慢できねー香具師は我慢ならんだろう。
mapc なんかも Common Lisp というリファレンスがあるだけわりと互換性の
ある変更で済んでマシな部類だっと思うけどねぇ。
0026デフォルトの名無しさん
NGNGinfo ではバッティングは避けるようなこと書いてあったけど。
0027デフォルトの名無しさん
NGNGemacs がこの先どれくらい進化するのか知らんけど、
こういうどろくさい部分は残り続けるな。
つーかすでに妥協のかたまりみたいなもんで、
本当にクリーンなもの使いたいなら hemlock とか使うしか。
0028デフォルトの名無しさん
NGNGうおっと、たまたま変数名が同じで動いてただけか。
しかし、なかなか話題が変らんな... 2ch であーだこーだ言っても仕方無かろうに。
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG(mapcar (lambda (z) (cons x z)) y))
こんな関数どっかにある?
0031デフォルトの名無しさん
NGNGあるとしたら、どんな名前になると思う?
0032デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNGわざわざ別関数にするほど汎用性があるとは到底思えないのだが
0035デフォルトの名無しさん
NGNGlambdaの中で使ってたのでlambdaを減らして見やすくしようかと。
0036デフォルトの名無しさん
NGNG(loop for z in y collect (cons x z))
と書けば?と思ったが、
(mapcar (lambda (x z) (cons x z)) y)
こっちとタイプ数が変わらない事に気づいた。だめじゃん loop …
ま、こんなの適当に名前つけとけばいいんじゃないの?
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG展開されるんだから elisp 的にグッドじゃないか。漏れ的には
無いと死ぬ: case, ecase, reduce, ignore-errors, count-if
あれば便利: find, loop, destructuring-bind, every, some
return, return-from, flet, labels, rotatef
union, merge とか
嫌い: do (読みにくくない?漏れだけ?)
てな感じなわけだ。つーか、初心者に cl 使うなって教えるのか?
あれば便利なんだし、注意点を教えるだけでいいんじゃないかなぁ。
…でも do だけは勘弁な。
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG少数派による互助を中心に、初心者の相談も気が向けば受け付けます。
単なる Emacs ユーザーは別板の Emacs 関連スレにどうぞ。
前スレ
Emacs Lisp
http://pc2.2ch.net/test/read.cgi/tech/1004551074/
関連スレ
Emacs part10
http://pc.2ch.net/test/read.cgi/unix/1066719492/
LISP Scheme Part8
http://pc2.2ch.net/test/read.cgi/tech/1058263391/
0041デフォルトの名無しさん
NGNG時々現れるから変な事になるんだろ?
ま、elispと関係なく scheme的なコード披露したがる奴も
たいていセットなんだけど。
なんで自分達の巣におさまってないのかねぇ。
0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNGドキュメント読んでも分かりません。
具体的に、どういう時に有効なのでしょうか?
0045デフォルトの名無しさん
NGNGてゆーか人に聞く前にgrepくらいしろぃ。
標準添付のelispでも結構使われてるじゃねーか。
0046デフォルトの名無しさん
NGNG41 の思う elisp なスタイルってどんなのよ?
0047デフォルトの名無しさん
NGNG(codition-case 'hoge
(progn (エラーを無視したいコード))
(error nil))
とか書かなきゃならないの?マンドクサ…。
0048デフォルトの名無しさん
NGNGgrepぐらいしてるよ〜。あちこちで見かけるけどサパーリ分からなくて
悲しい思いしてるのに、無下に切り捨てないでくれよ。
0049デフォルトの名無しさん
NGNG同じような意見は何度も出てるんだけど、わざとループさせようとしてるの?
0050デフォルトの名無しさん
NGNG激しくしつこいから、無しでやっていってるのかな〜とおもって。(condition-case ...)
で長くなったらダルくない? 漏れは ignore-errors とかは使うほうが良いと思うし、
どーせ cl 使うなら便利な機能の話は有難い。しかし、本当に使ってはいけないなら
使うのを止めてもいい(別に愛着があるわけじゃないし)。 ロードしたくない人むけに
eval-when-compile でコンパイル時に使うようにすりゃいいだけの話ではないの?
0051デフォルトの名無しさん
NGNG1 - cl をランタイムにロードするのが我慢ならない人が居ます。
2 - 普通に (require 'cl) と書くと,そのプログラムをロードしたときに cl がロードされてしまいます。
3 - したがって cl を使うときは (eval-when-compile ...) で囲んでコンパイル時に評価しておきます。
すると,そのプログラムをロードしても cl はランタイムにはロードされません。cl を使うときは
eval-when-compile で囲むのが御行儀が良いとされています。eval-when-compile はこーゆう時に有効なのです。
え、コンパイルしないでロードしたら? その場合は普通に require されてしまうの
で、elisp コードをむやみに評価しないように気をつかいましょう。下手をすると
cl がロードされてしまいます。
# 気にしない人は全然気にしないからこの手の話は荒れるんだよな…。
0052デフォルトの名無しさん
NGNG(require 'cl)して利用してるパッケージも多いし、
俺もここで書かれるまで clのとは知らなかった。
このスレで clウザがられてるのは、
elisp(emacs上で動かしたい)コードの一部として
loop なり mapcon なりが出てるのでなく、
それを使う事自体が目的に見えるというか、全面に出てきすぎてて
拒否反応起こす人がいるとか?
あと各種パッケージでも利用頻度低い clの関数は
馴染みがないわけだし。
# incfあたり、そろそろ解禁日も近い感じがするが。
0053デフォルトの名無しさん
NGNG× eval-when-compile
○ eval-and-compile
;; eval-when-compile は自明っしょ。
0054デフォルトの名無しさん
NGNG評価されない。あるフォームをバイトコンパイル時にも確実に評価したい場合、
eval-and-compile で囲む。
foo.el:
(eval-and-compile
(message "hoge")
(sit-for 1))
bar.el:
(message "hoge")
(sit-for 1)
をバイトコンパイルしてみると違いがわかる。
0055デフォルトの名無しさん
NGNG(defun url-encode-string (str &optional coding)
(apply #'concat
(loop for c across (encode-coding-string (or str "") (or coding 'iso-2022-jp))
collect
(cond ((= c ?\n) "%0D%0A")
((string-match "[-a-zA-Z0-9_:/.]" (char-to-string c))
(char-to-string c))
((= c ?\x20) "+")
(t (format "%%%02x" c))))))
0056デフォルトの名無しさん
NGNG未出の各マクロについてこれは便利だから…てやってったらループじゃん。
これまでに cl マクロ自体の有用性を否定してる人はほとんどいないから、
個別のマクロ挙げていっても意味ないわけ。
>>52 が書いてるように、cl で書くこと自体が目的のようなレスが目立ったり、
cl から発展して Common Lisp 自体の議論 (loop マクロの是非等) を延々と
続けられたりしたので、cl マクロを使ったコードを *このスレに書く* のが
嫌われてる。
0057デフォルトの名無しさん
NGNGつーか、emacs 用コードを lisp スレに貼られてもなぁ…。
elisp の話は elisp スレのが相応しいような…。
0058デフォルトの名無しさん
NGNG前スレ後半あたりとか、別にemacs用コードじゃない clなコードが
ちょっと多めだったよ。あのあたりからじゃん、clネタのループって。
0059デフォルトの名無しさん
NGNG書き直して loop に引導を渡してやれ!俺は while に展開されるなら、まぁ、
いいかなぁという気がしている。elisp らしいスタイルとやらをビシっと見せてくれ。
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNG(defun my-url-encode-string (str &optional coding)
(apply #'concat
(mapcar (lambda (c)
(cond ((= c ?\n) "%0D%0A")
((string-match "[-a-zA-Z0-9_:/.]" (char-to-string c))
(char-to-string c))
((= c ?\x20) "+")
(t (format "%%%02x" c))))
(encode-coding-string (or str "") (or coding 'iso-2022-jp)))))
0063デフォルトの名無しさん
NGNGの方がいいか。
0064デフォルトの名無しさん
NGNGさすがに loop よりビルトインの mapcar や mapconcat のが速いですね。いや〜勉強になります。
elisp だと効率が大事なところは組み込みの map 系を使うのが最速ですかね?
ところでこーゆうときは mapconcat のセパレータは "" と nil のどっちがいいんでしょう?
0065デフォルトの名無しさん
NGNG反復より C レベルの反復のが速いのは当然。再帰は…Scheme 化を待て。
0066デフォルトの名無しさん
NGNG三つとも利用してるコードって結構沢山あると思うんだけど、
もしもし scheme化されたら、そーいうのってどうするの?
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNG複数に分けた方がいいような一つの関数が
必然性もなく長々続くことがあるので、
なんでこんな書き方するんだろうなーと思ってたが、
多数の人間で長い間開発してると、他の人への配慮もあって、
なかなか無闇に関数を整理できなくなってくるからかもと
思い始めた。
0069デフォルトの名無しさん
NGNGhttp://www.gnu.org/software/guile/docs/guile-ref/Symbol-Props.html
elisp からの変換用に、シンボルには関数スロットやプロパティスロットも
用意されてるよ。後はトランスレータの仕事。
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNGがんがったけど、あきらめたのかと思ってたんだけど。
emacs21互換のguile-emacsは無いよね。
0072デフォルトの名無しさん
NGNGhttp://savannah.gnu.org/cgi-bin/viewcvs/guile/guile/guile-core/lang/elisp/ChangeLog?rev=1.11&content-type=text/vnd.viewcvs-markup
guile-emacs 0.1 で動くことはわかったので、Emacs 側への統合開始の条件である
Emacs Lisp との 100% 互換を目指してるはずだけど…
このペースだと使い物になるのは10年後くらいか。
0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNGおごちゃんに弟子入りしてバリバリのコボラになってしまった。;_;
なんでリスパがコボルに。
0075デフォルトの名無しさん
NGNGlookupの開発は誰か引きついでるの?
0076デフォルトの名無しさん
NGNG相当の変人だと思っていたが、そこまで変人とは
0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNGのこのこ戻ってきて、また放り出したのも有名
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNG(defun foo (function)
(funcall function))
(defun bar (function)
(foo (lambda () (funcall function))))
(bar (lambda () (print "hoge")))
→(error "Lisp nesting exceeds max-lisp-eval-depth")
ここまで短くすればすぐわかるけど、実際はもっとゴチャゴチャなので、
なぜ動かないのかしばらくわからなかった。
せめて仮引数くらいは lexical scope キボン。
0085デフォルトの名無しさん
NGNG(foo `(lambda () (,function))))
0086デフォルトの名無しさん
NGNG(foo function))
0087デフォルトの名無しさん
NGNGそれだと function じゃなくて cons を渡してることになる。
動作は同じだけどバイトコンパイルされない。
>>86
84 は単純化してる。実際はもっと複雑な処理をする高階関数からもっと複雑
な処理をする高階関数を読んでるので、その指摘は的外れ。
0088デフォルトの名無しさん
NGNG(foo (byte-compile `(lambda () (,function)))))
0089デフォルトの名無しさん
NGNGbyte-compile がコンパイルする引数は lambda。car が 'lambda のリストではない。
実際にそれで動くということと、そう書いていいかということは違う。
0090デフォルトの名無しさん
NGNGlambdaってのはどういう意味なの?
0091デフォルトの名無しさん
NGNGlambda
<サイエンス‐単位・計測>
微小な体積を表すのに用いてきた単位で、一マイクロリットル、すなわち一〇億分の一立方メートルに
当たる。
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG仮引数の名前にプレフィックスをつけとく。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#cl-elisp-memo-lambda
前スレでも同じ話題がでてた。
0094デフォルトの名無しさん
NGNG嵌ったふりをしているに一票。
# いや、参考になったけど。
0095デフォルトの名無しさん
NGNGドキュメントが英語なら gnu.emacs.sources でいいだろうけど。
0096デフォルトの名無しさん
NGNG0097デフォルトの名無しさん
NGNGとりあえずこのあたりはどうか。日本とは言えないかもしれないけど
0098デフォルトの名無しさん
NGNG> * 日本人制作 Elisp の公開場所の提供、
ここは良さそうだね。
http://www.emacswiki.org/elisp/index.html
elispパッケージの一覧もあるし。
各パッケージの先頭一行目に書かれている説明が日本語に翻訳されていると、
英語が苦手な人が選ぶときにいいとおもう。
;;; a-menu.el --- create a menu from a specified directory
これを
;;; a-menu.el --- 指定したディレクトリからメニューを生成する。
として一覧になっているといいなと。
あっ、俺がやればいいのか。
0099デフォルトの名無しさん
NGNGM-x とか M-:でヒストリ使えるようにする elispとか誰か作ってくれないかな。
多分どこかのアーカイブに埋もれてそうな気もするが。
0100デフォルトの名無しさん
NGNGNemacs Lisp と GNU Emacs Lisp の違いを一行で述べよ。
俺の超能力によると、Nemacs lisp = GNU Emacs19 Lisp + 日本語処理関連。
0101デフォルトの名無しさん
NGNGgoogleでちょろっと調べた感じでは、
Nemacs lisp = GNU Emacs18 Lisp + 日本語処理関連
みたいですね。
私はelispパッケージを開発するときは最低限度として、GNU Emacsの最新版と
XEmacsの最新版で動くように気をつかっているけど、さすがにNemacsまでは
手がまわらないという気持ちです。
0102デフォルトの名無しさん
NGNGちょっと変更で対処できるならする。そうでないなら諦めるかな。
0103デフォルトの名無しさん
NGNG魅力的だね。
なんで今の emacs はあんなに重いんだろう。
0104名無しさん@お腹いっぱい。
NGNG0105デフォルトの名無しさん
NGNGvertical-motionを使って、画面行単位の移動コマンドを書いたことあるんだけど、
タブなんかが入ってくると、もう気が狂いそうでした。結局、ユーザから文句が来た
ときだけ、場当たり的に対処するという泥縄になっています。
0106デフォルトの名無しさん
NGNG0107105
NGNG0108デフォルトの名無しさん
NGNG> あのくらいの軽快さと lisp の拡張性があるのは
> 魅力的だね。
> なんで今の emacs はあんなに重いんだろう。
それがemacsに統合されたMULE部分のせいにされたりして怒っている西洋人もいるよね。
俺としてはelispするときに、MULEのおかげでcharacter型で多国語の文字を透過的に扱えるのが
非常にうれしい。まぁ、いまとなっては他の言語でもUnicode対応しているみたいだけど。
そういえば、Meadow2ではUTF-8が標準で扱えたな。やるなGNU Emacs21。XEmacsはどうだろ。
0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNGNemacsが出た当初から「軽い」と言われていたかは大変疑問です。
0111デフォルトの名無しさん
NGNGなぜソフトウェアは必要スペックがどんどん増えるんだろう。
0112デフォルトの名無しさん
NGNGこの仮定が間違っているから
0113デフォルトの名無しさん
NGNGemacs はコンピュータの処理能力の進化よりも重くなってはいない
と思う。
0114デフォルトの名無しさん
NGNG昔: 2次元エロ画像でオナーニ
今: 2次元エロ動画でオナーニ
先: 3次元エロ動画でオナーニ
0115デフォルトの名無しさん
NGNG>>113
> というか、
> emacs はコンピュータの処理能力の進化よりも重くなってはいない
> と思う。
おれもそうは思うけど、elispが強力すぎて、「これelispでできないかな?」->
「ちょっといじってみるか」 -> 「プロトタイプができちゃった」-> 「発表しちゃえ」
<- イパーン人:「遅せーよ。それにエディタのマクロ言語でそこまでやるか?」
という感じになることも多いのでは、webブラウザといい、psgmlとか...
0116デフォルトの名無しさん
NGNG0117デフォルトの名無しさん
NGNGnxmlの公式サイトがみつからないな...
James Clarkタソはelispのプログラムを発表するのはこれが初めてかな?
コードの質はどうだろう? (と無理にelispの話題へ)
nxml-mode.elをちらっと見ただけだけど、elファイルの慣習に従ったファイル書式だし、
docstringの書き方も先頭は短い1文でそのあとに長い説明という慣習に沿っているな。
まぁ、さえてる人は何をやらせても...ということかな?
0118デフォルトの名無しさん
NGNGアイデアとして本来のelispファイルとは別ファイルで各関数、変数の
日本語や他の言語のdocstringを定義できるという仕組みがあれば、
elispにそんなに詳しくないけど英語が読める人が、自分の使っている
コマンドのdocstringを片っ端から翻訳してそのファイルを配ってくれる
というシナリオもあるのでは?
0119名無しさん@お腹いっぱい。
NGNGダンプ分なら、起動時にDocファイルへのポインターを書き換えるという実装
なら簡単そうだな。
0120デフォルトの名無しさん
NGNG> ダンプ分なら、起動時にDocファイルへのポインターを書き換えるという実装
>なら簡単そうだな。
ああ、Docファイルか... なんかそんなことやっていると聞いたことがあるような。
最初は実行時に食うメモリを小さくしようとしてやったという話だったような。
それだとDocファイルの翻訳を、一人で全部やるという話になりそうな気がする。
そうするとみんなビビって手を出したがらないような。とくに分かっている人ほど
自分が知らないコマンドの翻訳をするのを避けたがるような。
自分がよく利用するコマンドで何が起こるかよく知っている人が自信を持って、
翻訳する。そして、それが沢山、集積されて、よく使われるコマンドほど
翻訳が早くすすむというシナリオを頭に描いていますた。
この話題ってスレ違いじゃないよね?
0121デフォルトの名無しさん
NGNGそうすると信頼性も落ちるし、誤訳などのフィードバックと再配布をうまくやる
仕組みがないと難しいんじゃないかな。
0122デフォルトの名無しさん
NGNG翻訳がどの程度進んでるか知らないけど。
0123デフォルトの名無しさん
NGNG> そんな人間は翻訳なんてしたがらないと思うが。
大量には翻訳をしたくないけど、気が向いたときにちょこっと
自分が良く知っているコマンド群の翻訳をやりたいって人は結構
いるような気がします。私もその一人ですし。
イメージとして翻訳の責任者が一人いて、誤訳や訳語などの調整、管理を行い、
各訳者はWikiみたいなシステムを利用してフラッと訪れては翻訳するという感じです。
現在たりないのは実は翻訳者ではなく、翻訳者たちの管理者なのではないかと思います。
訳語なんかもEmacsに関する文書(マニュアル、elispマニュアル、docstring, ...)の
日本語化ということできっちり決めてしまえば、(例えばbufferはバッファなど)
それこそelispでちょっとした自動翻訳もどきも実現してしまうのでは?
0124デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNG0126デフォルトの名無しさん
NGNG> docstringなんかアテになんないからイラネ
これはelisperの反応としてはある意味で正常と言うか、
私もまず分からないことがあればコードを見ます。
ところが一般ユーザーはEmacsを文書作成のためのエディタとしてみているわけで、
elispの実行環境として見ているわけではありません。したがってelispのコードを
読む気も起きないでしょう。
現在、マニュアルは日本語に翻訳がされていますが、docstringはまだ日本語化
されていません。流れとしては、次に翻訳のターゲットになるのは、コマンドや
defcustom関連のdocstringや各パッケージのelファイルに書かれている ;;; Commentary:
部分ではないでしょうか?
Emacsに標準添付されているパッケージ群が英語で説明が書かれているだけで、
一般ユーザの目にふれないままになるのは、あまりにも、もったいないと思います。
ゲリラ的に、ウェブページ上で各パッケージの使用説明書を書いているボランティア
もいるみたいですけど。
0127デフォルトの名無しさん
NGNGどっちかというとユーザとして読む事が多いから。
0128デフォルトの名無しさん
NGNGそれが良いことかどうかは、判断が分かれるでしょうけど。
0129デフォルトの名無しさん
NGNG別に変数や関数の名前を国際化せんでも、docstring を国際化する仕組みさえ作れば、
Costomize に全部放り投げれるやん。
国際化するために一々変数やら何やら書換えてたらプログラマが逃げ出すぞ。
0130デフォルトの名無しさん
NGNG> 国際化するために一々変数やら何やら書換えてたらプログラマが逃げ出すぞ。
たしかにそうなのですが、コマンド名くらい日本語でも...
普通のアプリケーションのメニューは日本語化されるのが通例だし...
あと、純粋にプログラマとしての考えでは、関数、変数のための気のきいた
英語名を考えるのってかなり苦労しませんか? ネイティブスピーカーでは
ないのだし。
だったら日本語なら適切な変数名を思いつくのかと言われれば、
「やってみなければ分からない」とこたえるしかないですね。
表計算やデータベースなどのマクロ言語を使ったプログラミングでは
変数名などに日本語が使われている歴史がありますよね?
0131デフォルトの名無しさん
NGNG(defvar てすとメッセージ "日本語の関数、変数名のてすと")
(defun てすと ()
(interactive)
(message てすとメッセージ))
ぐらいなら出来るけどね(^^;;
0132デフォルトの名無しさん
NGNG日本語でプログラミングしてもいいですね。ウソウソ、デモ、チョットホンキ。
0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNGかっこ悪くない?
(defun ni-bai (atai)
(* atai 2))
(ni-bai (ni-bai futon))
0135デフォルトの名無しさん
NGNG0136デフォルトの名無しさん
NGNG(defalias '関数定義 'defun)
(defalias 'もし 'if)
(defalias '小さいか等しい '<=)
(defalias '一引く '1-)
(関数定義 竹内関数 (甲 乙 丙)
(もし (小さいか等しい 甲 乙)
丙
(竹内関数 (竹内関数 (一引く 甲) 乙 丙)
(竹内関数 (一引く 乙) 丙 甲)
(竹内関数 (一引く 丙) 甲 乙))))
0137デフォルトの名無しさん
NGNGただでさえオープンソースものの日本語訳の質は貧弱なのに。
あと、ほとんどのシンボルはいくつかの単語を`-'でつないだものだったりするが、
「ほげ-もげ」……美しくない。入力もしにくい。
>>130みたいな日本語キチガイの伝でいけば、Excelの関数も日本語になってないのでまずそうだが、そっちはいいのか?
0138デフォルトの名無しさん
NGNG> (* atai 2))
atai を atoi (ascii to integer)と見間違って数秒間だけ思考がとまりました。
たぶんプログラミング中は、頭が英語モード(省略表記の展開機能付き)になっていると
思われます。
>あと、ほとんどのシンボルはいくつかの単語を`-'でつないだものだったりするが、
>「ほげ-もげ」……美しくない。入力もしにくい。
これは日本語にあったトークンのつなぎ方の研究も必要でしょう。
> >>130みたいな日本語キチガイの伝でいけば、Excelの関数も日本語になってないのでまずそうだが、そっちはいいのか?
これも時の流れの中で決まると思いますが、素人の視点にたったとき、
なんでプログラミング言語は日本語を使わないの? という疑問はいつまでも残る気がします。
「プログラミング言語では国際語である英語を使うのが普通になっているおかげで、国際的に
通用するソースコードになっていい。」という意見には、「じゃぁ、最初から、みんなで英語を
使って生活する?」ということを聞いてみたい。
すくなくとも、個人が書き捨てにするようなプログラムでは日本語でプログラミングできてあたりまえという考え方が
なさすぎる気がします。
とはいうものの、big, small, large, one, two, ... などアルファベット表記されている単語でも
ほとんど日本語になってしまっているものもありますね。
0139デフォルトの名無しさん
NGNG結構、初心者には多くないですか? 侮りすぎですか?
そして説明されても「intはintegerの略です」-> 「integerってなに?」みたいな。
「integerとは整数です」という説明が英語圏の人より1つ余分に必要になりますね?
この手の余分に教育にかかる手間の総量はどのくらいでしょう?
インドに優秀なプログラマが多いと噂に聞きますが、あそこのプログラマたちは
英語がペラペラですよね?
0140ヽ(´ー`)ノ
NGNGいや、だからさ、国際化なんて UI で解決すればいいし、そうすべきモノでしょ?
> 「プログラミング言語では国際語である(以下略)聞いてみたい。
日常生活と不特定多数の人間が読むコードを一緒くたにする神経が俺には信じられん。
もう一つ重要な(というか、当然の)事、肝心のコーディングの事を考えてない。
ある日本人が日本語を使ってコードを書き、自分のコードを GPL で公開しました。
そのプログラムが気に入ったギリシャ人のオッサンは特定の機能がギリシャ語では
うまく機能しない事に気が付き、修正する事にしました。
1. 日本語フォントをインストールする
2. 日本語入力をするために IM を入れる
3. 使っているツール(エディタ、コンパイラ、etc) を国際化対応させる
この論理で行くと、優れたプログラマはフランス語もドイツ語もハングルも日本語も、
そして勿論英語も知ってなきゃいけない。少なくともオープンソースにおいては
英語でコード書いた方が可搬性/生産性が高くと思うんだけど、どうよ。
そもそもクローズドならそもそも初心者のために変数名を多言語化する必要ないし、
その上、自分達のコードを日本語やローマ字で書くという選択肢は以前として存在する。
プログラミングを勉強したい初心者ならついでに英語も勉強してくらはい。
main, this, class, get/set, print とかなら中学生でも分かるでしょ。
別に TOEIC 700 点以上取らないとコードが書けないって訳でもなし。
>>139
「int = 整数」でいいじゃん。それなら一段階。
なんで int なの?って説明を求められた時に始めて答えてあげれば良い。
0141デフォルトの名無しさん
NGNG> 英語でコード書いた方が可搬性/生産性が高くと思うんだけど、どうよ。
> そもそもクローズドならそもそも初心者のために変数名を多言語化する必要ないし、
> その上、自分達のコードを日本語やローマ字で書くという選択肢は以前として存在する。
いやお説ごもっともです。異存はございません。それを踏まえての、あえてしてみる、
思考実験として書きました。
> 「int = 整数」でいいじゃん。それなら一段階。
> なんで int なの?って説明を求められた時に始めて答えてあげれば良い。
int = 整数を覚える手がかりがまったくありませんね?
極端に話題を振るのが好きな私としては「BooFooWoo = 整数ね」といわれて
なっとく出来るのかなと。ネイティブスピーカーなら「integerを略してintと書くのね」
と即座に納得できるだろうし。
英語と日本語との違いという面では、漢字が我々の脳へ訴える力、
例えば、planeより面、axiomより軸、interfaceより界面のほうが、
われわれの心に響くのでは?
以上を書いてきたのは、「変数名を日本語にしてみたらどうだろう」->
「気でも狂ったか?」的なやりとりをいくつかの場面で目撃してきたからです。
現時点で日本語を使ったプログラミングが現実的だとは思っておりません。
ですから、私もプログラミングするときは英語を使っていますし、必死に
勉強しております。
0142デフォルトの名無しさん
NGNG初心者のとき、引数の意味が分からなかったなぁ。
0143141
NGNG中で多言語化して欲しいという論点では書いておりませんでした。
いちプログラマとしてプログラミングをする立場で、英語が出来ない/嫌いな
凄腕プログラマという人もいるだろうに、現在の状況ではそういう人は
活躍の場がせばめられられて、世間的にももったいないと思っていたからです。
実際に、英語嫌いな冴えてる友人がいたことも、そう思った理由の一つです。
いちじるしくスレ違いで申し訳ない。>> all
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNG> 初心者のとき、void の意味が分からなかったなぁ。
> 初心者のとき、引数の意味が分からなかったなぁ。
だから、用語を決めるときの重要性はあなどってはならないと思います。
英語では、学術的な用語と一般的な用語との乖離が日本語ほどはなはだしくは
なかったと思います。
ここで気が利いた例を挙げればいいのですが浅学のためあげられません。
あくまで私がそう感じていると言えるだけです。
プログラミングに関して私が尊敬しているある人がプログラミング能力を
高めたかったら、英語を死に物狂いで勉強しろといった意味は、とうぜん
資料が英語だからということを指しているのでしょうが、総合的に、今、
プログラミングをするということは、英語とは切り離せないことだと思っています。
>>140
日常生活と不特定多数の人間が読むコードを一緒くたにする神経が俺には信じられん。
同じ言語コミュニケーション活動というくくりで考えています。
実際このやりとりも、日常生活の延長ですが、不特定多数の人間、たとえば、
エチオピアの人たちも読んでいるかもしれません。
そして将来的には、コンピュータがこの過去ログを読んで意味を理解した上でなんらかの処理を
するという可能性もあるわけです。
トンデモでスマソ。
0146デフォルトの名無しさん
NGNG第一、英語を学習する際に integer = 整数 だって覚える手がかりはないじゃない。
0147デフォルトの名無しさん
NGNG>いちプログラマとしてプログラミングをする立場で、英語が出来ない/嫌いな
>凄腕プログラマという人もいるだろうに、現在の状況ではそういう人は
>活躍の場がせばめられられて、世間的にももったいないと思っていたからです。
が主張なのなら、>>140 の
>プログラミングを勉強したい初心者ならついでに英語も勉強してくらはい。
>main, this, class, get/set, print とかなら中学生でも分かるでしょ。
で解決。
elisp に関係ない話はこっちでやってくれ
http://life.2ch.net/test/read.cgi/yume/1069749452/l50
0148デフォルトの名無しさん
NGNG> トンデモっていうか、何を主張したいのか分からないよ。
主張というほどのものは無くて、elispの国際化から端を発した
世間話のつもりだったけど、度がすぎましたね。
> elisp に関係ない話はこっちでやってくれ
おっしゃるとおり。すみませんでした。
イタチの最後っ屁ではないですが...
>>146
> 第一、英語を学習する際に integer = 整数 だって覚える手がかりはないじゃない。
だから概念構築からやらなければならないので、英語学習が大変なのです。
0149デフォルトの名無しさん
NGNG>> 122
> XEmacs 方面で docstring にも gettext を使う作業してたと思う。
> 翻訳がどの程度進んでるか知らないけど。
という感じかなとは思うけど、Commentary:部分はどうかな?
徐々にマニュアルに取り込まれているという感じかな?
Commentary: 部分を自動抽出してマニュアルに入れるという
方法も考えられるね。そうすれば、わざわざelファイルを覗く
必要もなくなるし。いま、elcファイルだけを配るLinux
ディストリビューションってあるよね?
0150デフォルトの名無しさん
NGNG本などでプログラミング言語の説明をするときキーワードを一々イタリックにしたりね
もし変数名やキーワードが日本語になると
API ドキュメントなどで日本語キーワードを「」で囲んだりすることになるかもね
>>141
> 以上を書いてきたのは、「変数名を日本語にしてみたらどうだろう」->
> 「気でも狂ったか?」的なやりとりをいくつかの場面で目撃してきたからです。
日本語は助詞が複雑だよ?
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNG> 例えば、planeより面、axiomより軸、interfaceより界面のほうが、
> われわれの心に響くのでは?
なんかそこはかとなく不吉な文章だな…。界面のほうが心に響くか?
「界面って?」「interface の事」みたいな会話が飛び交いそうだが…。
まぁ、あれだ。ローカライズは各国でがんがってくれと。だって、漏れ
英語でもヒィヒィいってんのにサンスクリット語の変数名に悩む未来はイラネ。
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG> 方法も考えられるね。そうすれば、わざわざelファイルを覗く
> 必要もなくなるし。いま、elcファイルだけを配るLinux
> ディストリビューションってあるよね?
昔、debianを使っていたのですが、たしか、elファイルとelcファイル
は別パッケージだったような気がします。今はどうなのだろう?
>>150
> そういや英語圏の人はプログラミング言語が英語なのをうれしいと思ってるのかね
>本などでプログラミング言語の説明をするときキーワードを一々イタリックにしたりね
厳密な定義はプログラミング言語内で規定されているのは、当然としても、
なんらかの、脳みそへの引っかかりのようなものがあるから、英語のキーワードを
使っているのではないでしょうか? ある意味では数学の+, -, などはそういう意味では
英語vs日本語という観点からは中立的といえるのかもしれません。
> 日本語は助詞が複雑だよ?
手始めに名詞レベルでの日本語化はどうだろうと思います。
また、助詞の複雑さといってもそれを利点に変えるチャンスはあるのでは?
>> 151
> (´-`).。o(…cons とか cdr とか、どうやって訳すんだろう…)
英語でもなんじゃーこりゃー!的な、もうすでに意味がとれない単語が
沢山あるのは承知しています。Cobolでの実験もしっているつもりです。
触ったことないけど。
0155デフォルトの名無しさん
NGNG空指標例外
0156デフォルトの名無しさん
NGNGはずしてみたらどうだろう?
ただ実質的に「NullPointerException」は、プログラミングの世界では「日本語」と
言ってもいい存在に「現在は」なっているということは分かります。
>NullPointerException
>空指標例外
あきらかに漢字圏の人間には「空指標例外」の方が何なのか連想しやすそうですね。
これが名前としてふさわしいという意味ではないです。もっとよさそうなのがあるでしょう。
>>152
> なんかそこはかとなく不吉な文章だな…。界面のほうが心に響くか?
バレましたか、私も界面はどうだろうと思いますが、激賞する人もいるので
書いてみました。
elisp万歳!
0157デフォルトの名無しさん
NGNG> 昔、debianを使っていたのですが、たしか、elファイルとelcファイル
> は別パッケージだったような気がします。今はどうなのだろう?
今でもそう。Emacs単にインスコしただけじゃ el は入らない。
>>156
> これが名前としてふさわしいという意味ではないです。もっとよさそうなのがあるでしょう。
略して「カラシ」とか。
0158デフォルトの名無しさん
NGNGぬるぽ
0159デフォルトの名無しさん
NGNG>>136
special form に対しても defalias出来るんだ、
と当然の事に感心してしまった。
0160デフォルトの名無しさん
NGNGそーいう圏内だったらどうなってたんだろう。
0161デフォルトの名無しさん
NGNGソースコードはハングルで書くニダ。とか?
0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?as_q=lisp&num=10&hl=ja&ie=UTF-8&oe=UTF-8&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=&as_oq=&as_eq=&lr=lang_ja&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=
15分の1くらい居スニダ
0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG実際英語以外の言語で実用的なプログラミングは
あまり行なわれていないな。
日本語の場合は文字コードがまるで違うので別の問題があるが、
独仏のプログラマなんかはどんな感じなんだろ。
独語の関数とか、やはりキモい感じがするのかな。
0166デフォルトの名無しさん
NGNG----
情報技術者の定義
http://www.ne.jp/asahi/bdx/info/jp-cyberscope/jp-cyberscope-20010321.html
> 最近の意見交換の中から、昔から思っていることで
> ここに書いていなかったことをまとめておく。反論歓迎。
> * コンピュータ技術は本質的にアングロサクソン文化の
> 継承物であるため、基本的にその中心言語は英語となる。
0167デフォルトの名無しさん
NGNGそろそろスレ違いも飽きたので、これ以上やるならどこかにスレ立ててやってくれ。
0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNGス レ 違 い は 他 板 へ
関連リンク: http://life.2ch.net/
0170デフォルトの名無しさん
NGNGC-u 後ろ
C-m 前
なんてキーバインドだったら絶対にemacsなんて使わないからな。
0171デフォルトの名無しさん
NGNGキーの並び的に C-b, C-f より自然に見えるけどな
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNGそれは Emacs や readline がそうなっているのに慣れたからだと
0174デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNG知らないけれど他にどんなのがあるの?
0177デフォルトの名無しさん
NGNGTECOもそうかも。
0178デフォルトの名無しさん
NGNGOk
0179名無しさん@Emacs
NGNG0180デフォルトの名無しさん
NGNGEmacsのキーバインドだってそれにそったものだよね。
だから何らかの形の日本語化が行われるとしても、規格にそむいた独自路線を
走ることはないでしょう。
0181デフォルトの名無しさん
NGNGそういや UNIX 系 OS では改行が ^M って表示されるな
Windows 上の C-M はそれに追随したものだと思っていたのだが
ISO 規格だったのか…
ところで Emacs は ^H をヘルプにして潰してるけど何でよ?
0182デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNGここにいるやつの程度が知れるな。
0185デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/prog/1069868102/
このスレと勘違いして煽り入れて書いてしまった。スマソw
0186デフォルトの名無しさん
NGNG画面出力の改行のことではなくキー入力の改行の話
0187デフォルトの名無しさん
NGNGくらいの互換性は確保しているの?
RMSもなんだか、現行のEmacs Lispを大幅に変更する気が本当にあるのかなという
気がする。だいたいschemeに変更したからって得られるものは何よ?
現在のEmacs Lispを若干補正するくらいで、どうにかなるのじゃないの?
とりあえず、packageの導入。Lexical scoping あたりかな?
0188デフォルトの名無しさん
NGNGCommon Lisp君を見習ってしまった方がよいと思います。もう遅いのでつか?
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNGFrom: Richard Stallman
> Guile is the standard extensibility package of the GNU Project, All
> GNU packages that include an interpreter for extensibility are
> supposed to use Guile. It is inconsistent for Emacs not to support
> Guile.
>
> It would not make sense to replace Guile with Emacs Lisp in everything
> else.
つまり、将来的に Guile をサポートする *ことになっている* のは技術的理
由からではないのです。
0191デフォルトの名無しさん
NGNGというguile-emacsの進化とは別問題として、Emacs Lispの進化は続くでしょうね...
とりあえず、packageシステム入れろ矢ゴラッァ! 互換性とるのなんか簡単だろ!
パッケージ書くのが苦痛なんだよ!
あっ、俺がやればいいのか...
0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNG否定できないので、難しい。
0196デフォルトの名無しさん
NGNG> だれがRMSを説得するかという問題。
竹内郁雄先生になんて、お願いできないの? お友達同士でしょ?
0197デフォルトの名無しさん
NGNGどういう仕掛けなん?
0198デフォルトの名無しさん
NGNGWho Wrote にも RMS は入ってないし。
0199デフォルトの名無しさん
NGNG0200ヽ(´ー`)ノ
NGNGするんだけど、どないしても探せないのですよ。誰か知らね?
0201デフォルトの名無しさん
NGNGwith-temp-buffer の事じゃないよね?
0202ヽ(´ー`)ノ
NGNGレスどもー。
キー入力があると *Completions* とかを閉じてくれるものなんで、
with-temp-buffer では無いと思われ。
momentary-string-display の temp-buffer 版っぽいようなことを
hook でやってくれるようなモノだったと記憶してるんだけども、
記憶が曖昧で(;´Д`)。
頑張って自分で作ってみます。
0203デフォルトの名無しさん
NGNGhttp://www.geocities.co.jp/SiliconValley-Oakland/7673/
ここの lcomp.el は?
自分は自作コード使ってるけど(ヘボいが自作なので)。
0205デフォルトの名無しさん
NGNGバイトコードの定義って"(elisp)Disassembly"で少し紹介されているだけで、
正確な定義ってbytecomp.elを読むしかないのかな?
GNU Emacs と XEmacs で非互換のバイトコードもあるよね?
0206デフォルトの名無しさん
NGNGまあコンパイラよりは先にVMの実装読んだ方が早いよ。
0207デフォルトの名無しさん
NGNG>まあコンパイラよりは先にVMの実装読んだ方が早いよ。
src/bytecode.cをすこし読んでみたんだけど、これが2千行以下で
このくらいなら遊びで自作VMを乗っけてみるのもオツかなと
思いました。いやドラゴンブックを読んでいるもんで。
バイトコンパラは何か改良の余地はあるのでしょうか?
目標があったほうが弄りがいもあるでしょう?
0208デフォルトの名無しさん
NGNG動かせる様にしたりすると大勢の人間に喜ばれるかもね。
コンパイラの改造としてはレキシカルスコープにしてみたりとか。
RMSは怒るかもしれないケドさ。
関係ねえもんな。
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNG> あのVMはいくらでも改良できるから、適当なCPU上でJITで
> 動かせる様にしたりすると大勢の人間に喜ばれるかもね。
ドラゴンブックの範囲を超えるな...だから面白いのか...
> コンパイラの改造としてはレキシカルスコープにしてみたりとか。
これは、lexical-letがclにあるからハックバリューが低いような。
> RMSは怒るかもしれないケドさ。
> 関係ねえもんな。
わらた。
0211デフォルトの名無しさん
NGNG簡単にできると思ってやってみようと思ったけど、read, load, などCで
書かれたprimitive群は、Cで書かれたinternを直接呼んでいるようなので、ダメですね...
elisp: (intern name &optional obarray) => symbol
common-lisp: (intern name &optional package) => symbol, status
と引数までそろっているのに...残念。
0212デフォルトの名無しさん
NGNGhttp://www.nocrew.org/cgi-bin/cvsweb/cvsweb.cgi/emacs-cl/cl-packages.el
0213デフォルトの名無しさん
NGNGVobarrayをコピって差し換えればいけるかも。
面倒だけど。
(let* ((obarray (make-obarray てきとー)))
(read ...)
(exportするシンボルをVobarrayに書き書き))
みたいな?
0214デフォルトの名無しさん
NGNG「ドラゴンブック」って何でしょうか? ググってみても「富士見ドラゴンブック」
くらいしか出てきません。あきらかに無関係ですよね、コレは。
0215214
NGNGttp://www.amazon.co.jp/exec/obidos/ASIN/4781905854/
0216デフォルトの名無しさん
NGNG0217デフォルトの名無しさん
NGNG大学のPCでemacsを使っていると、「#include」や「int」とか「printf」とか打つと文字色が変わるのですが、
自分の家のvine linuxに付いていたemacsを使うと色が変わりません。そうやったら変わるのでしょうか?
もし設定等ありましたらお教えください。宜しくお願い致します。
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNGここはEmacsの設定スレではありません。テンプレにも書いてあるでしょ。
バージョンすら書いてないけど、メニューがあればメニューから選べるはず。
別の方法としては ~/.emacs.el (ないしは ~/.emacs)に
(global-font-lock-mode t)
と書いておくことかな。
次からはLinux板(になければUNIX板)のEmacsスレへどうぞ。
Linuxの各ディストリビューション、とりわけVineLinuxでは
他の環境のユーザが知らない独自設定がされている場合が多いので、
Linuxでの話はLinux板で聞く方がよいです。
0220デフォルトの名無しさん
NGNGそうでしたか。どうもすみませんでした。
そして答えていただきありがとうございました!
0221デフォルトの名無しさん
NGNG(lexical-let bindings body)において、bindings中の変数をgensymで作成した
uninterned symbolで置き換えることによって、lexical-scopingを実現している
んだろうなと思ったのですが、こんどはそれを参照する側のbody中の各フォーム
で元の変数への参照を、先のgensymで作成したシンボルに置き換えなくては
なりませんね? これって異常に大変そうなのですが、ほんとにそうやっているの
かな?
0222デフォルトの名無しさん
NGNGシンボル名の完全な置き換えなんてマクロを全部展開した上でないと無理だし、
コンパイル時に行わないと時間掛かりすぎるし。
0223デフォルトの名無しさん
NGNG(macroexpand '(lexical-let ((a 10)) (+ a a)))
(let ((--a--95409 10)) (+ (symbol-value (quote --a--95409)) (symbol-value (quote --a--95409))))
0224デフォルトの名無しさん
NGNGcl-macroexpand-all 使って、全部展開して置き換えてる。
肝は lambda 式の変換だと思う。
(lexical-let ((foo 1)) (lambda (n) (+ n foo)))
が
(lambda (&rest --cl-rest--) (apply (quote (lambda (G56371 n) (+ n (symbol-value G56371)))) (quote --foo--) --cl-rest--))
みたいになる。
0225デフォルトの名無しさん
NGNGCLパッケージのマニュアルにも、定義している関数外にクロージャを
持ち出さない限り、普通のLetを使うべしみたいなことが書いてあったと思う。
0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNG実現するには、Cレベルでいじる必要があるのではないでしょうか。
ところで、#|〜|#ってどんな場面で重宝しますか?
0228226
NGNG.emacs内の一連の動作を一時的に無効にする時にあると便利だと思いますけど.
C++で言えば;が//,#|〜|#が/*〜*/にあたります.(一応)
0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNG0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNG>.emacs内の一連の動作を一時的に無効にする時にあると便利だと思いますけど.
慣れとは恐ろしいもので、私の場合、行頭に;;を複数行にわたって入れるだけで
今のところ不便を感じません。ただ
(or (test1-p foo)
(test2-p bar))
で、(test1-p foo)を殺すのは
(or ;;(test1-p foo)
...)
でいけますが、(test2-p foo)を殺すときに、
(or (test1-p foo)
;;(test2-p bar)
)
と最後のカッコを移動するのが面倒だと思うことがあるので、最初から
(or (test1-p foo)
(test2-p bar)
)
と書くことがあります。
(when nil ...)
などコードの解釈で、無効にするやりかたは、色がコメント色にならず、
意味が分かりづらいのでほとんど使いません。
0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG調べたらありますた。comment-region, uncomment-region
|(or (test1-p foo)
| -!-(test2-p bar)-!-)
-!-と-!-がregionとしてこの状態で、M-x comment-regionすると、
|(or (test1-p foo)
| ;; (test2-p bar)
| )
になりました。これであしたはホームランだねパパ。ありがとう。
0238デフォルトの名無しさん
NGNG基本的なとこはCommonLispに習うべきだと思うなあ・・
#|〜|#はネストもできるんだぜ?
0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNG>基本的なとこはCommonLispに習うべきだと思うなあ・・
これは賛成。
>#|〜|#はネストもできるんだぜ?
現状での解決策は、
;; ;;(foo)
;; ;;(bar)
;; (buz)
というように行を分けて書くしかないのかな?
0241デフォルトの名無しさん
NGNG;; ;;(bar)
;; (buz)
このやり方で、コメントを外すときとコメントにするときは、
C-x r d (delete-rectangle)とC-x r t (string-rectangle)を私は使用しています。
みなさんはどうですか?
0242デフォルトの名無しさん
NGNGおなじく。C-x r k の方をよく使うけど。
kill-rectangle-saveが欲しい……
0243デフォルトの名無しさん
NGNGC-u M-x comment-region
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNGまぁまぁ分かりやすいですよ。日本語訳されていないのかと思ったら、されていますね。
それとも、そんなこと知っててadvice.elファイル内のCommentary部分の話をしているのでしたら、スマソ。
0246デフォルトの名無しさん
NGNG関数名を生成してコールすることは可能でしょうか?
よろしくお願いします。
0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG事故解決しました
(funcall (intern "abc"))
0250246
NGNG文字列から生成された関数monyoに値をsetfしたいのですが
失敗してしまいます。
どこがまずいのでしょうか?
申し訳ありませんが、教えてください。
(defmacro monyo (a)
`(car ,a))
(let* ((data 'c)
(li '(a d))
(func "monyo"))
(setf (funcall (intern func) li) data)
(print "~S" li))
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNG0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNGmacro は先に展開されるから、 setf には (funcall (intern func) li) が、展開されずに渡される。
これが (car li) に展開されることは実行時まで予測できないから、 setf がうまく展開できないと思う。
compile しない場合なら、 funcall とかの setf method 定義してけばいけるかな…
0255デフォルトの名無しさん
NGNGsetfというちょっと複雑なしくみより、すなおに
Function: fset symbol definition
を使えば考えがまとまりやすくなりませんか?
そしてmanyoをマクロにしたい気持ちの理由はなんでしょう?
0256250
NGNGやりたいことは"文字列で渡された関数名に対応した関数に、
値をsetfすること"です。
下記S式の"monyo"にあたる部分を文字列にしたいのです。
monyoはマクロでも関数でもかまいません。
(setf (monyo li) 'c)
わかりづらい説明ですみません…
よろしくお願いします。
0257デフォルトの名無しさん
NGNG=> t
setf 使いたがってるのはCommonLisperだから?
0258デフォルトの名無しさん
NGNG>やりたいことは"文字列で渡された関数名に対応した関数に、
>値をsetfすること"です。
手順1: "monyo"という文字列がnameという変数に設定された。(setq name "monyo")
手順2: 関数"monyo"を定義する。(fset (intern name) #'(lambda (arg) (car arg)))
手順3: (setq list (list 'a 'b)) => (a b) (setf (monyo list) 'x) => x, list => (x b)
が機能するようにしたい。
手順4: CLパッケージのマニュアル"(cl)Customizing Setf"にある定義用マクロ
defsetfかdefine-setf-methodで定義する。defsetfの簡単な方を使うとき。
(defun defsetf-name (access-fn-name update-fn)
(eval `(defsetf ,(intern access-fn-name) ,update-fn)))
を定義しておく。
手順5: 動的に(defsetf-name name 'setcar)を呼び出す。
どう?
0259258
NGNG0260デフォルトの名無しさん
NGNG>下記S式の"monyo"にあたる部分を文字列にしたいのです。
>monyoはマクロでも関数でもかまいません。
>(setf (monyo li) 'c)
字面のとおりに解釈したとして、(setf ("monyo" list) 'c)が機能する
ようにしたいとしたら、setfをいじるしかないな。
0261デフォルトの名無しさん
NGNG返事が大変遅くなり、申し訳ありません。
早速教えていただいた方法を試してみたのですが、
この方法だと"monyo"がBlack Boxのとき利用することが
できません(T-T)。
手軽に実現する方法はないのでしょうか…
(複雑に実現する方法もわかりませんが^^;)
0262シヌマデツキアウelisper
NGNG>この方法だと"monyo"がBlack Boxのとき利用することが
>できません(T-T)。
black boxという意味は実行時に文字列の正体が決定されるという意味ですか?
たとえば、ユーザーに入力してもらうので、あるときは"monyo"次は"boyoon"とか?
"monyo"がblack boxのとき、その関数としての定義はいつ決定されますか?
恥ずかしがらずに、こちらの手がかりとなりそうなことを、できるだけ具体的に
ずらずらと書いてみてください。最終的にどういうコードがどういう結果を返せば
満足なのかとか。
もしかしてネタ? ツラレテモイイヤ。
0263デフォルトの名無しさん
NGNG(setf (funcall (intern func) li) data)
これはliが(c b)になってほしいってこと?
0264デフォルトの名無しさん
NGNG`(car ,a))
(let* ((data 'c)
(li '(a d))
(func "monyo"))
;; (setf (funcall (intern func) li) data)
(eval `(setf (,(intern func) li) data))
;; (print "~S" li))
(print li))
0265たいへんお騒がせしました
NGNGみなさんありがとうございました^^
0266デフォルトの名無しさん
NGNGCutting & Storing Text (テキストのカットと保存)
の演習問題にさしかかってます。search-forward の実装が課題の
ようですが、いくら正規表現ぬきでいいとはいえ、これっていきな
り飛躍しすぎじゃないですか?立往生してます。
とりあえず考えたのは 引数の文字列を対話的に受取って、それを
1文字ずつに分解、そんで1文字サーチしてマッチしたら次の文字
も連続してマッチするか調べていく。。っての思いついたんだけど
変かな?
0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNGポイントを移動してメッセージを出す問題だと思うけど。
0269デフォルトの名無しさん
NGNGそういうことでしたか。
(defun my-search-forward (word)
"my-search-forward"
(interactive "sSearch Word: ")
(if (search-forward word nil nil)
(message "Found!")))
こんなんでいいんですかね。とりあえず動いてますが。
次の問題が
* キルリングに第3要素があれば、それをエコー領域に表示する関数を書いてみよ。
キルリングに第3要素がなければ、適切なメッセージを表示せよ。
こうなってるんですが問題の意味がよく分かりません。第3要素
ってなんのことでしょうか。プログラム以前に国語の問題ですね。。
search-forward 本体の実装を勉強するときには>>267さんの
こと調べてみたいと思います。
0270デフォルトの名無しさん
NGNG"ネーヨ"))
0271デフォルトの名無しさん
NGNGサンクス!!
0272デフォルトの名無しさん
NGNG(defun my-get-tag ()
(interactive)
(let ((search-word-beg "<")
(search-word-end ">")
beg end get-list)
(save-excursion
(while (search-forward search-word-beg nil nil)
(setq beg (1- (point)))
(search-forward search-word-end nil nil)
(setq end (point))
(copy-region-as-kill-nomark beg end)
(setq get-list (cons (car kill-ring) get-list))))
get-list))
とりあえず抜き出したタグを get-list に保存していくところ
を完成させたいんですけど get-list が空っぽのままです。
kill-ring には追加されてるんですが、なぜなんでしょう?
0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNGとりあえず実行してみたけど、ちゃんと抽出してるみたいだよ?
copy-region-as-kill-nomark って関数がなかったから copy-region-as-kill にしたのと、
error になるから search-forward の第三引数 t にしたけど。
; search-forward の第三引数の意味って、処理系依存だったりするのかな…
ところで get-list が空っぽって、どうやって確認したの?
0275デフォルトの名無しさん
NGNG成功してるんですか。関数の最後に get-list を置いてるので
M-x my-get-tag で呼びだしたら現在のバッファに get-list の
中身を表示してくれるのかなーと思ったんですが。
0276デフォルトの名無しさん
NGNG(insert (car get-list))
したらちゃんと表示されました。勘違いしてたみたいです。
すみません。
ところで GNU Emacs Lisp Reference Manual ってほとんどの
関数のことが書いてあるんですか?たとえばバッファ、開始
ポイント、終了ポイントを渡すと、その文字列を返してくれる
ような関数が欲しい時に info の 文字列とバッファのところ
を読んで、なかったら諦めて自分で作るなりしないといけない
んですか?
0277デフォルトの名無しさん
NGNG> ポイント、終了ポイントを渡すと、その文字列を返してくれる
buffer-substring
一連の流れ読んでないけど、ここだけ見えたので。
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG0280デフォルトの名無しさん
NGNGわれわれの目標は、Emacs Lispのソースコードにあるさまざまな長さの関数定
義の個数を表示したグラフを作ることである。
elisp-introで説明を読んでて何がしたいのかさっぱりだったんで、最初に
完成させたいグラフを見てみた。次の式を評価するとこんなグラフができる
らしい。なんだこれ。どこがどこに対応してるんだ。。?
(graph-body-print '(1 2 3 4 6 4 3 5 7 6 5 2 3))
*
* **
* ****
*** ****
********* *
************
*************
0281デフォルトの名無しさん
NGNG禁則処理よりももっと賢く改行して欲すぃ時があるんだけど。
0283デフォルトの名無しさん
NGNG何も言わずにさらりと回答するところを見るとあんた漢だね。
自分が馬鹿なのがいけないんだけどさ、こんなグラフ見ずら
くてしょうがないよ。普通
1 *
2 **
3 ***
だと思うんだけど。elispの入門書なんだから勉強できれば別
に問題ないんだけどねヽ(´ー`)ノ
0284デフォルトの名無しさん
NGNG上→下のグラフと左→右のグラフ、どっちが手間が多いか
ちょっと考えれば分かると思うんだが
0285デフォルトの名無しさん
NGNG0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNG↓も等幅フォントじゃないと多分ずれる
*
* **
* ****
*** ****
********* *
************
*************
1234643576523
0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNGnavi2ch で見てても モナーフォント使ってたり環境は
色々ってことなんじゃない?
また質問なんだけど、さっきの棒グラフを折れ線グラフ
にしろって問題です。
折線グラフは、各バーの先頭より下が空白の棒グラフであると考えられる。 折線グラフのコラムを作るには、
まず、値より1小さい空白文字のリストを作り、`cons'を使って印のシンボルをリストに繋げ、`cons'を使ってリ
ストの先頭に空白文字を埋め込む。
たぶん頭悪いんだろうけど、これも言ってる意味がよく
分からないんだ。。
*
* *
***
***
---
324
これを折れ線グラフにするとどんなグラフになるの?
0290デフォルトの名無しさん
NGNG*
*
*
---
324
値が0のとき工夫がいるな。
こうするのかな? それともそこまで考えてない出題か?
*
*
-*-
102
0291デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNGなるほど。そう考えてから文章読むと明確ですね。
ほんと国語力ないな自分。。いまからチャレンジ
してみます。
0294デフォルトの名無しさん
NGNG/ ヽ / ヽ
______ / ヽ__/ ヽ
| ____ / :::::::::::::::\
| | // \ :::::::::::::::|
| | | ● ● ::::::::::::::| 何このスレ...
| | .| :::::::::::::|
| | | (__人__丿 .....:::::::::::::::::::/
| |____ ヽ .....:::::::::::::::::::::::<
└___/ ̄ ̄ :::::::::::::::::::::::::|
|\ | :::::::::::::::::::::::|
\ \ \___ ::::::::::::::::::::::::|
0295デフォルトの名無しさん
NGNGたぶん、fill-columnに到達したとき、そのままだと
ながいながいぎょう……禁則処
理みたいな例
になるのを、SKK辞書に「禁則」、「禁則処理」がある事を利用して、
ながいながいぎょう……禁則
処理みたいな例
というふうにしたいのでは?
0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNGttp://www.geocities.co.jp/SiliconValley-SanJose/7225/log/1001393679.html#R87
これなんかどう?
すっきりした状態で新年迎えられるよ。ついでに痛いし。
0298デフォルトの名無しさん
NGNGこういうレスを見ると、年末年始だな、って思うよ。
まぁ俺には休みが無いわけだが。
0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNG(interactive)
(backward-word)
(upcase-word)
(insert " "))
この関数、 upcase-word のところでエラーが出て
しまって動きません。
error: (wrong-number-of-arguments #<subr upcase-word> 0)
この手順通りに手動でやるとちゃんと動くんですが。
upcase-word を調べてみたところ、別に引数は必須
じゃないみたいです。何がいけないんでしょうか。
0301デフォルトの名無しさん
NGNG手元のだと引数が一つ必須って書いてあるけどな…
interactive に呼ぶと自動で引数を補ってはくれるけど。
ほんとに *scratch* とかで (upcase-word) を評価して error 出ないの?
0302デフォルトの名無しさん
NGNGこういう場合はどうしたらいいんでしょう。がんばって引数
を渡すようにするしかないですか?
0303デフォルトの名無しさん
NGNG1単語だけが対象でいいならとりあえず固定値を渡しときゃいいんじゃない?
その後にでも my-upcase-word へ引数を渡す方法を勉強するとか。
0304デフォルトの名無しさん
NGNGやりたいのはつまりこういうこと?
(defun my-upcase-word (p)
(interactive "p")
(if (eolp)
(let ((pos (point)))
(upcase-word (- p))
(goto-char pos))
(upcase-word p)))
0305デフォルトの名無しさん
NGNGおお。動きました。
upcase-word に -1 を渡すと直前の単語に対して作用してくれるんですね。
んでカーソルが行末じゃなかったら通常通の upcase-word みたいに動くと
いうことですか。勉強になりました。ありがとん。ついでに downcase-word
と capitalize-word にも同じようなやつ作ってキーに割りあてときました。
0306デフォルトの名無しさん
NGNG助けになるような関数ってありますか?
format-time-string だけでは大変で…
0307デフォルトの名無しさん
NGNG(format-time-string "%Y-%m/%d"
(encode-time s min h (- d 3) mon y)))
(decode-time))
みたいなのとか、かな…
0308デフォルトの名無しさん
NGNG以前似たような事したいとき、
current-timeをゴニョゴニョするのかなーなんてやってたよ。
0309デフォルトの名無しさん
NGNGありがとうございました!
0310デフォルトの名無しさん
NGNGXEmacs Lisperの人っていらっしゃいますか? 精力減退を感じますか?
EIEIOを使っている人、使い心地はどんな感じですか? 遅くないですか?
0311デフォルトの名無しさん
NGNGもうXEmacsサポートするのも嫌だけど、いいアイデアは
出すけど作業途中でトンずらする奴と、そんなのを崇めてる
その他ボケナスが開発続ける限りどうせいずれなくなるし
みたいなこと書かれてたよ。詳しいこと知らないけど。
0312デフォルトの名無しさん
NGNG0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNG0315311
NGNG0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNGのユーザ数の比率がわからないかな…。俺はドキュメントの正確さに
惹かれてずっとGNU Emacsを使ってきたけど。
GNU Emacsだけのことを考えてプログラミングすればいいのなら楽だな。
XEmacsの今後の開発の方向性はどうなっているのだろう?(スレ違いか)
0318デフォルトの名無しさん
NGNGまったくそれで構いません。XEmacsをサポートするために生産性が
下っているとは残念・・・と言いたいGNU Emacsユーザがたくさん
いるのではないでしょうか。
0319デフォルトの名無しさん
NGNG# ちょっとの変更で両方使えるようになるなら、
# 切り捨てなくてもと、もう一年ぐらい XEmacs使ってない俺は思う。
# 〜が対応してないからこっちの使用を断念ってのは M$的みたいで。
0320デフォルトの名無しさん
NGNGちなみにGNU Emacs 20未満であることを確認するときは以下のようなコードを思い付きました。
これももっといいのがあれば教えてください。
(when (or (featurep 'xemacs) (<= emacs-major-version 20))
;; code for GNU Emacs 20 未満
)
0321名無しさん@お腹いっぱい。
NGNG(fboundp 'Meadow-version) とか?
0322320
NGNG>>320 まちがえちゃった。正しくは、
(when (and (not (featurep 'xemacs)) (<= emacs-major-version 20))
;; code for GNU Emacs 20 未満
)
0323デフォルトの名無しさん
NGNGどっちかってーと (featurep 'meadow) では?
0325デフォルトの名無しさん
NGNG(Meadow-version) => "Meadow-2.00 Beta2-dev (WOMINAHESHI)"
(featurep 'meadow) => t
0326デフォルトの名無しさん
NGNG数に応じて,そのコメント行の色を変更するには,どうしたらいいのでしょう
か。
たとえばですが,emacs-lisp-modeだと,;の行は青色で,;;;の行は赤色にし
たいのですが。
0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNGemacs21に標準で付いてたやつで、コメントを見てなんとなく実行してみたら、
;;; Commentary: とかのフォントが大きくなったりした。
local-variableとかでファイル毎に定義できたと思う。
0330デフォルトの名無しさん
NGNG手掛りに調べてみます。
>>329
それ利用したいなあ。追加情報があったらどうぞよろしく。
0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNGしたものの、実際にコード読んでみたらサパーリ(´・ω・`)ショボーン
0334デフォルトの名無しさん
NGNGいきなりコードを全部読破しても、理解するのは難しいと思うよ。
まずは、やりたいことに関係する部分をちょこちょこいじってみるのが吉かと。
おいらも emacs-wiki を改造してるから、少しはアドバイスできるかも。
0335デフォルトの名無しさん
NGNGelisp-intro-jpを読み終ったら、Emacs Lisp Reference Manualにざっと目を通したり、
または、それをしなくてもソースファイルを読みながら、必要に応じて、
C-h TAB ;;info-lookup-symbolやM-x find-function、M- x find-variableを駆使してがんばれ。
その他にも改造したい部分を含む関数の挙動をedebugで観察したり、eldocモードを使うなど
色々おもしろいことはあるよ。
0336デフォルトの名無しさん
NGNG結構便利。
0337デフォルトの名無しさん
NGNGfind-function とかじゃなくて tag 使うの?
それとも併用?
0338デフォルトの名無しさん
NGNG`C-h f' `C-h v' `M-.' あたりを駆使してがんばってるんですが、
すんなり読めるようにはなりませんね。日々修行が必要ということ
でしょうか。。
> C-h TAB ;;info-lookup-symbolやM-x find-function、M- x find-variable
これは知らなかったんで使ってみます。
>>334
とりあえず html を出力する時に 改行ごとに <br> タグを付加するように
したいんです。その際に * でヘッディングしてる行には <br> をつけない
ようにしたいんです。何かアドバイスいただけると嬉しいです。
0339デフォルトの名無しさん
NGNGemacs-wiki-publishing-markup の中の、コメントで plain paragraph separator
って書かれてる正規表現をいじればよさげ。
デフォルトでは、<p> タグに置き換えられるようになってるね。
0340デフォルトの名無しさん
NGNG単にfind-function知らなかっただけです……。
読みこんでない*.elの関数も検索できます、と言い訳させてください。(^_^;
ご指摘ありがとうございました。
0341デフォルトの名無しさん
NGNGだれかの参考になればうれしい。
Emacs21では、何もしないと、該当マニュアルページが表示されてもページ内の
検索対象シンボルの記述箇所にジャンプしてくれない、これはprefixとしての
正規表現を指定していないから。以下でやっていることは、それを指定して
やるのと、clパッケージのマニュアルも検索対象にいれること。
(setq info-lookup-highlight-face nil) ;; 反転表示オフ
(load "info-look")
;; add prefix spec which make point jump to the headline after lookup.
(info-lookup-add-help
:mode 'emacs-lisp-mode
:regexp "[^][()'\" \t\n]+"
:doc-spec '(("(elisp)Index" nil " - [^:]+: ")
("(cl)Function Index" nil " - [^:]+: ")
("(cl)Variable Index" nil " - [^:]+: ")
("(emacs)Command Index" nil " - [^:]+: ")
("(emacs)Variable Index" nil " - [^:]+: ")))
0342デフォルトの名無しさん
NGNG失敗したら、find-function, find-variable で検索、
失敗したら、find-tagで検索する、そんなコマンドfind-elisp-symbolが欲しい。
自分で書けばイイノカ...
0343デフォルトの名無しさん
NGNG亀レスすまそ。アドバイスを参考にしてがんばってみます。
0344デフォルトの名無しさん
NGNG(subst-char-in-string "a" "b" "abc")
すると "abc" が返ってきます。何か使い方間違ってますか?
"bbc" が返ってくることを期待してるんですが。
subst-char-in-string is a compiled Lisp function in `subr'.
(subst-char-in-string FROMCHAR TOCHAR STRING &optional INPLACE)
Replace FROMCHAR with TOCHAR in STRING each time it occurs.
Unless optional argument INPLACE is non-nil, return a new string.
0345デフォルトの名無しさん
NGNG=> "bbc"
0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNG成功しました。
`?' 演算子知りませんでした。 subst-char-in-string の第一、第二引数は
文字列じゃなくて文字だったんですね。勉強になりました。
0348デフォルトの名無しさん
NGNG(subst-char-in-string "abclmn" "ABCLMN" "Leave me alone!")
=> "LeAve Me ALoNe!"
みたいな拡張も視野に入れているのかもしれないけど、
関数のデザイン的に、現状の仕様ではfromchar,
tocharに文字列を渡したらエラーにして欲しいな。
と思ったらReference manualにはこの関数は記載されていないね。
0349デフォルトの名無しさん
NGNG文字列でなくても配列型なら使える実装になっているね。
(subst-char-in-string 'a 'b [a b c])
で [b b c] が返る。
0350ヽ(´ー`)ノ
NGNG=> "LeAve Me AoiMoe!" に見えた(;´Д`)
0351デフォルトの名無しさん
NGNG文字列も配列の一種だからね。
次はsubst-char-in-sequenceという名前にして、リストでも
良い事にするとかって、そりゃ、clのsubstituteだよね。
こういうsequenceという抽象データ型を操作する関数を定義しておいて、
実際にリストにするかベクタにするかは、使用時に有利になるほうを選ぶ
というコーディングにはロマンを感じます。
個人的には、alist、plist, hash-table でそういうことをやりたいので、
これらを抽象化したデータ型の統一操作関数群が標準で欲しい。
データが少ないときはalistを使っておいて、データが増えたらhash-tableに
するってとき多いよね?
>>350
> => "LeAve Me AoiMoe!" に見えた(;´Д`)
「萌え」という単語は知っているけど、Aoiはわからないな...
0352ヽ(´ー`)ノ
NGNGhttp://www.google.co.jp/search?q=AoiMoe&lr=lang_ja
// ム板じゃ塩兄ちゃんはあまり有名じゃないのか。
0353デフォルトの名無しさん
NGNGVOIDを知らん人は少なそうだw
0354デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?q=%B7%BB%A4%C1%A4%E3%A4%F3&ie=EUC_JP&hl=ja
0355デフォルトの名無しさん
NGNG0356デフォルトの名無しさん
NGNG抽象データ型としてhash-tableとalistを操作する関数を「標準」で欲しい
というところがミソなんじゃないの?
自分で書くなら、hash-table-p、listpを使って関数内で場合わけすれば書けるよね?
外してたらごめんよ。
0357デフォルトの名無しさん
NGNG勧めるのは方向ちがいだったね。すまん。
けど、そういう関数の要望が高くなったとしても、C で実装するかなあ。
Sequence でもリストと配列では違いが大きいから、ディスパッチャを書くこ
とになる。C で書くより Lisp の方が楽。Lisp で用意してくれるだけなら、
遅くなるだけだと思う。
データの出し入れの前にチェックもしたいから、そこまで含めて初期化とゲッ
タ、セッタの関数の仕様を固定しておいて、とりあえず alist か plist で実
装。重くなってきたらハッシュで書き直す。さらに重くなったら外部のDBを呼
ぶように書き直す。ということで困らないと思うけど。
0358デフォルトの名無しさん
NGNG> けど、そういう関数の要望が高くなったとしても、C で実装するかなあ。
おれはelispに速度はあまりもとめないたちなので、CかLispかは問題には
しません。というかなるべくLispで書いてほしい気がする。
> Lisp で用意してくれるだけなら、遅くなるだけだと思う。
それはそうなんだけど、そういう関数が最初から決まっている
だけでも、初期化、ゲッタ、セッタの関数名、引数の順番を考えたり
定義したりする手間も省けると思うんだよね。まぁ、foo-init, foo-get,
foo-setでもいいけど。
とは言うものの、よく考えてみると俺がalistがすごく便利だと考えているのは、
consから構成されているという実装を知っていて、たまに、単なるリストや
木として処理したりという反則ぎみの使い方をするからなんだと思う。矛盾しているね。
0359デフォルトの名無しさん
NGNGCPPUNIT_TEST_SUITE(MyTest);
CPPUNIT_TEST(test_foo);
CPPUNIT_TEST(test_bar);
...
CPPUNIT_TEST_SUITE_END();
という行を別に書く必要があるのですが、手で維持するのは面倒なので
// (call-process-region (point-min) (point-max) "sh" nil (current-buffer) t "-c" "grep '^[ ]*void[[:space:]]\\+test_.*()' |sed 's/void[[:space:]]/CPPUNIT_TEST(/; s/().*/);/'")
というコメントを
CPPUNIT_TEST_SUITE(MyTest);
の後に入れて、コメントの次の行頭で C-x C-e するようにしています。
が、
* 古いリストを手で消す必要がある
* テキスト処理に外部プロセスを使ってダサい
といまいちよくありません。
これらの点を改良したいのですがelispではどう書けばいいのでしょう?
0360デフォルトの名無しさん
NGNGC-x ( ;; start-kbd-macro 記録開始、C-x ) ;; end-kbd-macro 記録終了
C-x e ;; call-last-kbd-macro で自分のやりたい事の手順を一通りなぞって
みるのはどうでしょう。
うまくいけば、name-last-kbd-macro, insert-kbd-macro でコマンドとして
ファイルに記録もできますし。
> * 古いリストを手で消す必要がある
> * テキスト処理に外部プロセスを使ってダサい
実質的に問題になっているのは最初のものだけだと思うので、それだけ
解決すればいいのでは?
正攻法は、"(elisp)Search and Replace"で正規表現による置換を勉強すること
かな。
0361Emacs Lisp
NGNG0362デフォルトの名無しさん
NGNGF島さんですか?笑
0363(define (´∀`) 'マターリ)
NGNG100000まででは(6 28 496 8128)だった。
(defun divisor (x)
(let ((n 1) (p '()) (q '()))
(while (< (* n n) x)
(if (= (% x n) 0) (setq p (cons n p) q (cons (/ x n) q)))
(setq n (+ n 1)))
(nconc (nreverse p) (if (= (* n n) x) (cons n q) q))))
(defun perfect-numberp (x)
(= (* 2 x) (apply #'+ (divisor x))))
0364Emacs Lisp
NGNGだれっすか?
>>363
サンクスコ。これで単位がきます。
0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNG0367Emacs Lisp
NGNG友人は gcc でアセンブラはかせて出していました。
0368デフォルトの名無しさん
NGNGネタ決定
0369デフォルトの名無しさん
NGNG激しく遅レスだが、それ hi-lock-mode でしょ
0370デフォルトの名無しさん
NGNG326です。ありがとうございます。それを探してました。
M-x hi-lock-mode
M-x highlight-regexp [RET] ^;;;*.$ [RET] 色
ですね。
拡張子で判定して,ファイルを開くといつもhighlightできると便利なんです
が。。。
0371デフォルトの名無しさん
NGNGM-x highlight-regexp [RET] ^;;;*.$ [RET] 色
ではなく,
M-x highlight-regexp [RET] ^;;;.*$ [RET] 色
でした。
0372369
NGNG(add-hook
'emacs-lisp-mode
'(lambda ()
(highlight-regexp "^;;;.*$" 'hi-red-b)
))
とか
0373デフォルトの名無しさん
NGNG<form enctype="multipart/form-data" action="upload.cgi" method="post">
<input type="file" name="uploadfile">
に対してアップロードする方法が分かりません.google で検索してみましたが,
ダウンロードについてはいろいろと見つかりましたが,アップロードは見つかり
ませんでした.
0374デフォルトの名無しさん
NGNG参考にしつつ自前で書く。
0375デフォルトの名無しさん
NGNG>>373
一箇所, 'emacs-lisp-mode を 'emacs-lisp-mode-hook とすれば,それでOKでした。
0376デフォルトの名無しさん
NGNGemacsの正規表現で,「空白行の次の行の先頭が数字」で始まる文字を表現す
るにはどうすればいいでしょうか?
^$^[0-9]
では,うまくsearch-forward-regexpできません。
0377デフォルトの名無しさん
NGNG0378デフォルトの名無しさん
NGNG\n[0-9].*$
0379378
NGNG行でなくて文字ですね。
\n[0-9].hoge
0380デフォルトの名無しさん
NGNG0381デフォルトの名無しさん
NGNG0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG自分で考えろ
\\(\n\\|\\`\\)\n[0-9].hoge
0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNG0387デフォルトの名無しさん
NGNGて何分かおきにアップデートするプログラムを elisp で書きました。
set-buffer を使っているので save-excursion を使って囲みましたが、タイ
マーでそれが実行されるとそのフレームのアップデートはうまくいきますが、
その際、本体の emacs カーソルが消えてしまい、なにもしないと二度ともどっ
てきません。(フォーカスからはずれるような感じ、なにかキー操作すると戻っ
て来る)。作成した新しいフレームにカーソルが移動しているようには、見え
ないので save-excursion は、うまく動作していると思います。教えて君で
す、スンマソン。
0388デフォルトの名無しさん
NGNG別の wm でやるとどうなりますか?
または、その現象を超単純化した lisp でも出していただけると
わかりやすいと思います。
0389デフォルトの名無しさん
NGNGwindow 周り担当は save-window-excursion。
frame は、 poe に save-selected-frame ってのがあるみたい。
でも、何かすれば戻ってくるってことは、ただカーソル見えないだけ?
あんまり害がなさそうな気がする…
終わったとき redraw-display でもしてみるとか?
0390デフォルトの名無しさん
NGNGLisp Interaction ModeでCtrl-jで評価できると
ある本で読んだのですが、改行されてしまいます。
どうもCtrl-jが改行に割り当てられているような
のですが、なぜなのでしょうか?設定を弄ったり
はしていません。みなさんはどうされていますか?
0391デフォルトの名無しさん
NGNGeval-print-last-sexpになってないのかな。
M-C-xだとミニバッファに評価してくれる
0392デフォルトの名無しさん
NGNGeval-print-... に設定するにはどうすればいいのでしょうか?
あとEmacs Lispのよい参考書を教えてください。
いま山本和彦さんの「リスト遊び」という本で勉強
しています。かなり自分には合うプログラミング言語
だと思います。
0393デフォルトの名無しさん
NGNG便利です。何しろ原典ですから頼りになります。私はそうやって勉強しました。
日本語に翻訳したものもあるはずです。
あと、elisp入門みたいな短めの文書もあると思います。
これらの文書はネットから無料で入手できます。
>>392
> eval-print-... に設定するにはどうすればいいのでしょうか?
応急措置としては、
M-x loca-set-key C-j eval-print-last-sexp
本来ならlisp-interaction modeでc-jが改行になっている原因を
突き止めた方がいいと思うけど、一時しのぎとしては、.emacsに
(define-key lisp-interaction-mode-map "\n" 'eval-print-last-sexp)
と書いてみるとか。
0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNGCtrlキーとCaps Lockキーの役割を入れ替えたい
のですが、誰かくわしいかたやり方を教えてください。
考えているのは、.emacsファイルで設定をいじって
入れ替えるやりかたです。
お願いします。
0396デフォルトの名無しさん
NGNGそれは Emacs 側でやることじゃないんじゃないか?
0397395
NGNG使っていて、 Meadow を使っているときだけ
Ctrl と CapsLock を入れ替えたいなと思いまし
て。。。
0398デフォルトの名無しさん
NGNGレスサンクス。ご指摘どおり、save-window-excursion を
使ったらうまくいきました。select-frame 関数が原因だっ
たのかな。
0399デフォルトの名無しさん
NGNGwindowsなら「窓使いの憂鬱」使えば?
0400デフォルトの名無しさん
NGNG0401デフォルトの名無しさん
NGNGおいおい、FAQだよ。
ttp://meadow.sourceforge.jp/cgi-bin/hiki.cgi?%B0%EC%C8%CC%C5%AA%A4%CA%BE%F0%CA%F3#l4
ちっとは調べろ。あと、マルチポスト( ゚Д゚)イッテヨシ。
0402デフォルトの名無しさん
NGNGHHKかえばいいよ。
ごろ寝してHHK腹の上に置いて
モニターを天地逆さまにおいたら
むちゃくちゃ使いややすいぞ。
たまに頭に血登って気絶するけど
やめられん。
0403デフォルトの名無しさん
NGNGどんな体位でやってるんだ?
モニータが天地逆さまってどんなだ?
想像つかねー
0404デフォルトの名無しさん
NGNG頭に血が登るという部分から想像するに
ベッドの端から頭がはみ出るような形で仰向けに寝て、
首を背中側に90度曲げるんじゃないかな。
そうすれば普通と上下が反対になるから、
モニターを天地逆に置く理由になる。
0405デフォルトの名無しさん
NGNG0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNG0408デフォルトの名無しさん
NGNG0409デフォルトの名無しさん
NGNG0410デフォルトの名無しさん
NGNG0411デフォルトの名無しさん
NGNG2: Happy Hacking Keyboard って X Window System で使いにくいか。
可能性としては、これくらいしか思い浮かばん。
でどうなの?
0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNGこれではどこがいけないんでしょうか?
(run-at-time "10 sec" nil (message "hoge"))
これをscratchでC-jしたら
[nil 16474 46984 123352 nil "hoge" nil nil]
とででミニバッファにhogeと表示されました。
10秒後にhogeと表示されるのを期待していたのですが。
0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNGありがとうございました。
0416デフォルトの名無しさん
NGNG0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNGyes
0419デフォルトの名無しさん
NGNGletをlexicalにしてしまったら、ある意味、漢だね。
0420デフォルトの名無しさん
NGNG-*- ... ; lexical-binding: t; ... -*-
と書いておいた場合か、(with-lexical-binding BODY) での BODY。
ただし、メンテナ自身が
http://mail.gnu.org/archive/html/emacs-devel/2004-04/msg00276.html
> There's also the `lexbind' branch
(略)
> but until recently I haven't used it for everyday use;
だそうだ。
0421KingMathematician ◆5lHaaEvFNc
NGNGは、 emacs lisp の何に相当しますか?
0422デフォルトの名無しさん
NGNG(setq x (random 50))
(dotimes (y x) (print (format "%d" y) (current-buffer))))
とか?
0423KingMathematician ◆5lHaaEvFNc
NGNG(progn
(setq x (random 50))
(dotimes (y x) (princ (format "%d\n" y) (current-buffer))))
でうまくいきました。
誰か emacs lisp と xyzzy lisp の相違点について解説してもらえませんか?
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNGxyzzy lisp ??
0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNG>誰か emacs lisp と xyzzy lisp の相違点について解説してもらえませんか?
Common Lisp ユーザのための Emacs Lisp メモ
http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#cl-elisp-memo
最近、xyzzyを触り始めたのですが、Common Lispに6割程度の準拠度という話を聞きましたが、
Common Lisperとしての視点でアレッ?と感じた非互換なところは、
* readtable caseが実装されていないか、何かが違う。
* パッケージ名に"COMMON-LISP"ではなく、"LISP"を使っている(cltl1のせい?)。
* ecaseなど、単純に定義できるマクロを定義していない。
p.s. xyzzyのソースを読んでみてぇなぁ
>>420
> 有効になるのは Emacs Lisp ファイルの頭に
> -*- ... ; lexical-binding: t; ... -*-
> と書いておいた場合か、(with-lexical-binding BODY) での BODY。
少し苦しい気がするけど、しょうがないのかな。
何もせずデフォルトでlexical bindingにできるようにして、互換性も保てる方法があれば、
良いのだろうけど。
0428デフォルトの名無しさん
NGNG最近知ったんですが、ソースは公開されてるようですよ。
0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNGみなさんどうしてますか?
elisp には先読みってありませんよね?
# メルマガ内の広告を invisible にするために使おうと思ってます。
0431デフォルトの名無しさん
NGNG実際に先読み指定を含んだ正規表現をここで見せてみたらどう?
0432430
NGNG> looking-atあたりを使うコードに手で書き直すしかないのかな。
> 実際に先読み指定を含んだ正規表現をここで見せてみたらどう?
"john(?=ney)" みたいなのを想定してます。
というか、
先読みは自己流でムリヤリ作ってみて、その汚さ・不完全さに嫌気がさしました。
ご想像の通り、looking-at や match-data などを使いました。
しかし、もっと綺麗にやる方法についてどなたかの知恵を借りたいなー、
と思った次第です。
本当いうと、戻り読み "(?<foo)bar" のほうが欲しいんですが。
0433デフォルトの名無しさん
NGNG"john(?=ney)" なら (re-search-forward-lb-la "" "john" "ney") とか
"(?<foo)bar" なら (re-search-forward-lb-la "foo" "bar" "") とかできるよ。
(defun re-search-forward-lb-la (lb-regexp regexp la-regexp
&optional bound noerror count)
(let ((lb-depth (regexp-opt-depth (concat "\\(" lb-regexp "\\)"))))
(when (re-search-forward (concat "\\(" lb-regexp "\\)"
"\\(" regexp "\\)"
"\\(" la-regexp "\\)")
bound noerror count)
(goto-char (match-beginning (1+ lb-depth)))
(re-search-forward regexp bound noerror count))))
0434430
NGNGどもです。上に書いてもらったのに、関数を書き加えて、
(re-search-forward-with-lbla "john(?=ney)")
(re-search-forward-with-lbla "(?<=foo)bar")
のように使えるようにしました。
とりあえず、自分の用途には耐えられるものになりました。
(defun re-search-forward-with-lbla (regexp &optional bound noerror count)
(re-search-forward-lb-la (or (extract-lookbehind regexp) "")
(extract-normal-part regexp)
(or (extract-lookahead regexp) "")
bound noerror count))
(defun extract-lookbehind (regexp)
(if (string-match "(\\?<=\\([^)]+\\))" regexp)
(match-string 1 regexp)))
(defun extract-lookahead (regexp)
(if (string-match "(\\?=\\([^)]+\\))" regexp)
(match-string 1 regexp)))
(defun extract-normal-part (regexp)
(let ((lookbehind (extract-lookbehind regexp))
(lookahead (extract-lookahead regexp)))
(when lookbehind
(string-match (regexp-quote lookbehind) regexp)
(setq regexp (substring regexp (1+ (match-end 0)))))
(when lookahead
(string-match (regexp-quote lookahead) regexp)
(setq regexp (substring regexp 0 (- (match-beginning 0) 3))))
regexp))
0435デフォルトの名無しさん
NGNG0436430
NGNGうーん、確かに検索できませんね。
自分の用途では、とりあえずそういう使い方をしないので不都合ないんですが、
きちんとした戻り読みの実装という意味では、中途半端なもんはだめですね。
誰か、直せませんかね。
根本的な改善も歓迎。
0437デフォルトの名無しさん
NGNG&optional bound noerror count)
(when (and (save-excursion
(re-search-backward lb-regexp nil t))
(= (match-end 0) (point)))
(goto-char (match-beginning 0)))
(let ((lb-depth (regexp-opt-depth (concat "\\(" lb-regexp "\\)"))))
(when (re-search-forward (concat "\\(" lb-regexp "\\)"
"\\(" regexp "\\)"
"\\(" la-regexp "\\)")
bound noerror count)
(goto-char (match-beginning (1+ lb-depth)))
(re-search-forward regexp bound noerror count))))
0438デフォルトの名無しさん
NGNGカーソルが"fo"の直後にある時は"(?<foo)bar"を検索できないと思う。
0439デフォルトの名無しさん
NGNGbound も la-regexp にしたがって調整して
(when (and bound
(save-excursion
(let ((p (point)))
(goto-char bound)
(or (looking-at la-regexp)
(re-search-backward la-regexp p t)))))
(setq bound (max bound (match-end 0))))
こんな感じか。
count を指定した時の挙動が変だから最後は
(re-search-forward regexp bound noerror)
0440デフォルトの名無しさん
NGNGre-search-backward は、 point より後まで続く文字列に一致しないでしょ。
>>438 の場合、他に foo が見つからなかったら、 buffer の先頭に戻らないといけない。
他に、 lb-regexp も regexp も la-regexp も \(foo\)+ 、みたいな場合が悩ましいね…
foofoofoofoofoo みたいな文字列に照合させたとき、
最長一致してほしいのは regexp であって、 lb-regexp じゃないよね。
(match-string 0) が "foofoofoo" を返してほしい。
これを満たすには、 regexp の前に lb-regexp を concat して re-search-forward するのは無理だと思う。
先にある部分式から最長一致しちゃうから。
search-forward の挙動をまねて、 count とか noerror の処理も自前で実装すればできそうかな…
0441デフォルトの名無しさん
NGNG(let* ((old-point (point)) (count (or count 1))
(regexp-with-la (concat "\\(" regexp "\\)" la-regexp)))
(catch 'found
(catch 'not-found
(while t (unless (re-search-forward regexp-with-la bound t)
(throw 'not-found t))
(let ((old-beginning (match-beginning 0))
(old-end-1 (match-end 1))
(old-end-all (match-end 0)))
(goto-char old-beginning)
(cond ((and (re-search-backward lb-regexp nil t)
(= (match-end 0) old-beginning))
(setq count (1- count))
(if (> count 0) (goto-char old-end-all)
(goto-char old-beginning)
(throw 'found (re-search-forward regexp old-end-1))))
(t (goto-char old-beginning)
(if (eobp) (throw 'not-found t)
(forward-char 1)))))))
(cond ((eq noerror t) nil)
((eq noerror nil)
(error "Search failed: \"%s\" \"%s\" \"%s\"" lb-regexp regexp la-regexp))
(t (goto-char (or bound (point-max))))))))
0442デフォルトの名無しさん
NGNGnoerror が t でも nil でもなかったら、 goto-char したあと nil 返さないといけないんだっけ。
(t (goto-char (or bound (point-max)))
nil)))))
とかに修正だね。
0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNG(defun re-search-forward-lb-la (lb-regexp regexp la-regexp
&optional bound noerror count)
(let ((start 0))
(while (string-match "\\\\\\\\\\|\\\\\\*\\|\\\\\\+\\|\\+\\|\\*\\|\\\\{"
lb-regexp start)
(when (member (match-string 0 str) '("+" "*" "\\{"))
(signal 'search-failed "look-behind regexp must be fixed length."))))
(let (start)
(when (save-excursion
(and (re-search-forward regexp bound t)
(re-search-backward lb-regexp nil t)
(setq start (match-beginning 0))
(goto-char (match-end 0))
(looking-at (concat "\\(" regexp "\\)\\(" la-regexp "\\)"))))
(goto-char (min (point) start))))
(let ((start (point)))
(when (save-excursion
(and bound
(goto-char bound)
(re-search-backward (concat "\\(" lb-regexp "\\)\\("
regexp "\\)") start t)
(goto-char (match-end 0))
(looking-at la-regexp)))
(setq bound (max bound (match-end 0)))))
(when (re-search-forward (concat "\\(" lb-regexp "\\)\\(" regexp
"\\)\\(" la-regexp "\\)")
bound noerror count)
(goto-char (match-end 1))
(re-search-forward regexp bound noerror)))
0445デフォルトの名無しさん
NGNG(let ((start 0))
(while (string-match "\\\\\\\\\\|\\\\\\*\\|\\\\\\+\\|\\+\\|\\*\\|\\\\{"
lb-regexp start)
(when (member (match-string 0 lb-regexp) '("+" "*" "\\{"))
(signal 'search-failed "look-behind regexp must be fixed length."))
(setq start (max (1+ start) (match-end 0)))))
0446デフォルトの名無しさん
NGNG"(?<a)b(?=a)"をCOUNTパラメタ付きで検索してみれ。
ポイントが最初のaの後ろにある時、
"(?<a)ba"も検索してみれ。
0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNGユーティリティ
(defun variable-length-regexp-p (regexp)
(catch 'result
(let ((start 0))
(while (string-match "\\\\\\\\\\|\\\\\\*\\|\\\\\\+\\|\\+\\|\\*\\|\\\\{"
regexp start)
(when (member (match-string 0 regexp) '("+" "*" "\\{"))
(throw 'result t))
(setq start (max (1+ start) (match-end 0)))))))
(defun concat-with-paren (&rest regexps)
(concat "\\(" (mapconcat #'identity regexps "\\)\\(") "\\)"))
0449デフォルトの名無しさん
NGNG(defun re-search-forward-lb-la (lb-regexp regexp la-regexp
&optional bound noerror count)
(when (variable-length-regexp-p lb-regexp)
(signal 'search-failed "look-behind regexp must be fixed length."))
(let ((beginning (point)) p)
(and (re-search-forward regexp bound t)
(goto-char (match-beginning 0))
(re-search-backward lb-regexp nil t)
(setq p (match-beginning 0))
(goto-char (match-end 0))
(looking-at (concat-with-paren regexp la-regexp))
(setq beginning (min beginning p)))
(and bound
(goto-char bound)
(re-search-backward (concat-with-paren lb-regexp regexp)
beginning t)
(goto-char (match-end 0))
(looking-at la-regexp)
(setq bound (max bound (match-end 0))))
(goto-char beginning))
(catch 'result
(dotimes (i (or count 1) (match-beginning 0))
(if (re-search-forward (concat-with-paren lb-regexp regexp la-regexp)
bound noerror)
(progn
(goto-char (match-end 1))
(re-search-forward regexp bound noerror))
(throw 'result nil)))))
0450デフォルトの名無しさん
NGNGbound は la-regexp の match-beginning にしないとだめだよ。
.+(?=r) を barbaz から検索…みたいに、 la-regexp 以降まで一致しちゃう場合があるでしょ。
ところで、 lb-regexp で ? とか \| も弾いて、ほんとに固定長にしちゃえば、
search-backward しなくても、その長さだけ戻れば済みそうな気がする。
最初に regexp を探す場合で、 >>443 を aaaaaa とかから検索するには、
match しなかった場合に、 regexp の match-beginning より一文字後から再検索すればいいかな。
>>446 は、全部の b に一回ずつ match するのが正しいのかな。
0451デフォルトの名無しさん
NGNG(defun re-search-forward-lb-la (lb-regexp regexp la-regexp
&optional bound noerror count)
(or count (setq count 1))
(or (integerp count)
(signal 'wrong-type-argument (list 'integerp count)))
(or bound (setq bound (if (< count 0) (point-min) (point-max))))
(let ((start (point))
(forward (if (< 0 count) t (setq count (- count)) nil))
(found t))
(while (and found (< 0 count))
(unless (if forward
(re-search-forward-lb-la-1 lb-regexp regexp la-regexp bound)
(re-search-backward-lb-la-1 lb-regexp regexp la-regexp bound))
(goto-char start)
(if noerror
(setq found nil)
(error "Search failed: %S %S %S" lb-regexp regexp la-regexp)))
(setq count (1- count)))
(if found
(point)
(unless (eq t noerror)
(goto-char bound)))))
0452デフォルトの名無しさん
NGNG(defun re-search-forward-lb-la-1 (lb-regexp regexp la-regexp bound)
(let ((tmp-bound nil)
(not-found t))
(while (and not-found
(re-search-forward (concat "\\(" regexp "\\)\\(" la-regexp "\\)")
tmp-bound t))
(if (< bound (match-end 1))
(setq tmp-bound (1- (match-end 0)))
(goto-char (match-beginning 0))
(if (save-match-data
(re-search-backward (concat "\\(" lb-regexp "\\)\\=") nil t))
(progn (goto-char (match-beginning 1))
(re-search-forward regexp (match-end 1))
(setq not-found nil))
(goto-char (1+ (match-beginning 0))))))
(not not-found)))
0453デフォルトの名無しさん
NGNG(defun re-search-backward-lb-la-1 (lb-regexp regexp la-regexp bound)
(let ((tmp-bound nil)
(not-found t))
(while (and not-found
(re-search-backward (concat "\\(" lb-regexp "\\)\\(" regexp "\\)")
tmp-bound t))
(if (< (match-end 1) bound)
(setq tmp-bound (1+ (match-beginning 0)))
(goto-char (match-end 0))
(if (save-match-data (looking-at la-regexp))
(progn (goto-char (match-end 0))
(re-search-backward regexp (match-end 1))
(setq not-found nil))
(goto-char (1- (match-end 0))))))
(not not-found)))
0454デフォルトの名無しさん
NGNG(and (re-search-forward-lb-la "a" "a*" "a" nil t -1) (match-string 0))
=> ""
0455デフォルトの名無しさん
NGNG(and (re-search-forward-lb-la "「" "a*" "」" nil t -1) (match-string 0))
=> ""
(aaaaa になって欲しい)
0456デフォルトの名無しさん
NGNG> (progn (goto-char (match-end 0))
> (re-search-backward regexp (match-end 1))
> (setq not-found nil))
を
< (progn (goto-char (match-end 1))
< (re-search-forward regexp (match-end 0))
< (setq not-found nil))
にすればいいのかな?
0457デフォルトの名無しさん
NGNG(defun split-regexp (regexp)
(let ((start 0) r)
(while (string-match "\\\\\\\\\\|\\\\(\\?:\\|\\\\[sScC].\\|\\\\.\\|."
regexp start)
(when (string= (match-string 0 regexp) "[")
(string-match "\\[^?]?\\(\\[:[a-z]+:\\]\\|[^]]\\)*\\]" regexp
(match-beginning 0)))
(push (match-string 0 regexp) r)
(setq start (max (1+ start) (match-end 0))))
(nreverse r)))
(defun regexp-match-length (regexp)
(catch 'giveup
(let ((count 0))
(dolist (x (split-regexp regexp) count)
(cond ((member x '("+" "*" "?" "\\{" "\\|"
"\\1" "\\2" "\\3" "\\4" "\\5"
"\\6" "\\7" "\\8" "\\9"))
(throw 'giveup nil))
((member x '("^" "$" "\\(" "\\)" "\\`" "\\'"
"\\=" "\\b" "\\B" "\\<" "\\>")))
((setq count (1+ count))))))))
0458デフォルトの名無しさん
NGNG(defun concat-with-paren (&rest regexps)
(concat "\\(" (mapconcat #'identity regexps "\\)\\(") "\\)"))
(defun fixup-range-for-lb-la (lb-regexp regexp la-regexp beginning end)
(save-excursion
(and end
(goto-char end)
(re-search-backward (concat-with-paren lb-regexp regexp) nil t)
(>= (match-end 1) (or beginning (point-min)))
(looking-at (concat-with-paren lb-regexp regexp la-regexp))
(setq end (max end (match-end 0))))
(and beginning
(let ((len (or (regexp-match-length lb-regexp)
(error "unsupported look-behind regexp feature."))))
(goto-char (- beginning len)))
(re-search-forward (concat-with-paren lb-regexp regexp la-regexp)
end t)
(setq beginning (min beginning (match-beginning 0))))
(list beginning end)))
0459デフォルトの名無しさん
NGNG(defun re-search-forward-lb-la (lb-regexp regexp la-regexp
&optional bound noerror count)
(if (and count (< count 0))
(re-search-backward-lb-la lb-regexp regexp la-regexp bound noerror
(- count))
(apply (lambda (b e) (setq bound e) (goto-char b))
(fixup-range-for-lb-la lb-regexp regexp la-regexp (point) bound))
(let ((lb-depth (regexp-opt-depth (concat-with-paren lb-regexp)))
(count (or count 1))
(found t))
(while (and found (>= (setq count (1- count)) 0))
(if (re-search-forward (concat-with-paren lb-regexp regexp la-regexp)
bound noerror)
(progn
(goto-char (match-end 1))
(re-search-forward regexp (match-end (1+ lb-depth))))
(setq found nil)))
(and found (point)))))
0460デフォルトの名無しさん
NGNG(defun re-search-backward-lb-la (lb-regexp regexp la-regexp
&optional bound noerror count)
(if (and count (< count 0))
(re-search-forward-lb-la lb-regexp regexp la-regexp bound noerror
(- count))
(apply (lambda (b e) (setq bound b) (goto-char e))
(fixup-range-for-lb-la lb-regexp regexp la-regexp bound (point)))
(let ((lb-depth (regexp-opt-depth (concat-with-paren lb-regexp)))
(count (or count 1))
(found t))
(while (and found (>= (setq count (1- count)) 0))
(if (re-search-backward (concat-with-paren lb-regexp regexp la-regexp)
bound noerror)
(progn
(goto-char (match-end 1))
(re-search-forward regexp (match-end (1+ lb-depth)))
(goto-char (match-beginning 0)))
(setq found nil)))
(and found (point)))))
0461デフォルトの名無しさん
NGNG(defun string-match-lb-la (lb-regexp regexp la-regexp string &optional start)
(with-temp-buffer
(insert string)
(apply (lambda (b e) (setq start b))
(fixup-range-for-lb-la lb-regexp regexp la-regexp start nil)))
(let ((lb-depth (regexp-opt-depth (concat-with-paren lb-regexp))))
(when (string-match (concat-with-paren lb-regexp regexp la-regexp)
string start)
(string-match regexp (substring string 0 (match-end (1+ lb-depth)))
(match-end 1)))))
0462デフォルトの名無しさん
NGNG本体のa+に一致してしまわない?
0463デフォルトの名無しさん
NGNG変数 end あたりに束縛しておいて、最後のマッチを
(re-search-forward regexp (min (match-end (1+ lb-depth)) end))
こんなふうにすればいいのかな。
0464デフォルトの名無しさん
NGNGa+(?=.+) みたいな嫌な la-regexp がくると、 bound が無効化されちゃうね。
regexp が bound より向こうで始まってないかも調べないといけなそう。
re-search-forward のときに bound が (point) より小さいと error が出ちゃう。
ところで >>446 の
> abababababaとなっている時、
> "(?<a)b(?=a)"をCOUNTパラメタ付きで検索してみれ。
って、何回 match するのが正しいんだろう…
re-search-forward に任せると三回だし、自前で match させれば五回にできるし。
0465デフォルトの名無しさん
NGNGbbb
となるね
0466デフォルトの名無しさん
NGNG(defun test-lb-la ()
(interactive)
(with-temp-buffer
(switch-to-buffer (current-buffer))
(insert "aaaaa")
(goto-char (+ (point-min) 1))
(re-search-forward-lb-la "a" "a+" ".+" (+ (point-min) 3))
(assert (string= (match-string 0) "aa"))
(erase-buffer)
(insert "||aaa||")
(re-search-backward-lb-la "|" "a+" "|")
(assert (string= (match-string 0) "aaa"))
(goto-char (1+ (point-min)))
(re-search-forward-lb-la "||" ".*" "||")
(assert (string= (match-string 0) "aaa"))
(erase-buffer)
(insert "bababab")
(goto-char (point-min))
(re-search-forward-lb-la "b" "a" "b" nil nil 2)
(assert (point) (+ (point-min) 6))))
0467デフォルトの名無しさん
NGNG@@ -48,7 +49,8 @@ (defun re-search-forward-lb-la (lb-regex
(- count))
- (apply (lambda (b e) (setq bound e) (goto-char b))
- (fixup-range-for-lb-la lb-regexp regexp la-regexp (point) bound))
(let ((lb-depth (regexp-opt-depth (concat-with-paren lb-regexp)))
(count (or count 1))
- (found t))
+ (found t)
+ (end bound))
+ (apply (lambda (b e) (setq bound e) (goto-char b))
+ (fixup-range-for-lb-la lb-regexp regexp la-regexp (point) bound))
(while (and found (>= (setq count (1- count)) 0))
@@ -58,3 +60,4 @@ (defun re-search-forward-lb-la (lb-regex
(goto-char (match-end 1))
- (re-search-forward regexp (match-end (1+ lb-depth))))
+ (re-search-forward regexp (min (match-end (1+ lb-depth))
+ (or end (point-max)))))
(setq found nil)))
0468デフォルトの名無しさん
NGNG@@ -67,7 +70,8 @@ (defun re-search-backward-lb-la (lb-rege
(- count))
- (apply (lambda (b e) (setq bound b) (goto-char e))
- (fixup-range-for-lb-la lb-regexp regexp la-regexp bound (point)))
(let ((lb-depth (regexp-opt-depth (concat-with-paren lb-regexp)))
(count (or count 1))
- (found t))
+ (found t)
+ (end (point)))
+ (apply (lambda (b e) (setq bound b) (goto-char e))
+ (fixup-range-for-lb-la lb-regexp regexp la-regexp bound (point)))
(while (and found (>= (setq count (1- count)) 0))
@@ -77,3 +81,3 @@ (defun re-search-backward-lb-la (lb-rege
(goto-char (match-end 1))
- (re-search-forward regexp (match-end (1+ lb-depth)))
+ (re-search-forward regexp (min (match-end (1+ lb-depth)) end))
(goto-char (match-beginning 0)))
0469デフォルトの名無しさん
NGNG(insert "aaa")
(goto-char (point-min))
(re-search-forward-lb-la "" "a" "aa" (+ (point-min) 2))
0470デフォルトの名無しさん
NGNGlookahead分もboundまで、で十分じゃないの?
lookbackは、regexpがマッチしてから判定し、pointより前も見る。
実装は、アンカーを使えば簡単だろう。
match-dataは、regexpにマッチしたものが設定されればいい?
0471デフォルトの名無しさん
NGNG一文字ずつずらしながら "hoge\=" を検索することになる。
look-behind も look-ahead も (point) と bound の間にあることにして
こんなので十分なんじゃないか?
(defun re-search-forward-lb-la (lb-regexp regexp la-regexp
&optional bound noerror count)
(let ((lb-depth (regexp-opt-depth (concat "\\(" lb-regexp "\\)")))
(re (concat "\\(" lb-regexp "\\)\\(" regexp "\\)\\(" la-regexp "\\)"))
(count (or count 1)))
(save-excursion
(while (and (>= (setq count (1- count)) 0)
(re-search-forward re bound noerror))
(goto-char (match-beginning (1+ lb-depth)))
(re-search-forward regexp (match-end (1+ lb-depth)))))
(if (match-data 0)
(goto-char (match-end 0))
(unless (eq bound t)
(goto-char bound))
nil)))
0472470
NGNG> look-behind をそのように実装した場合、"(?<hoge)." のような検索をすると
> 一文字ずつずらしながら "hoge\=" を検索することになる。
それはわかるが、使う側の問題と考えたい。
むしろ、negative lookbehind and/or lookaheadへの展開を期待してるんだが。
0473デフォルトの名無しさん
NGNGの任意の文字列にマッチする正規表現を作ってやり、マッチした文字列が元の
正規表現とマッチしないことを確認するといいんじゃないだろうか。
アルゴリズムは >>451-453 になるだろうね。
(defun split-regexp (regexp)
(let ((re (mapconcat #'identity
'("\\\\\\\\" "\\\\(\\?:" "\\\\[sScC]."
"\\\\{[0-9]*\\(,[0-9]*\\)?\\\\}" "\\\\."
"\\[^?]?\\(\\[:[a-z]+:\\]\\|[^]]\\)*\\]"
".")
"\\|"))
(start 0) r)
(while (string-match re regexp start)
(push (match-string 0 regexp) r)
(setq start (max (1+ start) (match-end 0))))
(nreverse r)))
(defun translate-regexp-to-dot (regexp)
(apply #'concat
(mapcar (lambda (re)
(if (or (member re '("*" "+" "?" "^" "$"))
(and (not (string= re "\\\\"))
(string-match "\\`\\\\" re)))
re
"."))
(split-regexp regexp))))
0474470
NGNG> negative に対応するとすると、まずはこんな感じで元の正規表現と同じ長さ
> の任意の文字列にマッチする正規表現を作ってやり、マッチした文字列が元の
> 正規表現とマッチしないことを確認するといいんじゃないだろうか。
違うと思う。
0475デフォルトの名無しさん
NGNG(and (re-search-forward regexp)
(not (re-search-forward (concat "\\=\\(" la-regexp "\\)"))))
って感じじゃない?
0477デフォルトの名無しさん
NGNGperl -e 'print "abababa" =~ m/.*(?!a)/g, "\n"'
abababa
perl -e 'print "abababa" =~ m/(?<!a).*/g, "\n"'
abababa
となるから余計に食っちゃう分にはかまわないみたいだが。
0478デフォルトの名無しさん
NGNG(defun re-search-forward-nla-1 (regexp nla-regexp bound)
;; bound should be non-nil
(let (tmp-bound
(not-found t))
(while (and not-found (re-search-forward regexp bound t))
(if (save-match-data (not (looking-at nla-regexp)))
(setq not-found nil)
(while (progn (goto-char (match-beginning 0))
(setq tmp-bound (1- (match-end 0)))
(and not-found (re-search-forward regexp tmp-bound t)))
(if (save-match-data (not (looking-at nla-regexp)))
(setq not-found nil)))
(forward-char)))
(if not-found
nil
(goto-char (match-end 0))
t)))
0479デフォルトの名無しさん
NGNGγ ̄ ゚・ 。ヽ
へ_ノ゚゚・゚。γ⌒ヽω゚)
ノo・゚゚。 ´д。ξ、 ν″
ι 。Дζ_ゝ`ゞo〉 <スイ...マ...セ...ゴボ..ゴボッ...チョッ...ト..ズズズ...ココトボリマ...マ...グボッ
/三≡゚・゚ つ "⌒つ
〜〈 `,∀゚・゚。 っ ヘノ■)
ζ・∀・・)ι゚。゚゚ 'Д⌒J
ノ ∴ι"ヾー。~'つ っ
(_と 。゚゚・・ /⌒ヽ゚ 。)
)゚・゚。゚゚ノ ";
|。/|゚ / ,’
// |゚| .
U .U _
0480学生
NGNG学校の課題なのですがどうしてもできません。
次のような動作をするかんすうrevをつくれ
(rev '(a b c d e f))→(f e d c b a)
(rev '((a b) c (d e f)))→((d e f) c (a b))
誰か私を助けてください!!!
0481デフォルトの名無しさん
NGNG0482学生
NGNG0483デフォルトの名無しさん
NGNG(cond ((equal x '(a b c d e f)) '(f e d c b a))
((equal x '((a b) c (d e f))) '((d e f) c (a b)))))
0484デフォルトの名無しさん
NGNG0485デフォルトの名無しさん
NGNG(require 'cl)
(reduce #'(lambda (seq item) (cons item seq)) sequence :initial-value nil))
これが俺のお気に入り。
0486デフォルトの名無しさん
NGNG(let ((f #'(lambda (list reversed f)
(if (null list)
reversed
(funcall f (cdr list) (cons (car list) reversed) f)))))
(funcall f list '() f)))
0487デフォルトの名無しさん
NGNG0488デフォルトの名無しさん
NGNG(let ((f #'(lambda (list reversed f)
(if (null list)
reversed
(funcall f (cdr list) (cons (car list) reversed) f)))))
(funcall f list '() f)))
0489デフォルトの名無しさん
NGNG(defun rev (x) (if (consp x) (nconc (rev (cdr x)) (list (car x))) x))
非再帰版
(defun rev (x)
(let ((l (list x)) p)
(while l
(if (consp (car l))
(setq l (cons (car (car l)) (cons (cdr (car l)) (cdr l)))
p (cons nil p))
(setq p (cons (cons (or (car l) (car p)) (car (cdr p))) (cdr (cdr p)))
l (cdr l))))
(car (car p))))
0490デフォルトの名無しさん
NGNG(let (prev next)
(while list
(setq next (cdr list))
(setcdr list prev)
(setq prev list
list next))
prev))
(defun rev (list)
(nrev (copy-sequence list)))
0491デフォルトの名無しさん
NGNG知っている人が書いてくれると初心者には便利かもしれない。
elisp上で動く数行の簡単なゲームって誰かつくっていないのかい?
リストを使った並べ替えパズルなんてのは簡単に出来そうな気がするんだが。
0492学生
NGNG0493491
NGNG(defun game()
(interactive)
(let (rtn rnd)
(setq rnd (random 10))
(setq rtn (read-from-minibuffer "数字を当ててみて?(0-9) "))
(setq rtn (string-to-number rtn))
(while (/= rtn rnd)
(setq rtn (read-from-minibuffer "ちょっとちがうな。(0-9) "))
(setq rtn (string-to-number rtn))
(message "あたり。答えは <%d> でした。" rnd))
)
)
0494デフォルトの名無しさん
NGNG変数名rtnとrndは見間違いやすいので、例えばanswerとinputなどとする。
letの後でsetqで値を代入する代わりに、let内で代入してしまう方が短くなる。
閉じ括弧は一箇所にまとめて書く。これは慣習。
そうすると、こんな風になります。
(defun game ()
(interactive)
(let ((answer (random 10))
(input (string-to-number
(read-from-minibuffer "数字を当ててみて?(0-9) "))))
(while (/= answer input)
(setq input (string-to-number
(read-from-minibuffer "ちょっとちがうな。(0-9) "))))
(message "あたり。答えは <%d> でした。" answer)))
0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/unix/1063880951/
0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNG(defun mona ()
(interactive)
(while t
(message "( ´∀`)")
(sit-for 2)
(message "(´∀` )")
(sit-for 2)
)
)
0499デフォルトの名無しさん
NGNG(interactive (list (let ((s "0123456789") (i 10) j c)
(while (< 6 i)
(setq j (random i) i (1- i) c (aref s i))
(aset s i (aref s j))
(aset s j c))
(substring s 6))))
(let ((prompt "Input 4 digits: ")
(count 1)
num hit blow)
(while (not (equal ans (setq num (read-string prompt))))
(setq count (1+ count))
(if (not (string-match "^[0-9][0-9][0-9][0-9]$" num))
(setq prompt "Input 4 digits[0-9]: ")
(setq hit 0 blow 0)
(let ((i 0))
(while (< i 4)
(if (= (aref num i) (aref ans i)) (setq hit (1+ hit)))
(setq i (1+ i))))
(let ((i 0))
(while (< i 4)
(if (string-match (string (aref num i)) ans) (setq blow (1+ blow)))
(setq i (1+ i)))
(setq blow (- blow hit)))
(setq prompt (format "%s: %d hit, %d blow. Input 4 digits: "
num hit blow))))
(if (= count 1)
(message "You hit %s, in the first try." ans)
(message "You hit %s, in %d tries." ans count))))
0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNG(read-from-minibuffer " │○│
―┼―┼―
│×│
―┼―┼―
│ │ コンマで区切って2つの数字を入力してください。(例 0,0)")
>>496さんの勧めに従って、途中経過は、
http://pc5.2ch.net/test/read.cgi/unix/1063880951/
の方でやったほうがよいかな? それで、完成品をここに展示と。
>>498さんも恥ずかしがらずに、トライしましょう。
0502デフォルトの名無しさん
NGNGついでに定数としてpiとradを付けたしたので、三角関数とかは
?>(sin (* rad 90))
でラジアンから度(degree)の単位系になる。
(defun minicalc ()
(interactive)
(let (expression answer pi rad)
(setq pi 3.14159
(setq rad (/ pi 180))
(setq expression (read-from-buffer "?>" nil nil 'read))
(setq answer (eval expression))
(if (integerp answer)
(message (int-to-string answer))
(message (format "%f" answer)))))
0503デフォルトの名無しさん
NGNG(interactive "x?>")
(let ((rad degrees-to-radians))
(message "%s" (eval sexp))))
0504デフォルトの名無しさん
NGNG(defun index (x y) (+ (* y 3) x))
(defun ox-line (vector y)
(format "%c|%c|%c"
(aref vector (index 0 y))
(aref vector (index 1 y))
(aref vector (index 2 y))))
(defun ox-board (vector)
(format "%s\n-+-+-\n%s\n-+-+-\n%s\n"
(ox-line vector 0)
(ox-line vector 1)
(ox-line vector 2)))
(defun ox-read (vector o-or-x)
(1- (string-to-int
(read-from-minibuffer (format "%s (%cの番です) " (ox-board board)
o-or-x)))))
(defun ox ()
(interactive)
(let ((board (vconcat '(?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9))))
(while t
(aset board (ox-read board ?O) ?O)
(aset board (ox-read board ?X) ?X))))
0505502
NGNGおーーーっ、こんなに短くできるんですか!スゴイ。
0506502
NGNG編集中のテキストや電子書籍などのテキストの"ー"をキター━━━(゚∀゚)━━━変換。
(defun kitaaa ()
(interactive)
(goto-char 0)
(replace-string "ー" "━━━(゚∀゚)━━━"))
0507デフォルトの名無しさん
NGNGThis function is usually the wrong thing to use in a Lisp program.
What you probably want is a loop like this:
(while (search-forward from-string nil t)
(replace-match to-string nil t))
which will run faster and will not set the mark or print anything.
(You may need a more complex loop if from-string can match the null string
and to-string is also null.)
0508502
NGNG(defun super-decyu ()
(interactive)
(let (count jtables rep orig)
(setq jtables '(("さ" "ちゃ") ("し" "ち") ("す" "ちゅ") ("せ" "ちぇ") ("そ" "ちょ")
("サ" "チャ") ("シ" "チ") ("ス" "チュ") ("セ" "チェ") ("ソ" "チョ")
("だ" "ら") ("で" "れ") ("ど" "ろ") ("ダ" "ラ") ("デ" "レ") ("ド" "ロ")))
(setq count 0)
(while (> 26 count)
(setq orig (car (nth count jtables)))
(setq rep (cdr (nth count jtables)))
(goto-char 0)
(replace-string orig rep)
(setq count (+ count 1)))))
0509デフォルトの名無しさん
NGNG変数に値を束縛するのには、なるべく let を使う。setq は必要な場合だけ。
replace-string は使っちゃだめ。
つーか、マニュアルくらい一通り目を通せ。
空白を「 」にするのはやめれ。消えて見えるのがいやなら に。
(defun super-decyu ()
(interactive)
(let* ((jtables '(("さ" . "ちゃ") ("し" . "ち") ("す" . "ちゅ")
("せ" . "ちぇ") ("そ" . "ちょ")
("サ" . "チャ") ("シ" . "チ") ("ス" . "チュ")
("セ" . "チェ") ("ソ" . "チョ")
("だ" . "ら") ("で" . "れ") ("ど" . "ろ")
("ダ" . "ラ") ("デ" . "レ") ("ド" . "ロ")))
(regexp (regexp-opt (mapcar #'car jtables))))
(goto-char (point-min))
(while (re-search-forward regexp nil t)
(let ((rep (cdr (assoc (match-string 0) jtables))))
(when (stringp rep)
(replace-match rep))))))
0510502
NGNG文字化けするから変なコードの文字列を見て親切にwhile文で厳密に文字列を
チェックしてループした方が良いよっていっているのですかね?
This character sequence is the ASCII art using the Japanese character,
and the j0ke of the cultural in this BBS is mounted.
Neither speed nor high rate is so important.
Were you considered that I am searching some special character sequences?
0511デフォルトの名無しさん
NGNGM-x describe-function replace-string
0512502
NGNG空白入れちゃいけませんでしたか。ブラウザで見ると全角のスペースでインデント
入るんで簡単だったので。
マニュアル読んでるんですけど、lisp初めて三日ほどなのでちょっと。。。。
replace-stringは駄目なんですか?search-forwardだと厳密に文字列を調べるとしか書いて
無かったので問題ないかなっと思ったんですが。
0513デフォルトの名無しさん
NGNGシンプルな関数を使うべき。next-line ではなく forward-line をとかね
0514デフォルトの名無しさん
NGNG(while (search-forward from-string nil t)
(replace-match to-string nil t)))
な関数ないの?
0515(define (´∀`) 'マターリ)
NGNG(defun mona ()
(interactive)
(dolist ( ´∀` (let ((´∀` '( ´∀` ´∀` )))
(rplacd (cdr ´∀` ) ´∀` )))
(message "%s" (list ´∀`)) (sit-for 2)))
0516デフォルトの名無しさん
NGNG0517デフォルトの名無しさん
NGNG0518デフォルトの名無しさん
NGNG(interactive)
(dolist (mona '#1=( ´∀` ´∀` . #1#))
(message "%s" (list mona)) (sit-for 2)))
0519(define (´∀`) 'マターリ)
NGNG(interactive)
(dolist (y (let ((x (mapcar #'list '( ´∀` ´∀` )))) (nconc x x)))
(message "%s" y) (sit-for 2)))
(defun mona ()
(interactive)
(while (mapcar (lambda (x) (message "%s" (list x)) (sit-for 2))
'( ´∀` ´∀` ))))
0520デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNG(defun my-nconc (&rest lists)
(let ((l (car lists)) (r (cdr lists)))
(while r
(while (cdr l)
(setq l (cdr l)))
(setcdr l (car r))
(setq r (cdr r)))
(car lists)))
(let ((a '(a b)) (b '(c d e)) (c '(f g)))
(list (my-nconc a b c) a b c))
=> ((a b c d e f g) (a b c d e f g) (c d e f g) (f g))
0522デフォルトの名無しさん
NGNGx = (a b) = (a b . ())
'(a b)だと二回目以降の呼び出しで、やばいのでlistを使ってる。
(nconc x x)でxの最後の()をx(= (a b . ()))に変える。
(a b . (a b . ()))
単純に置き換えるとこうだけど、
x(= (a b . ()))の最後の()は変えられてるので
(a b . (a b . (a b . ....))) = (a b a b a b . ....)
0523デフォルトの名無しさん
NGNG(interactive)
(while t
(message "%s" '( ´∀`))
(sit-for 2)
(message "%s" '(´∀` ))
(sit-for 2)))
これでええやん。
0524デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNG大体、Emacs Lisp Reference Manual では list とは nil で終端された cons
セルの連続、つまり Common Lisp での proper list と定義されてる。
引数に list を要求する関数やマクロに circular list を渡した場合の挙動
は未定義だし、たまたま希望通りの動作をしたとしても、それが将来にわたっ
て同等の動作をすると期待できるものでもなかろう。
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNG(defun kitaaa ()
(interactive)
(let ((゚∀゚ (mapconcat (lambda (x) (format "%s" (if (symbolp x) (list x) x)))
'("" ゚∀゚ ∀゚ ゚ ゚ ゚∀ ゚∀゚ "")
"━━━")))
(goto-char (point-min))
(while (re-search-forward "ー+" nil t) (replace-match ゚∀゚))))
0530デフォルトの名無しさん
NGNGがあるそうですが、dynamic scopeじゃ駄目ってのは常識
なんでしょうか?素人考えでは、
・何もしなければロック無し
・束縛はスレッド固有にして、スレッドを立てる時にコピー
で実現できそうに思ったのですが、間違っていたら
突っ込んでください。
0531デフォルトの名無しさん
NGNGEmacsのdynamic scope機構への変更が面倒くさいということなのではないでしょうか。
Dynamic scopeをサポートしているCommon Lispの処理系にマルチスレッド化されたものがあります。
0532デフォルトの名無しさん
NGNG、と思う今日この頃。
0533デフォルトの名無しさん
NGNGses-mode
0534デフォルトの名無しさん
NGNGループよりは再帰で書くのが良いという事は分かるが良く分からん。
標準ライブラリにもないし。
0535デフォルトの名無しさん
NGNGつまずいてます。
`equiv' は入れ子のリストには対応してないので、改良して `equiv*'
を作るっていう話なんですが、なぜ `equiv' に入れ子のリストを渡す
と必ず nil が返るのか分かりません。実際に実行してみると確かに
nil が返ってくるんですが…
(defun equiv (x y)
(cond
((and (null x) (null y)) t)
((or (null x) (null y) nil))
(t (and (eq (car x) (car y))
(equiv (cdr x) (cdr y))))))
(equiv '(dog (pig)) '(dog (pig)))
=> nil
0536デフォルトの名無しさん
NGNG再度 equiv が呼出されますよね。その際には
(equiv '(pig) '(pig)) のように呼出されると思うんですが
間違ってますか?これを自分で実行すると t が返ってきますが
(equiv '(dog (pig)) '(dog (pig))) では nil が返ってきます。
だからこの部分の解釈が間違ってるんだと思うんですが納得できない
んで誰かアドバイス下さい。
0537デフォルトの名無しさん
NGNG0538デフォルトの名無しさん
NGNGexpt
0539デフォルトの名無しさん
NGNG(if (or (null x) (null y)) (and (null x) (null y))
(and (eq (car x) (car y)) (equiv (cdr x) (cdr y)))))
0540デフォルトの名無しさん
NGNG(cdr '(dog (pig)))
=> ((pig))
(eq (car '((pig))) (car '((pig))))
=> nil
ってことでしたか。納得しました。
でもリストについて理解してたつもりなのまた混乱してきた…
基礎から出直してきます。
0541デフォルトの名無しさん
NGNGEmacs Lisp でループで書ける物に再帰を使うのは池沼だが、あえて書くなら
(defun square (x)
(* x x))
(defun power (x n)
(cond ((= n 0) 1)
((= n 1) x)
(t (* (if (= (% n 2) 0) 1 x)
(square (power x (/ n 2)))))))
0542デフォルトの名無しさん
NGNG(dog (pig)) って
| | | => | | | => nil
| |
dog | | | => nil
|
pig
こんな感じであってますかね?
0543デフォルトの名無しさん
NGNG0544デフォルトの名無しさん
NGNGサンクソ。激辛感動した。
loopで書けるのは分かっていたれど関数型言語だから再帰で書いてみたい。
再帰こそλの本質じゃないですか。チューリングマシン以外でコンピュータ
のメカニズムを記述できるのはラムだ!ラムダしか
0545デフォルトの名無しさん
NGNG(cond ((= n 0) 1)
((= n 1) x)
(t (* (power x (% n 2))
(square (power x (/ n 2)))))))
0546デフォルトの名無しさん
NGNG・HSPに関係の無い話題でスレッドを上げまくる
・HSPオフィシャルサイトの住人を名指しで誹謗中傷する
・重複スレを乱立させる
などの荒らし行為を行っています。
みんなで団結してム板のゴミどもを追い出しませんか?
【HSP関連スレ】
【皆のレイプ魔】HSP初質P25【WWEヲタ=ハゲ】
http://pc5.2ch.net/test/read.cgi/tech/1086878505/
HSP>>>>>>>>>>>>>C=糞w
http://pc5.2ch.net/test/read.cgi/tech/1071899663/
今日もどこかでHSP初心者が質問ですP19
http://pc5.2ch.net/test/read.cgi/tech/1084089079/
HSPについて
http://pc5.2ch.net/test/read.cgi/tech/1085149790/
0547デフォルトの名無しさん
NGNGを前提としている訳だ。簡単に言うと変数の取り扱いだ。
これをlisperはいちいち難しい言葉を使って束縛だの非破壊だのと言っている
のだ。つまりそれはフロイト的に言うと無意識の抵抗だ。HSP厨房のような
連中にLISPを気安く語って欲しくはないという無意識の抵抗が「束縛」とか
「非破壊的変数」などという言葉を発してしまうつまりは古典的ハッカーの
リビドーなのだ。
だがここで一つの疑問が残る。なぜにHSP厨なのかという点だ。恐らく事は
エディプスコンプレックスなのではないかと思う。つまり潜在的にLisper
(C++,Java等の高級言語ユーザーも含む)は、日夜アホで低レベルな会話や
車輪の再発明をしているそのアホさにコンプレックスを抱いているのだ。
つまりHSP厨はアホな父親像であり、コンプレックスを抱きつつあほな父親像
にエディプスコンプレックスを意識しているのだ。ということは、
Lisper(C++,Java等の高級言語ユーザーも含む)は、深層心理の何処かでHSP厨
を強く意識しているはずであり、厨のアホ父親像に劣等感さえ憶えてしまっている
という事が明らかとなるのである。
という事は、fancy新山が留学やunixuserドメインを持ちエリート指向丸出しであり
ながら隠れてアホなblogを書いているのは厨という存在を強く意識している
深層心理の現われであり、フロイト的に分析すると、fancy新山は将来アホオヤジ
になるに違いない。
0548デフォルトの名無しさん
NGNG(defun power-tailrecur (x n r)
(cond ((= n 0) r)
((= n 1) (* r x))
(t (power-tailrecur (* x x) (/ n 2) (if (= (% n 2) 0) r (* x r))))))
ループに展開
(defun power-loop (x n)
(let ((r 1))
(while (> n 1)
(setq r (if (= (% n 2) 0) r (* x r))
x (* x x)
n (/ n 2)))
(if (= n 0) r (* x r))))
0549デフォルトの名無しさん
NGNG(let ((r 1))
(while (> n 0)
(setq r (if (= (% n 2) 0) r (* x r))
x (* x x)
n (/ n 2)))
r))
0550デフォルトの名無しさん
NGNG(power-loop-548 10 1)
(power-loop-549 10 1))
Function Name Call Count Elapsed Time Average Time
============== ========== ============ ============
power-loop-549 10000 0.2789190000 2.789...e-05
power-loop-548 10000 0.1663990000 1.663...e-05
0551デフォルトの名無しさん
NGNG(let ((r 1))
(while (and (setq r (if (= (% n 2) 0) r (* x r))) (> n 1))
(setq x (* x x)
n (/ n 2)))
r))
0552デフォルトの名無しさん
NGNGを計算しようとしてサンプルを見ながらリストを使ってよりエレガントにしてみた。
(defun sum (n)
(if (> n 0)
(cons n (sum (- n 1)))
nil))
ところが最後のリスト(1 2 3)などを合計する所が分からないのですが、
どうしたらいいですか。
0553デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNG((lambda () (princ "こんにちはぁ〜っ、ラムでぇ〜す★")))
0555デフォルトの名無しさん
NGNG0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNGワロタ
0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNG(eval `(or ,@(mapcar (lambda (x) (list 'quote x)) list))))
(defun ronriseki (list)
(eval `(and ,@(mapcar (lambda (x) (list 'quote x)) list))))
0560(define (´∀`) 'マターリ)
NGNG(not (eval `(and ,@(mapcar #'not list)))))
(defun ronriseki (list)
(not (eval `(or ,@(mapcar #'not list)))))
0561(define (´∀`) 'マターリ)
NGNG(memq nil (mapcar #'not list)))
(defun ronriseki (list)
(not (memq nil list)))
0562デフォルトの名無しさん
NGNGエディタ毎の関数や命令の実装状況ってどうなってるんですかね?
xyzzy,Meadow,muleなどのelバージョンとか実装の比較や一覧の資料があると
いですね。
0563デフォルトの名無しさん
NGNGmuleはemacs19系かな。meadowはemacs20系。meadow2はemacs21系。
>>561がxyzzyで動かないのはmemqのせいかな。だったら、memberを使えばいいかも。
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNG見た目増えるからyoshiiiiiii.a....aa..aa.aa.a.aa.a.a.a.a..a.a.eeeeeeeee
.....良し。
しかし人が少ないスレだな。厨房はemacs使わずにVisuあーるすたdioか秀丸
なのだろうな。
0567デフォルトの名無しさん
NGNG0568デフォルトの名無しさん
NGNGただのxyzzyユーザーです。
0569デフォルトの名無しさん
NGNGなんだ、キチガイか...
0570566
NGNGλ...... λ...... λ......
λ...... λ......
λ...... λ......
λ...... λ......
λ...... λ......
λ......
λ...... λ...... λ......
0571デフォルトの名無しさん
NGNG変にめげないおもしろいやっちゃな。少し好きになったよ
0572デフォルトの名無しさん
NGNGxyzzyで動くの?とか、互換性はどうなってるの?とか聞かれても困るし、
xyzzyとEmacsの違いは自分で埋めてね。
0573デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNGEmacs Lispが遅いからcmailが遅い、
数百のメールを表示するのに数分かかるって言ってるんだけど
単にcmailがヘボなだけちゃうの?
0575デフォルトの名無しさん
NGNGそうだな。Gnus や Mew なら数秒だな。
Wanderlust は数分だけど(藁)
0576デフォルトの名無しさん
NGNGRuby>>>>>>>>|越えられない壁|>>elisp
0577デフォルトの名無しさん
NGNGその不等号は所要時間を比較しているんだな?
0578デフォルトの名無しさん
NGNGコールバックについて分かる人いませんか?
callN(),specbind()は分かったけど、GCPROn()はよく分かりません。
他にも、どんな場合にrecord_unwind_protect()が必要か、
lispを安全に呼び出せない場所はどう見分ければいいか、
とか基本的なことが分からなくて困っています。
0579デフォルトの名無しさん
NGNGまずはelisp manualを嫁。
GCPROn()はCのローカル変数なLisp_ObjectがGCされないように保護するマクロ。
record_unwind_protect()はelispのunwind-protectを理解すればわかる。
だけど>>578はspecbindやrecord_unwind_protectを使うよりも、Lisp関数に直接
対応するFletやFunwind_protectを呼ぶ方が早くて確実だと思う。あとevalと
FprognとFcons/Fcar/Fcdr/FlistぐらいあればS式作って呼ぶのはできるだろ。
文字列からシンボルを作るのはinternな。
0580デフォルトの名無しさん
NGNGttp://docs.biostat.wustl.edu/cgi-bin/info2html?(internals.info.gz)Top
これでも読んどけ。
0581578
NGNGありがとうございます。
GCについてはinfoにばっちり書いてありました。
record_unwind_protectは、使い方はいいのですが使いどころが
分からないのです。資源の解放は当然として、他に何を触ったら
元に戻す必要があるか、ということです。
その辺、emacs全体の設計を理解しないと難しいのでしょうか?
0582デフォルトの名無しさん
NGNGはっきりいって、そんな質問が出てくる方が信じがたい。
0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNG0588デフォルトの名無しさん
NGNG"Define an ilisp local variable."
(` (progn (lisp-deflocal '(, variable))
(defvar (, variable) (, default) (, documentation)))))
(`で始まる、このバッククォートの使い方は、仕様化された書き方でしょうか?
ilispで見つけたのだけど。
0590デフォルトの名無しさん
NGNGIn old Emacs versions, before version 19.29, ``' used a different
syntax which required an extra level of parentheses around the entire
backquote construct. Likewise, each `,' or `,@' substitution required
an extra level of parentheses surrounding both the `,' or `,@' and the
following expression. The old syntax required whitespace between the
``', `,' or `,@' and the following expression.
This syntax is still accepted, for compatibility with old Emacs
versions, but we recommend not using it in new programs.
0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNGなんかタイプしてから少し遅れて文字がついてくる感じです
なんか設定がまずい?それともこーいうもん?
xyzzy はスクロールも描画も早いですよね
0594デフォルトの名無しさん
NGNG0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNG0597BlackLightOfStar ◆ifsBJ/KedU
NGNG0598デフォルトの名無しさん
NGNG0599デフォルトの名無しさん
NGNGその「Re:」というのは何かな、と疑問を吹っかけてみる。
0600デフォルトの名無しさん
NGNG0601BlackLightOfStar ◆ifsBJ/KedU
NGNGRe:>598 C-b C-dで何とか…。
0602デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1090227743/
ここの1?
0603デフォルトの名無しさん
NGNG0604デフォルトの名無しさん
NGNG0605デフォルトの名無しさん
NGNG0606デフォルトの名無しさん
NGNGまさかヘルプが起動してしまって右往左往してるとかじゃないよな? 違うよな?
0607デフォルトの名無しさん
NGNG0608デフォルトの名無しさん
NGNG0609BlackLightOfStar ◆ifsBJ/KedU
NGNG0610デフォルトの名無しさん
NGNG0611デフォルトの名無しさん
NGNG0612デフォルトの名無しさん
NGNGうざいな。
0613デフォルトの名無しさん
NGNG当の本人が、「返答」の意味がある、と思っているらしい。
0614デフォルトの名無しさん
NGNG割り当ててやればいいだけの話なんだが、
こう書いても彼にはきっと理解できないだろう。
と、煽ってみるテスト。
0615BlackLightOfStar ◆ifsBJ/KedU
NGNG0616デフォルトの名無しさん
NGNG0617デフォルトの名無しさん
NGNG0618BlackLightOfStar ◆ifsBJ/KedU
NGNGカスタマイズしないでバックスペースが出来るのかどうかを問題にしよう。
WindowsのCygwinのemacsでは、バックスペースらしいキー割り当てがなかった。
0619BlackLightOfStar ◆ifsBJ/KedU
NGNG仕方がない、何か書いとこう。
(dotimes (x 10) (princ (format "%d" x)))
0620Conscientious Irrationalist ◆ZETA.aMskA
NGNGBLoS (BlackLightOfStar)、 WindowsでCygwin附属のemacsなど使用しない方がよい
NTEmacsスレへ行って、いずれかのNTEmacs binaryをダウンロードしてくるのがベストだ。
>>619
> (dotimes (x 10) (princ (format "%d" x)))
吾は自己主張欲の強い人間は嫌いではないが、あまり意味のない書き込みはしないでくれ。
それにどうせ書くんだったら再帰をしてほしかったよ。
毎日ナヨナヨした生活+思考をしているからそうなるんだよ。
出直してこい!
Man is that which is to be overcome...
-- Conscientious Irrationalist
0621デフォルトの名無しさん
NGNG0622BlackLightOfStar ◆ifsBJ/KedU
NGNGUnix系OSではEmacsを使うけどね。
バックスペースキーでバックスペースもできる。
C-hではやっぱりヘルプが出る?
0623デフォルトの名無しさん
NGNG0624デフォルトの名無しさん
NGNG0625デフォルトの名無しさん
NGNGnormal-erase-is-backspace が nil
なんだろ?
Emacs 以外のところでキーバインドを変えればいいじゃないか
そしてそれはスレ違いで板違いだよ
cygwin スレか UNIX 板に行っておいで
0626デフォルトの名無しさん
NGNG0627デフォルトの名無しさん
NGNG0628デフォルトの名無しさん
NGNG> 虫且って何て読むんですか?
Black Light Of Star
0629BlackLightOfStar ◆ifsBJ/KedU
NGNG0630デフォルトの名無しさん
NGNG0631デフォルトの名無しさん
NGNGdoctor.elくらい読んでから実装しなおすことを勧める>作者
0632BlackLightOfStar ◆ifsBJ/KedU
NGNG0633デフォルトの名無しさん
NGNGオレの>>625のアドバイスは試したんか?
>>632なんかして遊んでる暇があったら解決したかどうかくらい書いてよ
0634デフォルトの名無しさん
NGNG0635BlackLightOfStar ◆ifsBJ/KedU
NGNG(normal-erase-is-backspace)
eval((normal-erase-is-backspace))
eval-last-sexp-1(t)
eval-last-sexp(t)
eval-print-last-sexp()
* call-interactively(eval-print-last-sexp)
0636デフォルトの名無しさん
NGNGどうしようもないバカだなお前は
0637BlackLightOfStar ◆ifsBJ/KedU
NGNGnormal-erase-is-backspace
がLispの仕様書のどこに書いてある?
0638BlackLightOfStar ◆ifsBJ/KedU
NGNGnormal-erase-is-backspace
がLispの仕様書のどこに書いてある?
0639Conscientious Irrationalist ◆ZETA.aMskA
NGNG>>637
>>638
君、もうそれ飽きたよ。それがネタであるというのが丸見えである故、皆は
萎えてしまうわけだ。しかし、君が本当に素でそれを書いているのなら教えてやろう。
normal-erase-is-backspaceはt
そしてnormal-erase-is-backspaceは関数ではない
Emacsはcygwinターミナルではうまく動かない。
故に吾は>>620で別のを使用することを勧めたわけだ。
これ以上同じトピックを持ってきてこのスレを汚すのであれば「荒らし」と思われ
ても仕方ないな。
--------------------------------------------------------------------------------
Conscientious Irrationalist
0640デフォルトの名無しさん
NGNG> normal-erase-is-backspace
> がLispの仕様書のどこに書いてある?
という発言をするってのは、頭の中が腐ってるとしか思えない。
最初から分かってはいたことだけど。
0641デフォルトの名無しさん
NGNGttp://www.delorie.com/gnu/docs/emacs/emacs_512.html
Lisp の仕様、てだけじゃ
MacLisp なのか Interlisp なのか Lisp1.5 なのか AutoLisp なのか
newLISP なのか Scheme なのか CommonLisp なのか T なのか。
どれの仕様書のこと言っているのかわからないよね。
まあどれの仕様書にも eLisp の機能については書いてないだろうけど。
0642デフォルトの名無しさん
NGNG0643デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNGhttp://www.gnu.org/software/emacs/elisp-manual/
0645デフォルトの名無しさん
NGNG「ぐぐる厨」じゃないの?
0646BlackLightOfStar ◆ifsBJ/KedU
NGNG関数が定義されていません: normat-erase-is-backspace
xyzzyでやった。
xyzzyなら、BackSpaceキーが普通に使えるから問題ないけどね。
0647デフォルトの名無しさん
NGNG>>646 の人はわざとボケてるんでしょうか。それとも天然ですか?
普通のEmacs使いなら、C-h f normal-erase-is-backspace <RET> か
それで出てこなかったら C-h v normal-erase-is-backspace <RET> を
試してみると思うんですが...
0648デフォルトの名無しさん
NGNGだから透明あぼーん推奨。キチガイには触れないのが吉。
0649BlackLightOfStar ◆ifsBJ/KedU
NGNG0650デフォルトの名無しさん
NGNG0651デフォルトの名無しさん
NGNG>>637なんかして遊んでる暇があったら検索くらいしてよ.
> 知っているからなあ。というか
知らないんだよなぁ….
0652デフォルトの名無しさん
NGNG0653デフォルトの名無しさん
NGNGバックスペース云々はエディタとしてのEmacsの話じゃないのか?
……とか何を言っても無駄か。
0654デフォルトの名無しさん
NGNGEmacs Lisp (elisp) で書いたコードの配布物を何て呼んでます?
1. プログラム
2. スクリプト
3. マクロ
2はときどき見かけるけど、
3は言語要素のマクロと間違えそうだから違うような気がするし、
0655デフォルトの名無しさん
NGNGファイル 1 つでもパッケージ, 複数ファイルでもパッケージ.
なんとなく.
0656デフォルトの名無しさん
NGNGどれかっつったら1かな。
3はないだろ。
0657デフォルトの名無しさん
NGNG0658デフォルトの名無しさん
NGNG他の言語だと当然変な文なのだが。
マクロはありえない。
0659デフォルトの名無しさん
NGNGシェルスクリプトのことをシェルと呼ぶような薄ら寒さを感じる
0660デフォルトの名無しさん
NGNG思うに、*.elの拡張子をつかまえて、elにelisp(ファイル)と振り仮名が
ふってあるつもりでいるんじゃないかと。
*.elcはelispとは言わないし、*.elのことをEmacs Lispとも言わないし。
言語名はEmacs Lisp(またはその省略形でelispと呼ぶことも)、
ファイルや配布物はelisp(Emacs Lispとは言わない)。
例えば*.texとか*.psとか*.htmlとかだと同様の用法をする人多いと思うんだけど。
Windowsの人だと*.exeや*.zipもエグゼといったりジップといったりする人いるでしょ。
なぜか全ての拡張子に普遍的に使われる用法ではないとは感じるんだけど、
語呂の問題だろうか。
0662デフォルトの名無しさん
NGNG0663デフォルトの名無しさん
NGNG0664デフォルトの名無しさん
NGNG0665デフォルトの名無しさん
NGNG一つ一つのファイルに対しては library が正式ではないかな。
0666デフォルトの名無しさん
NGNG0667デフォルトの名無しさん
NGNG0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
05/02/21 07:35:50(interactive "r") で範囲指定された文字列を処理するような関数で、範囲指
定されていない場合にプロンプトが出て入力を聞いてくるようにしたいのです
が、どうすればいいでしょうか。
0670デフォルトの名無しさん
05/02/21 09:08:15(interactive (S式))
みたいにして、S式部分が関数の引数を返すようにする。
himark.elあたり参考にならないかな。
0671デフォルトの名無しさん
05/02/21 13:16:48出来ました! ありがとうございます。himark.el 思い切り参考になりました
0673デフォルトの名無しさん
05/03/15 20:12:100674デフォルトの名無しさん
2005/03/27(日) 15:31:30while (<>) {
一行を処理
}
みたいな感じのテキストファイル加工に使ってみたいのですが、
バッファを新しく作ってファイルをvisitするのが定跡なんですか?
0675デフォルトの名無しさん
2005/05/15(日) 18:56:480676デフォルトの名無しさん
2005/05/22(日) 18:33:520677デフォルトの名無しさん
2005/05/22(日) 23:38:390678デフォルトの名無しさん
2005/05/28(土) 12:50:24lispやってる人ってどういう人?
0679GreatFixer ◆ASWqyCy.nQ
2005/05/28(土) 12:55:400680デフォルトの名無しさん
2005/05/28(土) 15:03:350681Zeno ◆5nZQbNmQPs
2005/05/28(土) 15:38:11Reply-to:>>679
現在ではプロジェクトのメイン言語を LISP にする人口知能系
グループなどほとんどない。現実を知っておけ。
まあ、美しい言語ではあるがな。
________________________________________________________
セオドア・カジンスキー 「産業社会とその未来」 (aka. マニフェスト) の抜粋
http://www.cnn.com/US/9509/unabomber/09-19/am/excerpt.html
0682デフォルトの名無しさん
2005/05/28(土) 17:00:340683GreatFixer ◆ASWqyCy.nQ
2005/05/28(土) 17:59:100684Zeno ◆5nZQbNmQPs
2005/05/28(土) 18:43:55本当はマニフェスト全てを読むのが一番だが、上のは抜粋のみ。
それぐらいは全て読むべきだ。
それと、次にプログラミング言語を学ぶのであれば Python にしておけ。
________________________________________________________
セオドア・カジンスキー 「産業社会とその未来」 (aka. マニフェスト) の抜粋
http://www.cnn.com/US/9509/unabomber/09-19/am/excerpt.html
0685GreatFixer ◆ASWqyCy.nQ
2005/05/28(土) 18:48:260686Zeno ◆5nZQbNmQPs
2005/05/28(土) 18:52:24Reply-to:>>685
Perl はやってもよいが、あまり伸びない言語ではあるぞ。
吾はマニフェスト自体を話題に出してはいない。(それはシグネチャーとして参照されていただけだ。)
君が話題にだしてきたのだろ?
________________________________________________________
セオドア・カジンスキー 「産業社会とその未来」 (aka. マニフェスト) の抜粋
http://www.cnn.com/US/9509/unabomber/09-19/am/excerpt.html
0687GreatFixer ◆ASWqyCy.nQ
2005/05/28(土) 20:06:190688デフォルトの名無しさん
2005/05/28(土) 21:58:09それはない。
0689GreatFixer ◆ASWqyCy.nQ
2005/05/28(土) 22:37:300690デフォルトの名無しさん
2005/05/28(土) 23:48:48乱暴だが
Python=C like
Ruby=Perl like
0691デフォルトの名無しさん
2005/05/29(日) 00:13:280692デフォルトの名無しさん
2005/05/29(日) 10:39:18変態的なアンカーと意味不明なコテが特徴的
0693デフォルトの名無しさん
2005/05/29(日) 12:42:550694Zeno ◆5nZQbNmQPs
2005/05/29(日) 14:45:25Reply-to:>>692-693
吾は 2 チャンネルで一度も自作自演をしたことはないがな。
________________________________________________________
セオドア・カジンスキー 「産業社会とその未来」 (aka. マニフェスト) の抜粋
http://www.cnn.com/US/9509/unabomber/09-19/am/excerpt.html
0695GreatFixer ◆ASWqyCy.nQ
2005/05/30(月) 09:01:26Re:>>690 PerlってC likeじゃないの?
0696デフォルトの名無しさん
2005/07/28(木) 00:23:150697デフォルトの名無しさん
2005/08/27(土) 16:51:44ファイルを開く時に任意のバッファ名を付けたいんですが、
そのような関数が見当たりません。
もしかして、そういう事をするには先にバッファを作ってから
ファイルを開くってのが常套手段なんでしょうか?
0698デフォルトの名無しさん
2005/08/27(土) 17:31:14(my-file-name (expand-file-name "~/.emacs")))
(flet ((generate-new-buffer (name)
(get-buffer-create my-buffer-name)))
(find-file my-file-name)))
0699697
2005/08/27(土) 20:15:48どうもです。
随分トリッキーな感じのコードですが、確かに別名でバッファを作成出来ました。
ただ1つ問題があります。上の例だと、既に.emacsが開かれている場合は
そのバッファに移動するだけになってしまいます。
できれば、重複してロードしてしまいたんですが。
別名のほうは、リードオンリーにすれば問題はなさそうなんですが…
0700デフォルトの名無しさん
2005/08/27(土) 21:07:100701697
2005/08/27(土) 23:34:16ファイル挿入も考えたんですが、それだとモードがFundamentalのまま
になってしまい、構文ハイライトなどがなくてちょっとさみしいです。
ちょっと調べたところ、clone-indirect-bufferとか
make-indirect-bufferなどでバッファを複製できる事がわかりました。
これで、ファイルが読み込まれているかどうかで場合分けして、
読み込まれていない→>>698
読み込まれている→バッファ複製
で目的を達成できそうです。
とりあえず、ありがとうございました。
0702デフォルトの名無しさん
2005/08/28(日) 00:11:550703デフォルトの名無しさん
2005/08/28(日) 00:17:380704名無しさん@そうだ選挙に行こう
2005/09/11(日) 17:59:08(interactive "P")な関数において、引数がコンスセルかどうかを
チェックしていたりするものがあるんですが、引数にコンスセルが
渡ってくることってあるんでしょうか?
それとも、単にコンスセルを引数にして直接呼び出しに対応させてる
だけなんでしょうか?(どうも、そういう感じではなさそうなんですが...)
ちなみに、コンスセルの形式は、(NUM . CHAR)みたいな感じらしいです。
0705名無しさん@そうだ選挙に行こう
2005/09/11(日) 18:49:19(interactive "P")
(message "%S" x))
して M-x hoge、C-u M-x hoge、C-u 4 M-x hoge を比べてみれ
0706名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:27:30cons cell かどうかが肝なんだからそれは的外れじゃん?
>>704
interactive に呼出して cons cell が来ることはない…と思う。やっぱ直呼
び用なんじゃないの?
0707名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:38:490708名無しさん@そうだ選挙に行こう
2005/09/11(日) 19:49:56ああ、まあ cons っちゃー cons だけど (NUM . CHAR) の形式を期待してるら
しいからさ。
0709704
2005/09/12(月) 00:56:55おお!確かに(interactive "P")では、常に整数だと思ってたらダメですね。
試しに(interactive "p")にしたら、常に整数が渡ってくるようですが、
そのかわりに、引数のありなしが判定できそうにないです。
ようするに、引数のありなしを判定するには(interactive "P")にする
必要があるが、引数をconspする必要があるという理解でいいんでしょうか?
>>708
すみません。当てずっぽうで言ったことなんで。。。
>>705-708
ありがとうございました。
0710デフォルトの名無しさん
2005/09/13(火) 10:24:030711デフォルトの名無しさん
2005/09/14(水) 02:14:03ttp://www.foldr.org/~michaelw/emacs/mwe-color-box.el
0712デフォルトの名無しさん
2005/09/19(月) 23:23:55"ニヤニヤ"
(message "ニヤニヤ"))
(・∀・)C-u C-x C-e
0713デフォルトの名無しさん
2005/09/19(月) 23:26:32(defun ・∀・ ()
"ニヤニヤ"
'ニヤニヤ)
0714デフォルトの名無しさん
2005/09/26(月) 15:27:38「コードフラグメント A が終わってからこのコードを evaluate する」
のようなことってできますか?
0715デフォルトの名無しさん
2005/09/26(月) 16:56:170716デフォルトの名無しさん
2005/09/26(月) 20:21:470717デフォルトの名無しさん
2005/09/27(火) 18:59:23存在しますか?(日本語が変でごめんなさい。)
例で言うと、例えば、ファイルが 〜/usr/share/.foo ならば、 〜/usr/share までを
返してくれる関数です。ちょうど、 (buffer-file-name) から (buffer-name)
を引いたような感じの関数を探しています。
0718デフォルトの名無しさん
2005/09/27(火) 19:26:300719717
2005/09/27(火) 19:40:550720デフォルトの名無しさん
2005/10/25(火) 21:43:34xemacsで
/home/mako/jikken/userFiles/690562.txt
など,
/homeではじまり.txtで終るファイル
へのパスが書かれていた場合,
そのパスの上でマウスの中ボタンをクリックすれば,
xemacsでそのファイルを起動できるようにする方法を
教えてください.
あまりLISPにくわしくないので,記述法など詳細に教えて頂ければ
助かります.
googleで検索したところ,URLをマウスの中ボタンをクリックすれば,
ブラウザで起動できるようにする方法は,
(autoload 'browse-url-at-mouse "browse-url"
"Ask a WWW browser to load a URL clicked with the mouse." t)
(add-hook 'mew-message-mode-hook
(function
(lambda()
(local-set-key [mouse-2] 'browse-url-at-mouse)
)))
でできるという事は分かりました.
これを,txtファイル,XEMACSで起動という形に出来れば最高なのですが.
またいろいろ調べていると,thingatptやfiberという
プログラムを使うと出来そうなのですが,そこからどうすれば良いのかが
分かりません.明日までに出来るようにしてと頼まれているので,
急いでいます.
宜しくお願い致します.
0721720
2005/10/25(火) 21:44:46ボールドになればもっと嬉しいです.
0722デフォルトの名無しさん
2005/10/25(火) 23:11:060723デフォルトの名無しさん
2005/10/26(水) 00:06:28> 助かります.
って人がこのスレに来てもなー。
UNIX板なりLinux板のスレに行って教えてもらえ。
0724デフォルトの名無しさん
2005/11/06(日) 16:54:24ファイル名をリストで取得する関数って標準でありますか?
もしくは、その下受け関数になりそうなヤツとか。
拡張子やプレフィックスでフィルタをかけられるようなものが欲しいのですが、
ls-lisp.elのようにlsを使わないとダメなんでしょうか?
0725デフォルトの名無しさん
2005/11/06(日) 16:55:530726デフォルトの名無しさん
2005/11/06(日) 18:03:37(directory-files "./" nil "[^.]+\\.c\\'")
で期待した動作になりました。ありがとう。
0727デフォルトの名無しさん
2005/11/06(日) 19:12:08autoinsertのスケルトン (auto-insert-alist) を見ていると
ファイル名が[Mm]akefileのときはmakefile.incってなっていますよね。
これはつまり(デフォルトなら) ~/insert/makefile.incの内容を
テンプレートとして挿入する、ということなんと思いますが、
みなさんはこのmakefile.incに何を書いているんでしょうか?
それともauto-insert-alistで直接文字列を作成していますか?
0728デフォルトの名無しさん
2006/01/20(金) 23:49:01なんて命名する?
0729デフォルトの名無しさん
2006/01/21(土) 00:23:380730デフォルトの名無しさん
2006/01/21(土) 00:39:42(first list n) -> 最初から n 個
(butfirst list n) -> 最初から n 個以外 == (nthcdr n list)
first rest なんてシラネ
0731デフォルトの名無しさん
2006/01/21(土) 00:59:590732デフォルトの名無しさん
2006/01/21(土) 01:05:590733デフォルトの名無しさん
2006/02/01(水) 11:31:14最初のn個以外の要素を得る関数は drop
関数型言語の関数としてはよくあるものなんだから
コンベンションを守るべし
# fold, inject, reduce なんかの反例を出すのは禁止ねw
0734デフォルトの名無しさん
2006/02/01(水) 11:37:090735デフォルトの名無しさん
2006/04/12(水) 11:31:42ブックマークしてたスレが一番下になったのなんてはじめてかも。
記念に保守しちゃおう。
0736デフォルトの名無しさん
2006/04/12(水) 22:32:530737デフォルトの名無しさん
2006/04/13(木) 11:39:33空気嫁バカ
0738デフォルトの名無しさん
2006/04/13(木) 14:25:330739デフォルトの名無しさん
2006/04/15(土) 17:19:02俺ってすげーの
sげーの
0740デフォルトの名無しさん
2006/04/16(日) 23:51:410741デフォルトの名無しさん
2006/04/19(水) 23:31:17試しているのですが
「 たとえば、2足す2の例を用いて調べてみよう。
つぎの式で、最初の数2のまえの+の直後にカーソルを置いて
C-x C-eをタイプすると、
(+ 2 2)
つぎのエラーメッセージを得る。
Symbol's value as variable is void: +」
と書かれていて、その通りにしてみると
「Debugger entered--Lisp error: (void-variable +)
eval(+)
eval-last-sexp-1(nil)
eval-last-sexp(nil)
...............」
となってしまうのですが、どうすればエラーメッセージを
見ることができますか?
0742デフォルトの名無しさん
2006/04/20(木) 00:19:56でもその文書は古すぎなのでこっち嫁
http://www.gnu.org/software/emacs/emacs-lisp-intro/
0743741
2006/04/20(木) 00:56:04.emacs(ウチは.emacs.my.elです) でその変数をnilにsetqしたところ、
ちゃんとエラーメッセージが出てきました。ありがとうございました。
古すぎですか・・orz
折角の日本語なので、同時並行で教えていただいた文書も読んでいきたいです。
ほんとにありがとうございました。
0744741
2006/04/20(木) 01:27:24が、教えていただいた文書でみると、Debugger enteredも
emacs version 21以降でのエラーメッセージなんですね。でも、
20 beforeのほうが、なんか分かり易いなあ。と思いました。
でも、面倒な名前の変数をほんとに的確に思い出せるもんですね。
すごいです。そんなふうになれるまで、習熟したいです。
0745デフォルトの名無しさん
2006/04/20(木) 02:00:34一回でUndoできたりするけど、これを明示的に指定できたり
するのかなぁ?
この操作から、この操作までを一回のUndoにまとめてよって
感じで指定できればいいんだけど。
0746λ計算
2006/05/06(土) 13:47:22undo-browse.el
0747λ計算
2006/05/06(土) 13:48:35elispにclosureがあればあんなことやこんなことができるのに。
0748デフォルトの名無しさん
2006/05/06(土) 14:18:390749λ計算
2006/05/06(土) 15:47:53聞いたことがある。それって本物のclosure実装してるの?
0750デフォルトの名無しさん
2006/05/06(土) 19:39:570751λ計算
2006/05/06(土) 19:42:480753デフォルトの名無しさん
2006/05/06(土) 20:57:34Ruby や Scheme のクロージャと同じ性能を持たないが、クロージャと呼べるよ
うなものを具体的に挙げられる?
0754デフォルトの名無しさん
2006/05/07(日) 02:17:37しろ。暗い暗いと文句を言うまえに……
もしくは Lisp マシン買うとか xyzzy 使うとか Scheme ベースの Emacs クロー
ン使うとか LispWorks 買ってエディタを使うとか。
0755λ計算
2006/05/07(日) 08:41:07ていうかLispマシンは現存するの?
0756λ計算
2006/05/07(日) 20:35:300757デフォルトの名無しさん
2006/05/07(日) 23:23:210758λ計算
2006/05/07(日) 23:26:16Last Modified: Mon, 12 Jun 1995 17:29:32 GMT
うわ、10年以上前じゃん。
まあわたしも古い人間なので許してちょ。
0759λ計算
2006/05/09(火) 08:16:57結局マゾは負けてしまった
0760デフォルトの名無しさん
2006/05/09(火) 12:43:300761λ計算
2006/05/09(火) 14:15:410762デフォルトの名無しさん
2006/05/09(火) 15:22:100763λ計算
2006/05/09(火) 15:47:08わたしは他のLisp処理系には詳しくないんですよ。
一番知ってるのがelisp。CLなんてほとんど知りません。
0764デフォルトの名無しさん
2006/05/09(火) 16:35:03ズバリ「お前は馬鹿だ」と言ってしまう
これはもう当初からの2chのサガですよ
まぁでも、自覚するチャンスが多いのは美点だと思いますよ
0765λ計算
2006/05/09(火) 17:42:53馬鹿とかいう奴に限ってろくなのいないのが通説なんだが。
0766デフォルトの名無しさん
2006/05/09(火) 18:43:430767デフォルトの名無しさん
2006/05/09(火) 23:54:050768デフォルトの名無しさん
2006/05/10(水) 00:46:41俺はバカは自覚してるが何か?
elisp しか知らないくせに >>752 で Scheme のクロージャ欲しがるのか?
ふーん
0769λ計算
2006/05/10(水) 00:47:130770デフォルトの名無しさん
2006/05/10(水) 00:49:31UNIX板に帰れ
0772デフォルトの名無しさん
2006/05/10(水) 01:12:412ch じゃなく *scratch* にでも書いててくれ。
0773λ計算
2006/05/10(水) 07:45:35さようなら
0774デフォルトの名無しさん
2006/05/10(水) 10:46:32人間ここからどう伸びるかが己の価値を決めるものですから。頑張ってください。
0775デフォルトの名無しさん
2006/05/13(土) 15:22:40ばかっていったやつがばかなんだよー。
をちょっと大人っぽくいってるだけだよな
0776デフォルトの名無しさん
2006/05/14(日) 09:02:39>>117
nXMLの公式サイト
http://www.thaiopensource.com/nxml-mode/
http://www.jclark.com/bio.htm
0777デフォルトの名無しさん
2006/06/01(木) 23:35:32他の方は、どうですか?
例
(let ((str "abcdefg"))
(position ?b str :from-end))
1
環境は、Linux emacs 22.0.50 のcvs版です。
0778デフォルトの名無しさん
2006/06/01(木) 23:53:12たぶん二つの勘違いをしている
- :from-end を指定しても返り値は前から数えた位置
- 後ろから検索するには :from-end t と書かなければならない
(let ((str "abcdcba"))
(position ?b str :from-end t))
=> 5
0779777
2006/06/02(金) 01:23:07thanks a lot.
うまくいきました。
>> - 後ろから検索するには :from-end t と書かなければならない
この書き方を、忘れていました。
(let ((str "/hoge/huga" ))
(subtring str (position ?/ str :from-end t)))
とかやって、`huga' を取り出したかったんだけど、
質問を考えているとき、不適当な文字列を例にしてしまいました。
素早く、且つ、的確な御返答、
ありがとうございました。m(_ _)m
0780デフォルトの名無しさん
2006/06/11(日) 13:11:05function hoge()
{
}
はこのように整形されるのに
class Hoge
{
function hoge()
{
}
}
クラス内 function はこのように整形されます。
クラス外と同じように整形されるように設定するにはどうしたらよいでしょうか?
0781デフォルトの名無しさん
2006/06/11(日) 18:11:36スレ違い
0782デフォルトの名無しさん
2006/06/11(日) 21:47:25sudo apt-get install python
0783デフォルトの名無しさん
2006/06/12(月) 14:37:03ファイル名取得
(kill-this-buffer)
(find-file ファイル名)
って感じで開き直したいのですが
buffer が開いてるファイルの名前って取得できますか?
0784デフォルトの名無しさん
2006/06/12(月) 14:48:350786名無しさん@お腹いっぱい。
2006/07/15(土) 21:32:13るようになって煩わしく思っていた。
きのう思い立って元の動作のように書き換えたらやっぱり快適だ。
そもそも誰が壊したのかと思って作者を見たら、
やっぱり Stefan だった。
0787デフォルトの名無しさん
2006/08/07(月) 05:55:120788787
2006/08/07(月) 05:55:510789デフォルトの名無しさん
2006/08/07(月) 05:56:560791デフォルトの名無しさん
2006/08/10(木) 14:40:050792デフォルトの名無しさん
2006/09/05(火) 16:59:55b {
}
}
みたいなので、各カッコにカーソルおいて、そこから%キーを押せば対応するカッコに移動する
ために
(global-set-key "%" 'match-paren)
(defun match-paren (arg)
"Go to the matching paren if on a paren; otherwise insert %."
(interactive "p")
(cond ((string-match "[[{(<]" next-char) (forward-sexp 1))
((string-match "[\]})>]" prev-char) (backward-sexp 1))
(t (self-insert-command (or arg 1)))))
これを.emacsに追加したんだけど、
{のところで%キー押すと
Symbol's value as variable is void: next-charとなってうまくいきません。
どこがまずいのでしょうか?
0793デフォルトの名無しさん
2006/09/05(火) 17:12:32elispの基礎から勉強すれ。
0794デフォルトの名無しさん
2006/09/19(火) 01:51:16(global-set-key [tab] (quote tab-to-tab-stop))
と割り当てたのですが、これだと今まで使えていたミニバッファ内での
tabキーによる補完機能が使えなくなってしまいました。
そのため現在カーソルがミニバッファ内であれば、補完キーを動作させて
それ以外のところだと(quote tab-to-tab-stop)を実行させるように以下の
プログラムを組んでみたのですがうまく実行されません
(defun intelligent-tab ()
"intelligent-tab"
(interactive)
(if (window-minibuffer-p (selected-window))
(message "minibuffer?")
(quote tab-to-tab-stop)
)
)
(global-set-key [tab] 'intelligent-tab)
メッセージのところが現在(message "minibuffer?")となっていますが
これも元の補完機能が働く[tab]キーのバインドがわからなかったからです。
あわせて教えていただければうれしいです。
よろしくお願いいたします。
0795名無しさん@お腹いっぱい。
2006/09/19(火) 02:34:17[tab] の設定は元のままで、
(setq-default indent-line-function 'tab-to-tab-stop)
とするのが普通だな。
0796デフォルトの名無しさん
2006/10/13(金) 19:34:010797デフォルトの名無しさん
2006/12/11(月) 18:21:570798デフォルトの名無しさん
2006/12/11(月) 18:44:060799デフォルトの名無しさん
2006/12/14(木) 03:05:270800デフォルトの名無しさん
2006/12/19(火) 05:24:130801デフォルトの名無しさん
2006/12/22(金) 17:37:19もう一回開いてディスクから読み込んでくるには
どうすればいいでしょうか?
今はCtr-x,fでもう一回指定していますがめんどくさくて。
0802デフォルトの名無しさん
2006/12/22(金) 22:55:56-- Command: revert-buffer &optional CHECK-AUTO-SAVE NOCONFIRM
このコマンドはバッファのテキストをディスク上の読み込んだファイルの
テキストで置き換えます。この動作はファイルを読み込んだまたはセーブ
した以降の全ての変更を取り消します。
0803デフォルトの名無しさん
2006/12/22(金) 22:56:200804デフォルトの名無しさん
2006/12/23(土) 00:10:24C-xC-v(find-alternate-file) もあるね。
revert-buffer はなんとなく気持ち悪くて使ってない。(^^;
カーソル位置はそのままにしてほしいので、こんな advice を書いてる。
Emacs22 だとちょっと変える必要があるけど。
(defadvice find-alternate-file
(around find-alternate-file-revival-point (filename) activate)
"ファイルを読み直す時だけ、カーソル位置を保持する。"
(let ((point (if (string= (expand-file-name filename)
(buffer-file-name))
(point))))
ad-do-it (and point (goto-char point))))
0805デフォルトの名無しさん
2007/01/01(月) 19:05:28From: [email protected] (Kim F. Storm)
Subject: Re: (string-bytes "\x80") = (string-bytes "\200") ?
Newsgroups: comp.emacs
Date: Thu, 21 Dec 2006 12:38:42 +0100
"Daniel Engeler" <[email protected]> writes:
> Emacs 21.2.1 correctly says
>
> (string-bytes "\x80") = 1
> (string-bytes "\200") = 1
>
> But Emacs 22.0.91.1 says
>
> (string-bytes "\x80") = 2
> (string-bytes "\200") = 1
>
> Since \x80 = \200 = 128, I think it should be 1 in all cases. Is
> this a bug in 22.0.91.1?
>
The NEWS file for 22.1 clearly states that:
** String changes:
*** A hex escape in a string constant forces the string to be multibyte.
But it was not listed as an incompatible change -- I just did so. Thanks.
0806デフォルトの名無しさん
2007/01/01(月) 22:32:120807地雷原地雷原
2007/01/01(月) 22:47:56(128 128 "\x80" "\200" 1 1 nil)
0808デフォルトの名無しさん
2007/01/01(月) 23:04:43"\200"
まるでどこかの大手ソフトウェア会社のunicode変換表みたいだ
0809デフォルトの名無しさん
2007/01/02(火) 01:27:43それのどこが地雷なん?
仕様変更自体がNEWSに書かれていなかったというのは落ち度だが、
Emacsのunibyte/multibyte stringモデルが頭に入っていれば
(その違いで困るようなコードを書く奴は必然的に入っているが)
気にすべきときは自然に注意が向くことだろ。
必要なら文字列リテラルがどっちになるかという暗黙的な仕様に依存するよりも
明示的に変換するだろうから、別段困らんのじゃないのか?
0810デフォルトの名無しさん
2007/01/02(火) 02:21:59代わりに答えてやれば?
From: "Daniel Engeler" <[email protected]>
Subject: Re: (string-bytes "\x80") = (string-bytes "\200") ?
Newsgroups: comp.emacs
Date: 22 Dec 2006 02:11:25 -0800
> The NEWS file for 22.1 clearly states that:
>
> ** String changes:
>
> *** A hex escape in a string constant forces the string to be
multibyte.
1. What is the motivation behind this change?
2. Shouldn't these be both `t'?
(multibyte-string-p (string-bytes "\x41")) = nil
(multibyte-string-p (string-bytes "\x80")) = t
3. Why does an octal escape not force multibyte?
0811デフォルトの名無しさん
2007/01/02(火) 02:34:26答える必要ないでしょ。地雷かどうかと関係ないよね。
0812デフォルトの名無しさん
2007/01/02(火) 03:24:03これ、どっかに分かりやすい説明ないかなー。
emacs-w3mとかのMLのやりとり見てても付いてけなくて。
0813デフォルトの名無しさん
2007/01/02(火) 13:26:130814デフォルトの名無しさん
2007/01/02(火) 13:41:26> (multibyte-string-p (string-bytes "\x41")) = nil
> (multibyte-string-p (string-bytes "\x80")) = t
それ以前に、これが変だ。
(list (multibyte-string-p "\x00") (multibyte-string-p "\000"))
(t nil)
string-bytes を使うこと自体ほとんどないなあ
0815デフォルトの名無しさん
2007/01/02(火) 15:16:21=> "あ"
知らんかった。
0816デフォルトの名無しさん
2007/01/04(木) 13:51:29大量のObjective-C のソースコードをインデント、整形したいのですが
emacs lisp を利用して
コマンドラインやバッチファイルから一括して処理する方法はありませんか?
emacsとcc-modeは導入しております。
0817デフォルトの名無しさん
2007/01/04(木) 20:16:36ファイルを開いて整形して保存して閉じる、という関数を書き、
それをファイルの数だけ繰り返し実行するループを書く。
そのelispファイルをemacsに与えてバッチ実行すればよい。
コマンドライン引数を自分のelispに処理させることもできるが、
わからなければファイルのリストを変数定義するコードを生成して与えてもよい。
0818816
2007/01/07(日) 18:53:39ありがとうございます。
不本意ながらelispに全くの初心者である私には到底書けそうにもありません。
仕事で使うことも予想されますので、どなたか熟練者の方、代わりに
自動一括Objective-Cソースコード整形スクリプトを書いていただけないでしょうか。
図々しいお願いで恐縮です。
何らかのお礼(paypalでの振込など)をさせていただければと思っています。
0819デフォルトの名無しさん
2007/01/07(日) 23:01:12バッチで制御する部分は簡単だけど、それ以前にオンラインで開いて整形してみたのですか?
そっちの調整の方が面倒だと思う。
0820デフォルトの名無しさん
2007/01/07(日) 23:22:35indent は?
ttp://www.gnu.org/software/indent/
出力先とか指定しないと上書きされるから気をつけた方がいい。
emacs lisp じゃないとだめなの?
emacs じゃなくて bash とかみたいな shell の上でやったほうが楽だと思う。
0821デフォルトの名無しさん
2007/01/08(月) 10:43:54相性の悪いコードはあるし。。。
0822デフォルトの名無しさん
2007/01/09(火) 00:42:460823デフォルトの名無しさん
2007/03/09(金) 08:06:25言語を1から勉強して、本格的に自分でチューニングしたいんだけど
どの言語を学べばいいんだ?CommonLispでいいんかね?schemeとかもあるし。
0824デフォルトの名無しさん
2007/03/09(金) 08:12:27ttp://www.gnu.org/software/emacs/elisp-manual/elisp.html
ググれば日本語訳が見つかるかもしれん
運が良ければamazonとかで↑の製本が見つかるかもしれん
0825デフォルトの名無しさん
2007/03/09(金) 08:22:48でも「Hello world」からやりたいなー。
Emacs Lispのコンパイラみたいなのないね?
というか練習とかテストって普通どうするんだろ。
毎回Emacs再起動するの?(´・ω・`)
0826デフォルトの名無しさん
2007/03/09(金) 08:46:030827デフォルトの名無しさん
2007/03/09(金) 11:38:40M-x byte-compile-file
0828デフォルトの名無しさん
2007/03/09(金) 12:26:29ふつうのやり方かどうかわからんけど、テストするときは
eval-regionを使ってる。
0829デフォルトの名無しさん
2007/03/09(金) 16:29:11*scratch* って buffer が lisp 用だと教えられたことがある。
*scratch* でも 普通のファイルでも
eval-current-buffer 使うことが多いけど
eval* とか lisp-interaction-mode とか
いくつか選択肢があると思う。
0830デフォルトの名無しさん
2007/03/09(金) 16:35:390831デフォルトの名無しさん
2007/03/09(金) 18:28:04ielm なんてのもあるけどな。しかし、普通は *scratch* にS式を書いて評価する。
0832デフォルトの名無しさん
2007/03/09(金) 23:38:54emacs-lisp-modeではC-cC-zをielmに、C-cC-rをeval-regionに割り当てている。
0833デフォルトの名無しさん
2007/03/10(土) 00:29:51メーラーはgnusあたりなんでしょうか?
mew?
0834デフォルトの名無しさん
2007/03/10(土) 00:48:400835デフォルトの名無しさん
2007/03/10(土) 00:56:11おまい……完全にスレ違いだろ。
0836デフォルトの名無しさん
2007/04/13(金) 23:00:022つ質問です。
まず、
=> (apply 'make-comint (concat "gud" filepart) program nil
(funcall massage-args file args)))
この状態から、いわゆるステップイン実行をして make-comint が
定義されているファイルを開いて関数内に入って止まりたいのですが、
方法はあるでしょうか?iではダメでした。今はやむなく
・当該関数が定義されてる*.elファイルを別にオープンして
・そっちで先回りしてブレークポイントをセット
・上の所に戻ってcontinue
してるのですが、面倒でたまりません。
次に、デバッグ中に eval しようとしてミスをすると、
その eval 内容のデバッグにフレームが移ってしまいます。
「いまのevalの分はなしね」として元のデバッガ環境(evalする
直前の状態)に戻りたいのですが、どうすればいいんでしょうか?
qすると全部抜けてやり直しになってしまいます。今はやむなく
qで最初からデバッグ過程をやり直してます。
0837デフォルトの名無しさん
2007/04/17(火) 19:30:41からもらってきたUm4を試したのですがF4で起動する以外、F2やF3などが正しく動作しません。すいませんがお助けください。
XPからLinuxサーバーへteratermでログイン
GNU Emacs 21.3.1
.emacs.my.elへ書いたこと
(setq load-path (append load-path (list "~/lib/emacs/Um4/")))
(setq Ic-return-key [return])
(load-library "Ic-Um4")
(setq Um4-dir "~/lib/emacs/Um4/")
(global-set-key [f4] 'Um4)
(global-set-key [S-f4] '(lambda ()(interactive)(Um4 'shift)))
0838デフォルトの名無しさん
2007/04/17(火) 20:16:570839デフォルトの名無しさん
2007/04/17(火) 22:56:360840デフォルトの名無しさん
2007/04/18(水) 20:32:230841デフォルトの名無しさん
2007/04/23(月) 00:07:01そうすると、どうやってデバッグ作業を効率化してますか?
怪しそうな辺りから順を追って追跡すると言う単純作業が
applyとかの動的呼び出しコードが出現するとぶった切られてしまうんです。
何かコツがあれば教えてください。
0842デフォルトの名無しさん
2007/04/26(木) 23:32:49どのようなプログラムを書いていますか?
規模はどれくらい?(行数のトータル)
0843デフォルトの名無しさん
2007/04/27(金) 01:11:55やろうとしてたのはgudに新しいデバッガのサポートを追加すること
でした(もうこの問題自体はできた)。
で、規模自体はgud(+comint)って見通しも良いし、ほとんど既存デバッガ用
コード使えるのでショボイんですが、elisp環境での開発なんて普段しないし
やりながら「このやり方は非効率的だ」と思ったので質問しました。
正直elispというかlisp系全般のデバッグ手法について全然不慣れです。
- ステップ実行でapplyで呼ばれる先にもステップインしたい
- デバッグ中のevalでミスったらそのフレームは破棄してeval実行前に戻りたい
って簡単にできないんでしょうか?もしくは、上のようなことが
不要になるような他の手法があるんでしょうか?
0844デフォルトの名無しさん
2007/04/27(金) 01:37:35呼び出し先を find-function して edebug-defun
> - デバッグ中のevalでミスったらそのフレームは破棄してeval実行前に戻りたい
よくわからんが Ctrl-] ってこと?
0845デフォルトの名無しさん
2007/04/27(金) 02:11:21標準のデバッガと、あとはせいぜい trace-function くらいで十分だと思います。
(message ...) での出力は *Message* バッファに残るので、C でいえば
あやしい箇所に printf を入れて、怪しい値をチェックするのに相当する
ことも出来ます。
まあ、こういう話は宗教論争になるからこのへんにしておきましょうね。
0846デフォルトの名無しさん
2007/04/27(金) 08:08:28どれ? ww
elisp数万行っていうとどれくらいの規模だろう。
と、wcをかけてみるとwl(elmo含む)で5〜6万行みたいだ。
0847デフォルトの名無しさん
2007/04/27(金) 11:35:55おおー!それです!
find-functionを知らなかったので、別シェルでソース探して
find-fileしてカーソル移動してブレークポイントセット、という
超非効率なことやってました。C-hbで何かないのかとか探して
evalの方はちょっと違ってて
- debug-on-errorで止まってデバッガに入る
- evalでちょっと評価しようとしてtypo
- *Backtrace*の頭にtypoした分が追加されてしまう
- このtypo起因の部分だけ「なかったこと」にしたい
のですが、C-]とかqするとdebug-on-errorで入ったセッション自体から
抜けてしまいます。
0848デフォルトの名無しさん
2007/05/05(土) 08:23:580849デフォルトの名無しさん
2007/05/05(土) 08:46:59なぜ「doctor のような会話ソフトの日本語版ってありますか?」と言うのですか?
0850デフォルトの名無しさん
2007/05/05(土) 11:44:460851デフォルトの名無しさん
2007/05/05(土) 14:28:07どうして「doctorあらわる。」と思ったのですか?
0852デフォルトの名無しさん
2007/05/05(土) 16:53:16あなたが、最初にその疑問を抱いたのはいつですか?
0853デフォルトの名無しさん
2007/05/05(土) 17:51:01私が最初にその疑問を抱いたときに何が起こりました?
0854デフォルトの名無しさん
2007/05/05(土) 18:15:160855デフォルトの名無しさん
2007/05/05(土) 18:29:21もう少し foo について詳しく話してください。
0856デフォルトの名無しさん
2007/05/05(土) 18:29:51Bar! 続けてくれるならありがたく思いますよ
0857デフォルトの名無しさん
2007/05/05(土) 18:36:09あなたはfooが気になるようだね
0858デフォルトの名無しさん
2007/05/05(土) 18:37:06なぜあなたは、私が foo を気にしていると考えたのですか?
0859デフォルトの名無しさん
2007/05/05(土) 18:49:15あなたが診せに来られたのはfooが気になるからですか?
0860デフォルトの名無しさん
2007/05/05(土) 19:02:560861デフォルトの名無しさん
2007/05/05(土) 19:03:53なぜそのように考えたのか、もう少し詳しく話してください。
0862デフォルトの名無しさん
2007/05/05(土) 19:15:430863デフォルトの名無しさん
2007/05/05(土) 19:17:23続けたいようだね
0864デフォルトの名無しさん
2007/05/05(土) 19:17:57www
0865デフォルトの名無しさん
2007/05/05(土) 19:18:240866デフォルトの名無しさん
2007/05/05(土) 19:56:18きっとそれを使って何かする計画があるのでしょうね。
0867デフォルトの名無しさん
2007/05/05(土) 19:57:51なぜそれを信じるようになったのですか?
0868デフォルトの名無しさん
2007/05/05(土) 20:08:33それにこだわる事で、あなたの人生は幸せなものになりますか?
0869デフォルトの名無しさん
2007/05/05(土) 20:21:48一緒に遊ぶ仲間のために、ESC x doctor RETするのですね?
0870デフォルトの名無しさん
2007/05/05(土) 20:27:31Emacs Lisp プログラミングと直接関係しない、Emacs の一機能のネタで
遊びたいならよそでやれ。
0871デフォルトの名無しさん
2007/05/05(土) 20:30:05あなたがそれにこだわるのは、学校で何かあったからですか?
0872デフォルトの名無しさん
2007/05/05(土) 21:22:19ここは便所の落書き2chねるだ。
Emacs Lispに関係しようがしまいが、とにかくネタで遊ぶのだ。
これが楽しめないならよそへ行け。
0873デフォルトの名無しさん
2007/05/05(土) 22:07:38確かにそうなんだけど、大して面白くも無いしなぁ。。。
0874デフォルトの名無しさん
2007/05/06(日) 00:25:44http://pc11.2ch.net/test/read.cgi/unix/1044711321/
0875デフォルトの名無しさん
2007/05/06(日) 05:45:030876デフォルトの名無しさん
2007/05/06(日) 11:53:43空気読めないヤツにもねw
0877デフォルトの名無しさん
2007/05/06(日) 19:43:350878デフォルトの名無しさん
2007/05/17(木) 01:23:55find-file時にあらかじめ使いたいマイナーモードを指定するスマートな方法は何ですか?
-*- outline-minor-mode: t; -*- などとファイルローカル変数の指定は(ちょっち都合により)使いたくありません.find-file-hooksやsetq-defaultなどをつかうのも美しくないと感じてます.
0879デフォルトの名無しさん
2007/05/17(木) 05:52:230880デフォルトの名無しさん
2007/05/17(木) 08:27:24auto-mode-alist はどうよ。
0881デフォルトの名無しさん
2007/05/17(木) 08:39:21ファイル名で判断できないので,今回の場合は使えません.(ていうか,メジャーモードだけかと思ってました).
美しい方法がないのであれば,汚い方法で何とかします.ありがとうございました.
0882デフォルトの名無しさん
2007/05/18(金) 09:51:010883デフォルトの名無しさん
2007/05/19(土) 00:50:58> ファイル名で判断できないので
ファイル名じゃないなら、具体的な判断基準は何なの?
拡張子とかディレクトリ名でもなさそうな感じだけど。
ファイルを開かないと分からないような条件なら、
find-file-hooksとかLocal Variablesしかないんじゃない?
そして、それは別に汚ないとは思わんが。
0884デフォルトの名無しさん
2007/06/10(日) 20:04:57(let ((var "abc")) (lambda () var)) ;…(1)
と書くと scheme では (lambda () "abc") が返ってくるので、
((let ((var "abc")) (lambda () var))) ;…(2)
とすると "abc" が得られますが、これと同じことを emacs lisp では
どう書けばいいのでしょうか。試しに同じことをやってみると(1)の結果は
(lambda nil var)
と、ローカル変数がそのままの形で出てきてしまいます。従って当然
(2)はエラーです。更に不可解なのが、
(let ((var "abc")) (lambda () (+ 1 1))) ;…(3)
のような式で、これは
(lambda nil (+ 1 1))
を返しますが、
((let ((var "abc")) (lambda () (+ 1 1))))
とすると emacs lisp ではエラー、scheme では 2 が返ります。
何がしたいかというと、関数に与えた引数によってそれぞれ異なった
関数を返すようにしたいのですが、emacs lisp では引数、
ローカル変数とも値が代入されないまま外に出てきてしまうので
どうしたものかと。
0885デフォルトの名無しさん
2007/06/10(日) 20:48:45前者は動的スコープの話。
後者は値としての関数の呼出しに関する話。
どっちも
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/comparison.html
とか読むといいと思う。
0887デフォルトの名無しさん
2007/06/13(水) 00:12:50calc 自体は複素数に対応しているようなのですが、
「eのiπ乗」の書き方が分かりません…。
0888デフォルトの名無しさん
2007/06/14(木) 21:05:13今やりたいことは、
●下記のようなアルファベットの羅列があったとして各アルファベットの個数をカウントする。
●何のアルファベットがでてくるかわからない。
AAAIIIBICCCAAXX
どのアルファベットがあるかわからないから、
count{A}++; (perlの場合)
の様にカウントしたいんだけど、
lisipではこれに対応する機能ってあるのでしょうか?
0889デフォルトの名無しさん
2007/06/14(木) 21:55:090891デフォルトの名無しさん
2007/06/25(月) 00:21:37(jukouryou 10500)
(defun jukouryou (n)
(let ((count 0))
(goto-line 1)
(while (< (point) (point-max))
(if (re-search-forward "受講料"(number-to-string n) nil t 1)
(progn
(setq count (+ count 1))
(forward-line 1))
(forward-line 1)))
count))
エラーが出ます。
なんで?たぶん正規表現部分だと思うのですが・・・
0892tualgoao
2007/06/25(月) 00:29:280893デフォルトの名無しさん
2007/06/25(月) 07:04:52これがエラーなんだと思うけど。
re-search-forward に文字列二つ渡したって期待通りには動かない。
0894デフォルトの名無しさん
2007/06/25(月) 15:06:02しぽ
0895デフォルトの名無しさん
2007/06/26(火) 01:18:03あなたが診せに来られたのは>892が気になるからですか?
0896デフォルトの名無しさん
2007/06/26(火) 06:25:110897デフォルトの名無しさん
2007/07/11(水) 00:34:42以下の様なコードを書いてみました。
(defvar lookup-log-filename "/tmp/hoge")
(defun get-lookup-history () lookup-input-history)
(defun lookup-save-history ()
(let ((a (find-file lookup-log-filename)))
(end-of-buffer)
(print (cons (list
(current-time-string)
(cadr (current-time-zone)))
(get-lookup-history)) a)
(save-buffer)
(kill-buffer a) ))
これでは直接入力した物しか記録されません。
lookupの履歴を取るにはどうしたらよいかこ存じありませんか?
またファイル操作の仕方がいまいちよくわからず、
この様になっているのですが、
もっとうまいやりかたがあるのでしょうか。
0898デフォルトの名無しさん
2007/07/11(水) 02:16:39> これでは直接入力した物しか記録されません。
> lookupの履歴を取るにはどうしたらよいかこ存じありませんか?
確認してないけど、たぶん次の3つの関数に defadvice する必要があったような…
lookup-pattern-input
lookup-region-input
lookup-word-input
> またファイル操作の仕方がいまいちよくわからず、
with-temp-file かな。評価するたびに上書きされます。
(with-temp-file lookup-log-filename
(princ (cons (list (current-time-string)
(cadr (current-time-zone)))
(get-lookup-history))
(current-buffer)))
0899デフォルトの名無しさん
2007/08/06(月) 01:23:080900デフォルトの名無しさん
2007/08/06(月) 03:41:490901デフォルトの名無しさん
2007/08/06(月) 04:08:110902デフォルトの名無しさん
2007/08/06(月) 04:49:010903899
2007/08/06(月) 11:59:51lispの勉強をするために他人のコードを読もうと思うのですが
実際に役立つコードじゃないとモチベーションがもてません
掲示板の自動操作のようなスクリプトが一番面白いのですが、
どこかにありませんでしょうか
0904デフォルトの名無しさん
2007/08/06(月) 13:42:300905デフォルトの名無しさん
2007/08/06(月) 15:46:370906デフォルトの名無しさん
2007/08/07(火) 16:59:37君にLispは向いていない
0907デフォルトの名無しさん
2007/08/07(火) 22:24:340908デフォルトの名無しさん
2007/08/19(日) 16:24:35(let ((key ?a)(res nil))
(while (<= key ?z)
(setq res (cons key res))
(setq key (1+ key)))
(reverse res))
(97 98 99 100 101 102 103 104 105 106 107 108 ...)
0909デフォルトの名無しさん
2007/08/19(日) 16:52:270910デフォルトの名無しさん
2007/08/19(日) 16:55:16マウスポインタあてるとわかる。
0911デフォルトの名無しさん
2007/08/19(日) 17:02:26表示できました。
(97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122)
>>909さん
>>910さん
ありがとうございました。
0912デフォルトの名無しさん
2007/08/19(日) 18:48:11eval-expression-print-length nil
eval-expression-debug-on-error nil)
おれはこうしてる
0913デフォルトの名無しさん
2007/08/19(日) 19:31:42>>912さん
dot.emacsに書いておけばよいのですね。
参考になりました。
ありがとうございます。
0914デフォルトの名無しさん
2007/08/21(火) 03:58:45$$
()
{}
とか自動で閉じられるのです
0915デフォルトの名無しさん
2007/08/21(火) 22:28:21(defun my-yatex-unset-key ()
"YaTeX の補完のキーバインドのいくつかを解除"
(interactive)
(local-unset-key "$")
(local-unset-key "(")
(local-unset-key "{")
)
(add-hook 'yatex-mode-hook 'my-yatex-unset-key)
こんなのを ~/.emacs とかに書く。
C-h a で YaTeX-insert とかで調べると
(define-key YaTeX-mode-map "$" 'YaTeX-insert-dollar)
みたいなのが見つかるはず。
いらないものを local-unset-key とかで解除。
0916デフォルトの名無しさん
2007/08/24(金) 06:46:44(looking-at "hoge")
*
hoge
というコードを*scratch*に書き、*の所でC-x,C-eを実行したのですが、
なぜかnilが返されてしまいます。looking-atがhogeにマッチしないのは
何故なんでしょうか?
0917デフォルトの名無しさん
2007/08/24(金) 07:22:17改行も空白も文字だから、そこから判定が始まるんで、それだと "hoge" には一致しない。
0918デフォルトの名無しさん
2007/08/24(金) 07:30:17ダメなんですね・・・
次に
(defun test-regex ()
(interactive)
(re-search-forward "(\\w+)" nil t)
(insert (buffer-substring (match-beginning 1) (match-end 1))))
(test-regex)
*
hoge
さっきと同じように*の部分で関数のテストをしたら、予想ではhogeが出力
されると思っていたんですが、エラーが出てしまいます。この関数のどこが
間違っているんでしょうか?
0919デフォルトの名無しさん
2007/08/24(金) 08:48:55文字列中なら "\\(\\w+\\)" みたいに。
何も match してない状態だと (match-beginning 1) は nil を返す。
で、 buffer-substring に nil が渡ってエラー。
0920デフォルトの名無しさん
2007/08/24(金) 09:16:15よくわかりました。ありがとうございます
0921デフォルトの名無しさん
2007/08/24(金) 11:12:05(add-hook 'lisp-interaction-mode-hook '(lambda ()
(define-key 'lisp-interaction-mode-map
"\C-co" 'lisp-complete-symbol)))
というC-c oで補完するようになるコードを書いたのですが、再起動してコマンドを
入力しても、未定義だといわれてしまいます。どこが間違っているのでしょうか?
0922デフォルトの名無しさん
2007/08/24(金) 11:26:530923デフォルトの名無しさん
2007/09/05(水) 01:19:15B:234567[XX]89
A:3456789[XX]0
B:456789012345
こんな感じで、各行が「A:」か「B:」(もしくは空行)ではじまって、
そのところどころに [ と ] で囲まれた文字が入っているバッファがあります。
これを、Aの行だけ、Bの行だけを集めてくっつけて、さらに[]の部分を消してしまいたいのです。
この例だと、Aの行を集めたものを出力したら「12345678901234567890」で、
Bの行のほうは「23456789456789012345」になるということです。
これを実現しようとしたら、どういう方法が簡単でしょうか
(goto-char (point-min))して各行ごとにくっつけていくのは考えたのですが、
もっと便利な関数や、処理方法などありませんか。
バッファ全体を対象にして replace-regexp-in-string とか考えたんですが、
なかなかうまくいかないものですね。正規表現は難しいです。
0924デフォルトの名無しさん
2007/09/05(水) 02:36:03(do ((list (split-string (buffer-string)) (cdr list))
(a nil) (b nil))
((null list)
(list (apply 'concat (reverse a))
(apply 'concat (reverse b))))
(cond ((string-match "^A:\\(.+\\)$" (car list))
(push (replace-regexp-in-string
"\\[.+?\\]" "" (match-string 1 (car list)))
a))
((string-match "^B:\\(.+\\)$" (car list))
(push (replace-regexp-in-string
"\\[.+?\\]" "" (match-string 1 (car list)))
b))
(t nil)))
0925デフォルトの名無しさん
2007/09/05(水) 09:00:45(while (re-search-forward "\\[.+?\\]" nil t) (replace-match ""))
しておいたほうが簡潔になるような
0926デフォルトの名無しさん
2007/09/05(水) 13:52:20の方がよかったかな。ま、適当だから。
0927デフォルトの名無しさん
2007/09/05(水) 22:25:11ありがとうございます。非常に参考になりました。
はじめて do を使いましたが、便利ですね、これ。
また別の質問なのですが、
文字列を2文字ずつ分割する方法はどんなのがあるでしょうか?
>>923 で集めたA、Bは、16進数ダンプの結果だったのですが、
それをASCIIに戻したいのです。
2文字ずつに分割して '("00" "00" "00" ...) みたいなリストが返せれば、
mapcarでなんとかなるかなー、と。
>>924を真似て、とりあえず10万字の文字列(50000バイト分)を処理させてみようと
(do ((list (split-string (make-string 100000 ?0) "" t) (cdr cdr list)))
...
みたいなのを書いてみたんですが、
100000も要素があるとそれだけで大変みたいで、C-g もきかなくなってしまいました。
一発で2文字ずつに分割するのは無理だと思っていますが、
何かいい方法ありますか?
ちなみに 22.1.1 です。
0928デフォルトの名無しさん
2007/09/05(水) 22:40:16効率を意識して書いたらこんなになった。読めるかどうか不安だけど。
16 進ダンプ文字列を受け取って ascii 文字列を返してるつもり。
(defun dump-to-ascii (string)
(do ((p 0 (+ 2 p))
(q 0 (1+ q))
(tmp (make-string 2 0))
(limit (length string)))
((>= p limit)
(substring string 0 q))
(aset tmp 0 (elt string p))
(aset tmp 1 (elt string (1+ p)))
(aset string q (string-to-number tmp 16))))
(dump-to-ascii "616263")
=> "abc"
0929928
2007/09/05(水) 22:41:190930デフォルトの名無しさん
2007/09/05(水) 23:01:56早々の回答、恐れいります。ありがとうございました。
100000文字も6秒で変換できました。凄い速くて感動です。
前回の do と push に続き、今回は aset が初見でした。
もっと勉強しないといけませんね。
普段は setq やらばかり (基本の基本ばかり?) を見ているので…。
>効率を意識して書いたらこんなになった。読めるかどうか不安だけど。
やっぱり、リスト化しようとすると劇的に遅くなるんですよね。
mapcarで変換するときの処理が速くて相殺できればいいのでしょうが、
C-gで戻ってこなかったということは、相殺どころではなさそうですね。
0931デフォルトの名無しさん
2007/09/06(木) 02:02:02(defun my-dump-to-ascii (string)
(loop with len = (length string)
with result = (make-string (/ len 2) ?.)
with tmp = (make-string 2 ?.)
for i from 0 below len by 2
do (aset tmp 0 (aref string i))
(aset tmp 1 (aref string (1+ i)))
(aset result (/ i 2) (string-to-number tmp 16))
finally return result))
0932デフォルトの名無しさん
2007/09/06(木) 02:25:260933デフォルトの名無しさん
2007/09/06(木) 02:36:03(defun dump-to-ascii (s)
(let ((limit (length s))
(i 0) (j 0))
(while (< i limit)
(aset s j (string-to-number (substring s i (+ i 2)) 16))
(setq i (+ i 2)
j (+ j 1)))
(substring s 0 j)))
0934デフォルトの名無しさん
2007/09/06(木) 06:30:33計ってみたら使い回すやつに比べて2倍とはいかないまでもそれに近くかかった。
0935デフォルトの名無しさん
2007/09/06(木) 22:26:150936デフォルトの名無しさん
2007/09/06(木) 22:50:57make-string の文字列版というか、
(hogefunc 3 "abc")
=> "abcabcabc"
みたいなやつ。
(apply 'concat (append (make-vector 3 "abc") nil))
こんな方法しか思いつかんのだが、もちょっとかっこよく書きたいじゃないか。
0937デフォルトの名無しさん
2007/09/06(木) 23:47:55(mapconcat #'identity
(make-list 3 "abc")
nil)
0938デフォルトの名無しさん
2007/09/06(木) 23:52:56いつも "" としてたからびっくりした
0939デフォルトの名無しさん
2007/09/07(金) 00:56:340940デフォルトの名無しさん
2007/09/07(金) 04:07:29でかいの作るとvectorの方が早い。
listはconsセル結ばないといけないから、そのぶんちょろっと時間食う。
0941デフォルトの名無しさん
2007/09/08(土) 00:20:18(mapconcat 'identity (make-vector 3 "abc") nil)
が一番速いのかね
0942デフォルトの名無しさん
2007/09/08(土) 01:49:36(with-output-to-string (dotimes (x 3) (princ "abc")))
0943デフォルトの名無しさん
2007/09/08(土) 08:52:12(with-temp-buffer (dotimes (x 3) (insert "abc")) (buffer-string))
0944デフォルトの名無しさん
2007/09/08(土) 10:06:58バッファ生成コストって低くないんでね?
;; 処理系のソース読めてないのに推測で書いてて悪いけど。
0945デフォルトの名無しさん
2007/09/09(日) 22:32:22(フォームへの自動入力など)
ができますが、FileをUploadするダイアログは
どうやっても操作できないみたいです(セキュリティ上の理由)
javascriptのようにサーバー側で動くのではなく、
クライアント側で動くelisp(emacs-w3m ?)の場合が
File名入力フォームに値を代入することはできるのでしょうか?
0946デフォルトの名無しさん
2007/09/12(水) 22:15:19上記のような8進エスケープされた文字列をエンコードする方法をおしえてください
0947デフォルトの名無しさん
2007/09/12(水) 22:46:04エンコード方式を指定しないと答えられないのでは?
(デコードの場合であっても)
0948デフォルトの名無しさん
2007/09/12(水) 22:54:09エンコードのターゲットはcoding-system-alistのいずれかです。
(encode-coding-string "\333\222\222" 'utf-8)
こんなふうにやってみたけどだめだった・・・
0949デフォルトの名無しさん
2007/09/12(水) 23:04:49(decode-coding-string "\357\274\224" 'utf-8)
=> "4"
こういうことじゃない?
0950デフォルトの名無しさん
2007/09/12(水) 23:06:10ありがとうございます!
そういうことです!バカですんませんw
0951デフォルトの名無しさん
2007/09/18(火) 14:41:16cでメイン
perlでメタな部分
を書いてたのですが、最近lispをおぼえたのでelispあたりで
メタな部分を書けないかと思っています
c++で書いたコードを呼ぶ方法はバイナリをshellコマンドで呼ぶしかないのでしょうか?
0952デフォルトの名無しさん
2007/09/18(火) 15:07:100953デフォルトの名無しさん
2007/09/25(火) 11:01:14(require 'sgml-mode)
.
(defconst django-html-font-lock-keywords-1
(append
;; html-mode keyword
sgml-font-lock-keywords-1)
"First level keyword highlighting")
(defconst django-html-font-lock-keywords-2
(append
django-html-font-lock-keywords-1
sgml-font-lock-keywords-2))
(provide 'django-html-mode)
.emacsに (load django-heml-mode.el)を追加して
起動すると
Symbol's value as variable is void: sgml-font-lock-keywords-1
というエラーになります
sgml-modeはデフォルトで入っているので理由がわかりません
どういったことが考えられるのでしょうか?
環境はWindows xp emacs-22.1です
0954デフォルトの名無しさん
2007/09/25(火) 15:25:320955デフォルトの名無しさん
2007/09/26(水) 16:11:47hemlはまちがいです
0956デフォルトの名無しさん
2007/09/26(水) 22:51:480957デフォルトの名無しさん
2007/09/27(木) 10:49:31すいません、それも問題ないです
0958デフォルトの名無しさん
2007/09/27(木) 16:37:290959デフォルトの名無しさん
2007/09/27(木) 23:58:08フツーに動くのでは?
cperl-modeでうまく動かない件については
オレがバグレポート出したよ。返事こないけど。
0960デフォルトの名無しさん
2007/09/28(金) 16:11:44http://d.hatena.ne.jp/ZIGOROu/20061114/1163503085
を試してみたのですが
{} を好きなところに書けないとかで使いにくいです
本当にこれが一番のおすすめなのでしょうか?
0961デフォルトの名無しさん
2007/09/28(金) 17:12:27{}を好きなところってのはインデントの付け方のスタイルの違いなんで気に入らないならしょうがないかもね
深さの方なら js-indent-levelの数値変えればいいんじゃないの?
0962960
2007/09/28(金) 21:45:56ありがとうございます。
設定済みmeadowだと色をつけて強調とかいっさいされてなかったのですが
Redhat linuxでうごかしたら望みどうりのエディタになってくれました
javascript.el は、確かに便利でした
C:\meadow\site-lisp
にjavascript.elを置いたのがいけなかったのかな
0963960
2007/09/28(金) 22:26:10設定済みmeadowを使うとjavascript.el がインストールされていても
*.jsというファイルを読み込むと強制的にcc-modeになってしまうようです
0964953
2007/09/29(土) 08:09:43お騒がせしました
0965デフォルトの名無しさん
2007/09/30(日) 02:11:20M-x h
M-x align-regexp [RET] //
と同じことをやりたくて、
describe-functionでalign-regexpを調べたところ、
(align-regexp beg end regexp &optional group spacing repeat)
と出たので、とりあえず
(defun Test ()
(interactive)
(align-regexp (point-min) (point-max) "//"))
と書いたTest.elというファイルを用意し
load-file後にTestと実行してみたんですが
align-regexp: Wrong type argument: numberp, nil
と出て使えません。。。
何がマズいんでしょうか?
どなたかお願いしますorz
0966デフォルトの名無しさん
2007/09/30(日) 05:43:28これ、他の関数から呼ばれることを想定してない感じ。
・regexp は \\(\\s-*\\) を前置する
・group は数字を渡さなきゃいけなくて、 1 がデフォルト
・spacing も数字を渡さなきゃいけなくて、 align-default-spacing がデフォルトで、これの初期値も 1
って感じの仕様になってる。
とりあえず (align-regexp (point-min) (point-max) "\\(\\s-*\\)//" 1 1) なら動くと思う。
0967デフォルトの名無しさん
2007/09/30(日) 08:50:19なるほど。
そうだったんですか。
ありがとうございました!
0968デフォルトの名無しさん
2007/10/01(月) 09:42:04範囲選択したあと,
C-c C-tで範囲内のすべての行の先頭にタブを追加したい
のですが,どうしたらいいのか教えてください.
0969デフォルトの名無しさん
2007/10/01(月) 10:49:450970デフォルトの名無しさん
2007/10/01(月) 15:47:01(defun oresama-function-insert-tab-in-head-of-line-on-region ()
"選択した領域のすべての行頭にTABを入れる"
(interactive)
(shell-command-on-region (region-beginning) (region-end) "sed s/^/'C-qTABとかでタブ文字をいれておく'/" nil t)
)
0971デフォルトの名無しさん
2007/10/01(月) 20:44:17"選択した領域のすべての行頭にTABを入れる"
(interactive "r")
(goto-char (max begin end))
(let ((begin (min begin end))
(end (point-marker)))
(goto-char begin)
(while (<= (point) end)
(when (bolp) (insert "\t"))
(forward-line 1))
(set-marker end nil)))
とか。
0972デフォルトの名無しさん
2007/10/01(月) 22:36:270973デフォルトの名無しさん
2007/10/02(火) 00:45:180974デフォルトの名無しさん
2007/10/02(火) 00:51:16なんでいろいろややこしい方法考えてるの?
0975デフォルトの名無しさん
2007/10/02(火) 01:24:51(interactive "r")
(save-excursion
(save-restriction
(narrow-to-region start end)
(goto-char start)
(while (re-search-forward "^" nil t)
(replace-match "\t")))))
0976デフォルトの名無しさん
2007/10/02(火) 02:16:46interactive に呼んだ場合にはそうだね。
でも他の関数から呼ぶ場合、呼び出し側がその条件を考えなくていいように、こうやる慣習がある。
>>975
narrow-to-region の使い方は参考になった。
ただ、このままだと start が行頭じゃなかった場合でも、必ずそこにタブが入っちゃうね。
narrow-to-region した結果、そこが行頭扱いになっちゃうから。
0977デフォルトの名無しさん
2007/10/02(火) 02:55:02(lambda (start end)
(interactive "r")
(save-excursion
(goto-char start)
(and (re-search-forward "^" end t)
(save-restriction
(narrow-to-region (point) end)
(while (re-search-forward "^" nil t)
(replace-match "\t"))))))
0978デフォルトの名無しさん
2007/10/02(火) 10:21:420979デフォルトの名無しさん
2007/10/02(火) 10:29:23で、ためしに自分も書き込んでみると、やっぱ似たレベルなんだよなwww
0980デフォルトの名無しさん
2007/10/02(火) 12:28:33(lambda (start end)
(string-insert-rectangle start end "\t"))
C-x r t とか。
それでも色々やってみるのは楽しい
0981デフォルトの名無しさん
2007/10/02(火) 13:16:49・start や end が行頭にあることを仮定していいのか
・行頭にない場合がありうるなら、どういう処理が期待されるのか
あたり。
単純に選択した範囲内って条件だと、 start と end それぞれが行頭にない場合を想定しなきゃいけなそう。
で、 start またはそれ以降の最初の行頭から、 end またはそれ以前の最後の行頭まで、各行頭にタブを挿入するってのが妥当かな。
もしかしたら、 start がある行の行頭にもタブ挿入するほうが喜ばれるかもしれないけど。
ってことで、 >>980 を元に、その手の処理を加えてみた。
(lambda (start end)
(interactive "r")
(save-excursion
(goto-char start)
(unless (bolp) (forward-line 1))
(string-insert-rectangle (point) end "\t")))
0982デフォルトの名無しさん
2007/10/02(火) 16:57:29で end を通り越しちゃうよ。
0983デフォルトの名無しさん
2007/10/02(火) 18:25:42なるほど、その状況には気がつかなかった。
その場合、何もしないのが正しいだろうから、対策はこんな感じでいいかな。
(lambda (start end)
(interactive "r")
(save-excursion
(goto-char start)
(unless (bolp) (forward-line 1))
(unless (> (point) end)
(string-insert-rectangle (point) end "\t"))))
0984デフォルトの名無しさん
2007/10/02(火) 18:35:39これだと >>982 の状況で更に end が (eobp) を満たす場合、行頭じゃなくても end の位置にタブ挿入しちゃう。
(lambda (start end)
(interactive "r")
(save-excursion
(goto-char start)
(unless (bolp) (forward-line 1))
(unless (> (point) end)
(when (bolp) (string-insert-rectangle (point) end "\t")))))
くらいしなきゃダメだね。
0985デフォルトの名無しさん
2007/10/03(水) 10:48:19これでReStructuredTextの整形済みブロックが楽々書けます!
0986デフォルトの名無しさん
2007/10/05(金) 01:39:19なんか違和感が。
0987デフォルトの名無しさん
2007/10/06(土) 15:33:570988デフォルトの名無しさん
2007/10/07(日) 11:42:33ウィンドウの下端にカーソルが来るようにしたくて、以下のように
書きました。 eobp でないか、ウィンドウの下端でなければ期待通
りに動作しますが、そうでないときにカーソルが上端へ移動してし
まいます。何が悪いのでしょうか?
Meadow21.4.1使っています。
(defadvice scroll-up
(around eob-scroll-up activate)
(condition-case err
ad-do-it
(error
(if (and (interactive-p)
(not (eobp)))
(goto-char (point-max))
(message "End of Buffer."))
(when (eobp)
(recenter (1- (window-text-height)))
)
nil)))
0989988
2007/10/07(日) 11:56:540990デフォルトの名無しさん
2007/10/07(日) 12:01:030991988
2007/10/07(日) 12:10:58recenter する位置が悪いだけでした。
condition-case の外側にしたらできました。
(defadvice scroll-up
(around eob-scroll-up activate)
"バッファ末への移動を可能にし、バッファ末の時 `next-screen-context-lines' を考慮してスクロール"
(condition-case err
ad-do-it
(error
(if (and (interactive-p)
(not (eobp)))
(goto-char (point-max))
(message "End of Buffer."))
))
(and (eobp)
(interactive-p)
(recenter (- next-screen-context-lines)))
nil)
0992デフォルトの名無しさん
2007/10/08(月) 17:10:19の下に
ダウンロードしたelisp
(本来なら/usr/share/emacs/site-lispとかにおくべきもの)
自作のelispのプログラム
をおくとしたら,どんなフォルダーするべきかの推奨はあるのでしょうか?
0993デフォルトの名無しさん
2007/10/08(月) 22:52:57オレは自作の elisp は ~/mylisp/ に入れていて、
他所から貰ってきたものは ~/elisp/ に入れている。
で、単体で使えるものは ~/elisp/elisp1/ に
パッケージでインストールするものは ~/elisp/elisp2/ に入れている。
~/elisp/subdirs.el を置いておいて、.emacs には
(let ((default-directory "~/elisp"))
(setq load-path (cons default-directory load-path))
(load "~/elisp/subdirs"))
0994デフォルトの名無しさん
2007/10/08(月) 23:03:35すでに ~/share/man とか ~/lib/ruby とかを作っているので
ダウンロードした方は ~/share/emacs/ で
自作は ~/lib/emacs を作るかな。
0995デフォルトの名無しさん
2007/10/08(月) 23:28:05/home/myname/share/emacs/site-lisp
自作のelisp
/home/myname/local/share/emacs/site-lisp
0996デフォルトの名無しさん
2007/10/09(火) 05:24:070997デフォルトの名無しさん
2007/10/09(火) 05:25:110998デフォルトの名無しさん
2007/10/09(火) 05:25:520999デフォルトの名無しさん
2007/10/09(火) 05:26:311000小倉優子 ◆YUKO3./00M
2007/10/09(火) 05:27:0110011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。