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

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

Emacs Lisp 2

1 :デフォルトの名無しさん:03/11/10 21:29
Emacs Lisp の専用スレ。
少数派による互助を中心に、初心者の相談も気が向けば受け付けます。
単なる 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/

2 :デフォルトの名無しさん:03/11/10 21:31
2

3 :デフォルトの名無しさん:03/11/10 21:46
(・∀・)ニヤニヤ 3-get-p?

4 :前スレ988:03/11/10 21:49
こういうのでいけるかと思ったけど...

(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))

5 :前スレ988:03/11/10 21:50
こういうのが駄目だと気づいた。

(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))))

6 :前スレ988:03/11/10 22:03
結局こんな感じにするしかないのか?誰かいいアイデアない?

(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))))

7 :デフォルトの名無しさん:03/11/11 08:34
> ; cl の symbol すべてを列挙する
これは多分必要だろうね。
ついでに subrで定義されてるけど clで再定義されちゃう関数対策も。

8 :デフォルトの名無しさん:03/11/11 17:27
つーかもういいよ。嫌いな人も cl はレスごと Navi2ch であぼーんでもすりゃいい
でしょう。漏れもさりげなくロードされてたみいだしもういいや。2ch で必死にl を
排除しても使ってるパッケージがロードしてちゃぁねぇ。ぶっちゃけランタイムにロー
ドされてても実害ないんだろ?


9 :デフォルトの名無しさん:03/11/11 18:55
cl 好きなのはかまわんが、警告無しで非互換な変更されることがあるぞ。
例えば、emacs20 で mapc は cl 関数として
(mapc CL-FUNC CL-SEQ &rest CL-REST)
と定義されていた。emacs21 になって built-in になったんだけど、
(mapc FUNCTION SEQUENCE)
と、一つしかシーケンスを受けとらなくなった。NEWS には新規にmapc が実装
されたとは書いてあるけど、cl ユーザーへの notice は何も無し。ランタイ
ムで cl を要求するコードは推奨してないのだから、そういったコードへの配
慮は必要無いってことみたい。

10 :8:03/11/11 19:18
別に cl 好きではない。むしろ emacs スレではアンチ cl だった。でも、
知らない間にロードされてんの。アンロードとかできないんでしょ?
使ってる elisp を全部チェックして cl 使ってるやつを排除するのマンドクサ。
激しく致命的な問題があるなら考えるけどさぁ…。

11 :デフォルトの名無しさん:03/11/11 19:35
全部チェックしなくても
(require 'loadhist)
(file-dependents (feature-file 'cl))
これでわかるよ。

12 :not 8:03/11/11 20:02
>>11
おーこれ知らんかったー、サンクス。やってみたら犯人は completer だった。
こいつはしゃーないなぁ…


13 :デフォルトの名無しさん:03/11/11 20:34
一つ外すとまた別のが表示させるから、これがなくなるまでやっていけって?
color-theme を外して…げっ!eieio とか外しちゃ話になんねぇ…。つーか…これって、
コンパイル時に使ってるだけの奴もひっかかってない??やっぱ手動チェックかなぁ…。

14 :デフォルトの名無しさん:03/11/11 20:41
犯人ってひどい言い様だな。もう、いい。漏れは eieio は捨てられん。
cl ロードしていいよ。もう cl 使うな原理主義者の文句は甘受する。
つーか、(require 'cl) するだけじゃねーか?俺関数が乱立するよか
よっぽどマシだろ。

15 :デフォルトの名無しさん:03/11/11 20:51
cl をロードしてるっぽいパッケージ一覧。(require 'cl)で grep。
tuareg, eieio, ecb, haskell-mode, ilisp, python-mode
speedbar とかかな。sml-mode や navi2ch や Mule-UCS の一部にも
eval-when に囲まれてない (require 'cl) があるな。でもコンパイル
して使う分には問題ないの?つーか、そこまでして cl は避けなきゃいけないの?

16 :デフォルトの名無しさん:03/11/11 22:19
そもそも、なんで cl は自分で定義する関数、マクロ等々を cl-... とプレフィックスを付けなかたったの?
そもそも、なんで elisp にはパッケージ管理等の名前空間管理システムがないの?
そもそも、なんで elisp は dynamic bind なの?

17 :デフォルトの名無しさん:03/11/11 22:29
全部 rms のせい。
言動を見てると、Emacs Lisp はあくまでもエディタ拡張用言語であり、
本格的なプログラミングには別の言語を使って欲しいような感じ。

18 :mami:03/11/11 23:07
>>15
> eval-when に囲まれてない (require 'cl) があるな。
navi2ch で bcomp.el 以外にあります?

19 :デフォルトの名無しさん:03/11/12 00:09
>>16 dynamic bind 云々は Lisp の歴史を考えれば仕方ないだろう。てゆう
か、cl なんかロードしちまってもいいんじゃねーの?と flim とかで苦しんだ漏れは思うわけだが。
ま、病的に cl を恐れてるんじゃなければ、かまわんだろ。そんなことより
もっと elisp 話しようよ。

20 :デフォルトの名無しさん:03/11/12 00:40
> もっと elisp 話しようよ。
そだね。じゃあ、どうでもいいネタをひとつ。こういうマクロ作ってみた。
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)


21 :デフォルトの名無しさん:03/11/12 00:50
別に cl依存したパッケージ作成されようが俺的には全然構わんが、
# たとえ eval-when-compileとかしてなくっても、だ。
clな関数な話題は、なるべく lispスレを利用していただきたい。

22 :デフォルトの名無しさん:03/11/12 01:26
>>20
make-symbol はそれでいいけど、
< `(let ((,tmp-alist alist))
> `(let ((,tmp-alist ,alist))

23 :デフォルトの名無しさん:03/11/12 01:29
>>21
> clな関数な話題は、
今の話題は cl な関数自身ではなく、cl がもたらす弊害について。
つまり、このスレ以上に適切なスレはない。
おまいが舞う構わないは全く関係無い。

24 :デフォルトの名無しさん:03/11/12 01:54
ちゅーか、なんで cl な関数な話題は lisp スレで、なの?
cl って elisp で書かれた elisp 用のライブラリだよね?

25 :デフォルトの名無しさん:03/11/12 01:59
>>23
cl の弊害って今まででた奴は A. 標準関数を拡張しちゃう、B. 俺関数とあたる、
C. 将来の非互換の可能性、くらいか? B. C. はあらゆるライブラリに共通だと
思うが、A. はいかんともしがたいな。我慢できねー香具師は我慢ならんだろう。

mapc なんかも Common Lisp というリファレンスがあるだけわりと互換性の
ある変更で済んでマシな部類だっと思うけどねぇ。

26 :デフォルトの名無しさん:03/11/12 02:31
A は cl 的には bug じゃないの?
info ではバッティングは避けるようなこと書いてあったけど。

27 :デフォルトの名無しさん:03/11/12 02:37
というかさ、name space が一つしかないんだから、
emacs がこの先どれくらい進化するのか知らんけど、
こういうどろくさい部分は残り続けるな。
つーかすでに妥協のかたまりみたいなもんで、
本当にクリーンなもの使いたいなら hemlock とか使うしか。

28 :デフォルトの名無しさん:03/11/12 05:10
>>22
うおっと、たまたま変数名が同じで動いてただけか。
しかし、なかなか話題が変らんな... 2ch であーだこーだ言っても仕方無かろうに。

29 :デフォルトの名無しさん:03/11/12 07:54
他に話題もないようだし、いいんじゃねーの?

30 :デフォルトの名無しさん:03/11/12 08:22
(defun hoge (x y)
(mapcar (lambda (z) (cons x z)) y))
こんな関数どっかにある?

31 :デフォルトの名無しさん:03/11/12 10:31
>>30
あるとしたら、どんな名前になると思う?

32 :デフォルトの名無しさん:03/11/12 19:22
map-cons

33 :8:03/11/12 20:42
>>18 それだけです。bcomp.el ってバイトコンパイル用の lisp ですか。
   ちょっと見ればわかるのに、よく読まずに名前を挙げてしまって申し訳ないです。

34 :デフォルトの名無しさん:03/11/12 22:28
>>30
わざわざ別関数にするほど汎用性があるとは到底思えないのだが

35 :デフォルトの名無しさん:03/11/12 22:37
別関数にした理由は2回でてきたのと
lambdaの中で使ってたのでlambdaを減らして見やすくしようかと。

36 :デフォルトの名無しさん:03/11/13 00:12
前スレ後半に出ていた loop を使って、
(loop for z in y collect (cons x z))
と書けば?と思ったが、
(mapcar (lambda (x z) (cons x z)) y)
こっちとタイプ数が変わらない事に気づいた。だめじゃん loop …
ま、こんなの適当に名前つけとけばいいんじゃないの?

37 :デフォルトの名無しさん:03/11/13 00:55
また話を蒸し返す……。

38 :デフォルトの名無しさん:03/11/13 02:02
漏れは cl 良いと思うけどね。気にせず語れや。loop だって while に
展開されるんだから 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 だけは勘弁な。

39 :デフォルトの名無しさん:03/11/13 02:35
(ふりだしに戻る)

40 :デフォルトの名無しさん:03/11/13 04:19
Emacs Lisp の専用スレ。
少数派による互助を中心に、初心者の相談も気が向けば受け付けます。
単なる 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/


41 :デフォルトの名無しさん:03/11/13 05:24
elispと関係なく cl利用なコード披露したがる奴が
時々現れるから変な事になるんだろ?
ま、elispと関係なく scheme的なコード披露したがる奴も
たいていセットなんだけど。
なんで自分達の巣におさまってないのかねぇ。

42 :デフォルトの名無しさん:03/11/13 05:40
scheme的なコードも嫌われるの? 何故?

43 :デフォルトの名無しさん:03/11/13 05:56
末尾再帰で書くから

44 :デフォルトの名無しさん:03/11/13 08:25
eval-and-compileって、これで括らない場合とどう違うのか、
ドキュメント読んでも分かりません。
具体的に、どういう時に有効なのでしょうか?

45 :デフォルトの名無しさん:03/11/13 09:47
コンパイルされることを前提にいくつもの環境を念頭においた*.elや.emacsを書いていてload-pathやrequireが絡むときとか。

てゆーか人に聞く前にgrepくらいしろぃ。
標準添付のelispでも結構使われてるじゃねーか。


46 :デフォルトの名無しさん:03/11/13 10:19
>>41 Scheme 的なコードって再帰つかうやつことの話?
41 の思う elisp なスタイルってどんなのよ?

47 :デフォルトの名無しさん:03/11/13 10:50
cl 禁止ってこたぁ ignore-errors も使っちゃだめなの?エラー処理とかどうすんだよ… >>41
(codition-case 'hoge
(progn (エラーを無視したいコード))
(error nil))
とか書かなきゃならないの?マンドクサ…。

48 :デフォルトの名無しさん:03/11/13 14:05
>>45
grepぐらいしてるよ〜。あちこちで見かけるけどサパーリ分からなくて
悲しい思いしてるのに、無下に切り捨てないでくれよ。

49 :デフォルトの名無しさん:03/11/13 17:51
>>47
同じような意見は何度も出てるんだけど、わざとループさせようとしてるの?

50 :デフォルトの名無しさん:03/11/13 18:27
ループって今迄に ignore-errors の話が出てたのか…?いや、使うなって意見が
激しくしつこいから、無しでやっていってるのかな〜とおもって。(condition-case ...)
で長くなったらダルくない? 漏れは ignore-errors とかは使うほうが良いと思うし、
どーせ cl 使うなら便利な機能の話は有難い。しかし、本当に使ってはいけないなら
使うのを止めてもいい(別に愛着があるわけじゃないし)。 ロードしたくない人むけに
eval-when-compile でコンパイル時に使うようにすりゃいいだけの話ではないの?

51 :デフォルトの名無しさん:03/11/13 18:51
>>48 どーゆう時に役に立つかって?
1 - cl をランタイムにロードするのが我慢ならない人が居ます。
2 - 普通に (require 'cl) と書くと,そのプログラムをロードしたときに cl がロードされてしまいます。
3 - したがって cl を使うときは (eval-when-compile ...) で囲んでコンパイル時に評価しておきます。
すると,そのプログラムをロードしても cl はランタイムにはロードされません。cl を使うときは
eval-when-compile で囲むのが御行儀が良いとされています。eval-when-compile はこーゆう時に有効なのです。

え、コンパイルしないでロードしたら? その場合は普通に require されてしまうの
で、elisp コードをむやみに評価しないように気をつかいましょう。下手をすると
cl がロードされてしまいます。

# 気にしない人は全然気にしないからこの手の話は荒れるんだよな…。

52 :デフォルトの名無しさん:03/11/13 19:02
ignore-errors は普通に elispなコード書いてても便利だよね。
(require 'cl)して利用してるパッケージも多いし、
俺もここで書かれるまで clのとは知らなかった。
このスレで clウザがられてるのは、
elisp(emacs上で動かしたい)コードの一部として
loop なり mapcon なりが出てるのでなく、
それを使う事自体が目的に見えるというか、全面に出てきすぎてて
拒否反応起こす人がいるとか?
あと各種パッケージでも利用頻度低い clの関数は
馴染みがないわけだし。
# incfあたり、そろそろ解禁日も近い感じがするが。

53 :デフォルトの名無しさん:03/11/13 19:04
>>51
× eval-when-compile
○ eval-and-compile

;; eval-when-compile は自明っしょ。

54 :デフォルトの名無しさん:03/11/13 19:58
バイトコンパイル時には、トップレベルのフォームのうち、限られた物しか
評価されない。あるフォームをバイトコンパイル時にも確実に評価したい場合、
eval-and-compile で囲む。
foo.el:
(eval-and-compile
(message "hoge")
(sit-for 1))
bar.el:
(message "hoge")
(sit-for 1)
をバイトコンパイルしてみると違いがわかる。

55 :デフォルトの名無しさん:03/11/13 20:28
自分で書いたわけでなくて申し訳ないが、例えば↓とか読みやすくない?
(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))))))

56 :デフォルトの名無しさん:03/11/13 20:29
>>50
未出の各マクロについてこれは便利だから…てやってったらループじゃん。
これまでに cl マクロ自体の有用性を否定してる人はほとんどいないから、
個別のマクロ挙げていっても意味ないわけ。
>>52 が書いてるように、cl で書くこと自体が目的のようなレスが目立ったり、
cl から発展して Common Lisp 自体の議論 (loop マクロの是非等) を延々と
続けられたりしたので、cl マクロを使ったコードを *このスレに書く* のが
嫌われてる。

57 :デフォルトの名無しさん:03/11/13 20:46
… cl のコードを LISP スレに貼ってどうなると言うのだ?
つーか、emacs 用コードを lisp スレに貼られてもなぁ…。
elisp の話は elisp スレのが相応しいような…。

58 :デフォルトの名無しさん:03/11/13 20:56
>>57
前スレ後半あたりとか、別にemacs用コードじゃない clなコードが
ちょっと多めだったよ。あのあたりからじゃん、clネタのループって。

59 :デフォルトの名無しさん:03/11/13 21:08
よっしゃ。そんじゃ、とりあえず 55 のコードを理想的な elisp スタイルに
書き直して loop に引導を渡してやれ!俺は while に展開されるなら、まぁ、
いいかなぁという気がしている。elisp らしいスタイルとやらをビシっと見せてくれ。

60 :デフォルトの名無しさん:03/11/13 21:35
元コードって w3m-url-encode-string じゃないの?

61 :デフォルトの名無しさん:03/11/13 22:30
ああ!もう! elisp は末尾再帰が最適化されないんだから話題の tail call はやめてよ!!

62 :デフォルトの名無しさん:03/11/13 22:33
>>59
(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)))))

63 :デフォルトの名無しさん:03/11/13 22:40
あ、(apply #'concat (mapcar (lambda ... は (mapconcat (lambda ...
の方がいいか。

64 :デフォルトの名無しさん:03/11/13 23:06
elisp キターー。elisp 入門者の漏れは初めて mapconcat 使いどころがわかりますた。アタマイイ!
さすがに loop よりビルトインの mapcar や mapconcat のが速いですね。いや〜勉強になります。
elisp だと効率が大事なところは組み込みの map 系を使うのが最速ですかね?
ところでこーゆうときは mapconcat のセパレータは "" と nil のどっちがいいんでしょう?

65 :デフォルトの名無しさん:03/11/13 23:18
elisp 上の性能なら ビルトイン > while = loop > 再帰 だろう。elisp レベルの
反復より C レベルの反復のが速いのは当然。再帰は…Scheme 化を待て。

66 :デフォルトの名無しさん:03/11/13 23:55
同じシンボルで関数セル、変数セル、属性セルの
三つとも利用してるコードって結構沢山あると思うんだけど、
もしもし scheme化されたら、そーいうのってどうするの?

67 :デフォルトの名無しさん:03/11/14 00:16
置換の関数使ってもいいんじゃない?

68 :デフォルトの名無しさん:03/11/14 01:02
結構メジャーなパッケージでも、
複数に分けた方がいいような一つの関数が
必然性もなく長々続くことがあるので、
なんでこんな書き方するんだろうなーと思ってたが、
多数の人間で長い間開発してると、他の人への配慮もあって、
なかなか無闇に関数を整理できなくなってくるからかもと
思い始めた。

69 :デフォルトの名無しさん:03/11/14 01:05
>>66
http://www.gnu.org/software/guile/docs/guile-ref/Symbol-Props.html
elisp からの変換用に、シンボルには関数スロットやプロパティスロットも
用意されてるよ。後はトランスレータの仕事。

70 :デフォルトの名無しさん:03/11/14 01:43
変数、関数はともかく、property は関係無いでそ

71 :デフォルトの名無しさん:03/11/14 04:21
guile-emacsって進んでるの?
がんがったけど、あきらめたのかと思ってたんだけど。
emacs21互換のguile-emacsは無いよね。

72 :デフォルトの名無しさん:03/11/14 07:08
一応やってんのかな。
http://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年後くらいか。

73 :デフォルトの名無しさん:03/11/14 07:49
guile-emacs といえば、lookup の作者はどうした

74 :デフォルトの名無しさん:03/11/14 09:44
>>73
おごちゃんに弟子入りしてバリバリのコボラになってしまった。;_;
なんでリスパがコボルに。


75 :デフォルトの名無しさん:03/11/14 10:16
>>74
lookupの開発は誰か引きついでるの?


76 :デフォルトの名無しさん:03/11/14 11:11
>>74
相当の変人だと思っていたが、そこまで変人とは

77 :デフォルトの名無しさん:03/11/14 12:39
どんなところが変人なの? >>76


78 :デフォルトの名無しさん:03/11/14 12:43
>>75 Lookup が放棄されて有志が引き継いだのは有名な話。


79 :デフォルトの名無しさん:03/11/14 13:23
>>76 匿名だからってそんなこと書いちゃいくないね。


80 :デフォルトの名無しさん:03/11/14 15:17
>>78
のこのこ戻ってきて、また放り出したのも有名

81 :デフォルトの名無しさん:03/11/14 17:42
lookup の現状がよくわからない

82 :デフォルトの名無しさん:03/11/14 21:24
あんまり脱線すると「○○話は××スレで」とスレ奉行様のお怒りを買うぞ。

83 :デフォルトの名無しさん:03/11/14 22:42
スレ奉行の話はスレ奉行スレで

84 :デフォルトの名無しさん:03/11/15 23:08
うーん、はまった。
(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 キボン。

85 :デフォルトの名無しさん:03/11/16 00:16
(defun bar (function)
(foo `(lambda () (,function))))

86 :デフォルトの名無しさん:03/11/16 00:24
(defun bar (function)
(foo function))

87 :デフォルトの名無しさん:03/11/16 00:36
>>85
それだと function じゃなくて cons を渡してることになる。
動作は同じだけどバイトコンパイルされない。

>>86
84 は単純化してる。実際はもっと複雑な処理をする高階関数からもっと複雑
な処理をする高階関数を読んでるので、その指摘は的外れ。

88 :デフォルトの名無しさん:03/11/16 00:47
(defun bar (function)
(foo (byte-compile `(lambda () (,function)))))

89 :デフォルトの名無しさん:03/11/16 01:12
>>88
byte-compile がコンパイルする引数は lambda。car が 'lambda のリストではない。
実際にそれで動くということと、そう書いていいかということは違う。

90 :デフォルトの名無しさん:03/11/16 01:56
>byte-compile がコンパイルする引数は lambda。
lambdaってのはどういう意味なの?

91 :デフォルトの名無しさん:03/11/16 04:02
ラムダ(λ)
lambda
<サイエンス‐単位・計測>
微小な体積を表すのに用いてきた単位で、一マイクロリットル、すなわち一〇億分の一立方メートルに
当たる。



92 :デフォルトの名無しさん:03/11/16 07:39
10年くらい前、ワールドミュージック(死語?)の流れで瞬間的に流行ったダンス音楽。


93 :デフォルトの名無しさん:03/11/16 11:21
>>84
仮引数の名前にプレフィックスをつけとく。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index.html#cl-elisp-memo-lambda
前スレでも同じ話題がでてた。

94 :デフォルトの名無しさん:03/11/16 12:26
84は実は今回嵌ったわけでもないが、話題作りのために
嵌ったふりをしているに一票。
# いや、参考になったけど。

95 :デフォルトの名無しさん:03/11/19 14:45
elisp パッケージの発表場所で、有名どころは日本にある?
ドキュメントが英語なら gnu.emacs.sources でいいだろうけど。


96 :デフォルトの名無しさん:03/11/19 14:49
XEmacs 専用パッケージは gnu.emacs.sources にはポストしにくいでしょう?


97 :デフォルトの名無しさん:03/11/19 15:55
http://www.emacswiki.org/cgi-bin/emacs-jp.pl
とりあえずこのあたりはどうか。日本とは言えないかもしれないけど

98 :デフォルトの名無しさん:03/11/19 17:09
>>97
> * 日本人制作 Elisp の公開場所の提供、
ここは良さそうだね。

http://www.emacswiki.org/elisp/index.html
elispパッケージの一覧もあるし。

各パッケージの先頭一行目に書かれている説明が日本語に翻訳されていると、
英語が苦手な人が選ぶときにいいとおもう。
;;; a-menu.el --- create a menu from a specified directory
これを
;;; a-menu.el --- 指定したディレクトリからメニューを生成する。
として一覧になっているといいなと。
あっ、俺がやればいいのか。

99 :デフォルトの名無しさん:03/11/19 18:42
Nemacsも対象なのか。メモ用に併用してる俺のために、
M-x とか M-:でヒストリ使えるようにする elispとか誰か作ってくれないかな。
多分どこかのアーカイブに埋もれてそうな気もするが。

100 :デフォルトの名無しさん:03/11/21 14:19
100ゲトズザ。
Nemacs Lisp と GNU Emacs Lisp の違いを一行で述べよ。
俺の超能力によると、Nemacs lisp = GNU Emacs19 Lisp + 日本語処理関連。


101 :デフォルトの名無しさん:03/11/25 08:47
そうですか、誰にも相手をしてもらえませんか。
googleでちょろっと調べた感じでは、
Nemacs lisp = GNU Emacs18 Lisp + 日本語処理関連
みたいですね。
私はelispパッケージを開発するときは最低限度として、GNU Emacsの最新版と
XEmacsの最新版で動くように気をつかっているけど、さすがにNemacsまでは
手がまわらないという気持ちです。


102 :デフォルトの名無しさん:03/11/25 15:50
Nemacsは趣味ですから。
ちょっと変更で対処できるならする。そうでないなら諦めるかな。

103 :デフォルトの名無しさん:03/11/27 01:18
あのくらいの軽快さと lisp の拡張性があるのは
魅力的だね。
なんで今の emacs はあんなに重いんだろう。

104 :名無しさん@お腹いっぱい。:03/11/27 02:10
タブ文字を含むときのカラム位置の計算にバグがあったのが致命的だったな

105 :デフォルトの名無しさん:03/11/27 09:41
elispで「画面上での行」の概念を扱おうとするとハマるよね。
vertical-motionを使って、画面行単位の移動コマンドを書いたことあるんだけど、
タブなんかが入ってくると、もう気が狂いそうでした。結局、ユーザから文句が来た
ときだけ、場当たり的に対処するという泥縄になっています。


106 :デフォルトの名無しさん:03/11/27 09:48
105が3人ぐらいまでに絞れたわけだが。

107 :105:03/11/27 09:51
イヤーン! トクメイのママでイサセテ....



108 :デフォルトの名無しさん:03/11/27 11:28
>>103
> あのくらいの軽快さと lisp の拡張性があるのは
> 魅力的だね。
> なんで今の emacs はあんなに重いんだろう。
それがemacsに統合されたMULE部分のせいにされたりして怒っている西洋人もいるよね。

俺としてはelispするときに、MULEのおかげでcharacter型で多国語の文字を透過的に扱えるのが
非常にうれしい。まぁ、いまとなっては他の言語でもUnicode対応しているみたいだけど。
そういえば、Meadow2ではUTF-8が標準で扱えたな。やるなGNU Emacs21。XEmacsはどうだろ。


109 :デフォルトの名無しさん:03/11/27 12:45
>>84-94 で扱っている問題って、有名なFunarg問題だよね?


110 :デフォルトの名無しさん:03/11/27 22:07
>>103
Nemacsが出た当初から「軽い」と言われていたかは大変疑問です。


111 :デフォルトの名無しさん:03/11/27 22:47
コンピュータでやってることのレベルは変わらんのに、
なぜソフトウェアは必要スペックがどんどん増えるんだろう。

112 :デフォルトの名無しさん:03/11/27 22:58
> コンピュータでやってることのレベルは変わらんのに、

この仮定が間違っているから

113 :デフォルトの名無しさん:03/11/28 02:09
というか、
emacs はコンピュータの処理能力の進化よりも重くなってはいない
と思う。


114 :デフォルトの名無しさん:03/11/28 02:53
> コンピュータでやってること
昔: 2次元エロ画像でオナーニ
今: 2次元エロ動画でオナーニ
先: 3次元エロ動画でオナーニ


115 :デフォルトの名無しさん:03/11/28 09:08
>>114 一面の真理をついてるね。
>>113
> というか、
> emacs はコンピュータの処理能力の進化よりも重くなってはいない
> と思う。
おれもそうは思うけど、elispが強力すぎて、「これelispでできないかな?」->
「ちょっといじってみるか」 -> 「プロトタイプができちゃった」-> 「発表しちゃえ」
<- イパーン人:「遅せーよ。それにエディタのマクロ言語でそこまでやるか?」
という感じになることも多いのでは、webブラウザといい、psgmlとか...


116 :デフォルトの名無しさん:03/11/28 09:39
psgml はいいから nxml 使え、と。

117 :デフォルトの名無しさん:03/11/28 10:15
is nxml a replacment for psgml? http://mail.gnu.org/archive/html/help-gnu-emacs/2003-09/msg00568.html
nxmlの公式サイトがみつからないな...

James Clarkタソはelispのプログラムを発表するのはこれが初めてかな?
コードの質はどうだろう? (と無理にelispの話題へ)

nxml-mode.elをちらっと見ただけだけど、elファイルの慣習に従ったファイル書式だし、
docstringの書き方も先頭は短い1文でそのあとに長い説明という慣習に沿っているな。
まぁ、さえてる人は何をやらせても...ということかな?


118 :デフォルトの名無しさん:03/11/28 10:56
関数や変数の定義文に書くdocstringの多国語化なんてのは話題にならないのかな?
アイデアとして本来のelispファイルとは別ファイルで各関数、変数の
日本語や他の言語のdocstringを定義できるという仕組みがあれば、
elispにそんなに詳しくないけど英語が読める人が、自分の使っている
コマンドのdocstringを片っ端から翻訳してそのファイルを配ってくれる
というシナリオもあるのでは?


119 :名無しさん@お腹いっぱい。:03/11/28 13:18
>>118
ダンプ分なら、起動時にDocファイルへのポインターを書き換えるという実装
なら簡単そうだな。


120 :デフォルトの名無しさん:03/11/28 13:37
>>119
> ダンプ分なら、起動時にDocファイルへのポインターを書き換えるという実装
>なら簡単そうだな。
ああ、Docファイルか... なんかそんなことやっていると聞いたことがあるような。
最初は実行時に食うメモリを小さくしようとしてやったという話だったような。

それだとDocファイルの翻訳を、一人で全部やるという話になりそうな気がする。
そうするとみんなビビって手を出したがらないような。とくに分かっている人ほど
自分が知らないコマンドの翻訳をするのを避けたがるような。

自分がよく利用するコマンドで何が起こるかよく知っている人が自信を持って、
翻訳する。そして、それが沢山、集積されて、よく使われるコマンドほど
翻訳が早くすすむというシナリオを頭に描いていますた。
この話題ってスレ違いじゃないよね?


121 :デフォルトの名無しさん:03/11/28 14:23
そんな人間は翻訳なんてしたがらないと思うが。
そうすると信頼性も落ちるし、誤訳などのフィードバックと再配布をうまくやる
仕組みがないと難しいんじゃないかな。


122 :デフォルトの名無しさん:03/11/28 14:26
XEmacs 方面で docstring にも gettext を使う作業してたと思う。
翻訳がどの程度進んでるか知らないけど。

123 :デフォルトの名無しさん:03/11/28 14:59
>>121
> そんな人間は翻訳なんてしたがらないと思うが。
大量には翻訳をしたくないけど、気が向いたときにちょこっと
自分が良く知っているコマンド群の翻訳をやりたいって人は結構
いるような気がします。私もその一人ですし。

イメージとして翻訳の責任者が一人いて、誤訳や訳語などの調整、管理を行い、
各訳者はWikiみたいなシステムを利用してフラッと訪れては翻訳するという感じです。

現在たりないのは実は翻訳者ではなく、翻訳者たちの管理者なのではないかと思います。
訳語なんかもEmacsに関する文書(マニュアル、elispマニュアル、docstring, ...)の
日本語化ということできっちり決めてしまえば、(例えばbufferはバッファなど)
それこそelispでちょっとした自動翻訳もどきも実現してしまうのでは?


124 :デフォルトの名無しさん:03/11/28 21:28
docstringなんかアテになんないからイラネ

125 :デフォルトの名無しさん:03/11/28 21:37
そんなこと言うなよ。せっかく書いたんだからさ。

126 :デフォルトの名無しさん:03/11/29 13:18
>>124
> docstringなんかアテになんないからイラネ
これはelisperの反応としてはある意味で正常と言うか、
私もまず分からないことがあればコードを見ます。

ところが一般ユーザーはEmacsを文書作成のためのエディタとしてみているわけで、
elispの実行環境として見ているわけではありません。したがってelispのコードを
読む気も起きないでしょう。

現在、マニュアルは日本語に翻訳がされていますが、docstringはまだ日本語化
されていません。流れとしては、次に翻訳のターゲットになるのは、コマンドや
defcustom関連のdocstringや各パッケージのelファイルに書かれている ;;; Commentary:
部分ではないでしょうか?

Emacsに標準添付されているパッケージ群が英語で説明が書かれているだけで、
一般ユーザの目にふれないままになるのは、あまりにも、もったいないと思います。

ゲリラ的に、ウェブページ上で各パッケージの使用説明書を書いているボランティア
もいるみたいですけど。

127 :デフォルトの名無しさん:03/11/29 21:14
;;; Commentary: は確かに日本語で読みたい事しばしばだな。
どっちかというとユーザとして読む事が多いから。

128 :デフォルトの名無しさん:03/11/30 12:52
こうした考え方の行く先には、コマンド名、変数名の日本語化という課題もありますね。
それが良いことかどうかは、判断が分かれるでしょうけど。


129 :デフォルトの名無しさん:03/11/30 13:21
>>128
別に変数や関数の名前を国際化せんでも、docstring を国際化する仕組みさえ作れば、
Costomize に全部放り投げれるやん。
国際化するために一々変数やら何やら書換えてたらプログラマが逃げ出すぞ。

130 :デフォルトの名無しさん:03/11/30 13:39
>>129
> 国際化するために一々変数やら何やら書換えてたらプログラマが逃げ出すぞ。
たしかにそうなのですが、コマンド名くらい日本語でも...
普通のアプリケーションのメニューは日本語化されるのが通例だし...

あと、純粋にプログラマとしての考えでは、関数、変数のための気のきいた
英語名を考えるのってかなり苦労しませんか? ネイティブスピーカーでは
ないのだし。

だったら日本語なら適切な変数名を思いつくのかと言われれば、
「やってみなければ分からない」とこたえるしかないですね。

表計算やデータベースなどのマクロ言語を使ったプログラミングでは
変数名などに日本語が使われている歴史がありますよね?


131 :デフォルトの名無しさん:03/11/30 14:49
別に今でも

(defvar てすとメッセージ "日本語の関数、変数名のてすと")
(defun てすと ()
(interactive)
(message てすとメッセージ))

ぐらいなら出来るけどね(^^;;

132 :デフォルトの名無しさん:03/11/30 14:55
>>131 あっ、できるんだ。じゃどうせ英語でドキュメント書かないつもりなら、
日本語でプログラミングしてもいいですね。ウソウソ、デモ、チョットホンキ。


133 :デフォルトの名無しさん:03/11/30 19:10
ローマ字で名前をつけてるやつもいる

134 :デフォルトの名無しさん:03/11/30 23:02
ローマ字で書くと昔のベーシック見てるみたいで
かっこ悪くない?
(defun ni-bai (atai)
(* atai 2))

(ni-bai (ni-bai futon))

135 :デフォルトの名無しさん:03/11/30 23:47
日本語で書くと、既存の関数と混ぜたときに激しくキモい


136 :デフォルトの名無しさん:03/12/01 00:21
ひたすら defalias するとか。

(defalias '関数定義 'defun)
(defalias 'もし 'if)
(defalias '小さいか等しい '<=)
(defalias '一引く '1-)
(関数定義 竹内関数 (甲 乙 丙)
(もし (小さいか等しい 甲 乙)

(竹内関数 (竹内関数 (一引く 甲) 乙 丙)
(竹内関数 (一引く 乙) 丙 甲)
(竹内関数 (一引く 丙) 甲 乙))))


137 :デフォルトの名無しさん:03/12/01 00:30
変数名なんて、よっぽどうまくやらないと趣味の悪い訳語になると思う。
ただでさえオープンソースものの日本語訳の質は貧弱なのに。

あと、ほとんどのシンボルはいくつかの単語を`-'でつないだものだったりするが、
「ほげ-もげ」……美しくない。入力もしにくい。

>>130みたいな日本語キチガイの伝でいけば、Excelの関数も日本語になってないのでまずそうだが、そっちはいいのか?


138 :デフォルトの名無しさん:03/12/01 07:53
>>134
> (* atai 2))
atai を atoi (ascii to integer)と見間違って数秒間だけ思考がとまりました。
たぶんプログラミング中は、頭が英語モード(省略表記の展開機能付き)になっていると
思われます。

>あと、ほとんどのシンボルはいくつかの単語を`-'でつないだものだったりするが、
>「ほげ-もげ」……美しくない。入力もしにくい。
これは日本語にあったトークンのつなぎ方の研究も必要でしょう。

> >>130みたいな日本語キチガイの伝でいけば、Excelの関数も日本語になってないのでまずそうだが、そっちはいいのか?
これも時の流れの中で決まると思いますが、素人の視点にたったとき、
なんでプログラミング言語は日本語を使わないの? という疑問はいつまでも残る気がします。

「プログラミング言語では国際語である英語を使うのが普通になっているおかげで、国際的に
通用するソースコードになっていい。」という意見には、「じゃぁ、最初から、みんなで英語を
使って生活する?」ということを聞いてみたい。

すくなくとも、個人が書き捨てにするようなプログラムでは日本語でプログラミングできてあたりまえという考え方が
なさすぎる気がします。

とはいうものの、big, small, large, one, two, ... などアルファベット表記されている単語でも
ほとんど日本語になってしまっているものもありますね。


139 :デフォルトの名無しさん:03/12/01 08:05
これは極端な例ですが、charがcharacter、intがintegerの略だと分からないような人ってもしかして、
結構、初心者には多くないですか? 侮りすぎですか?
そして説明されても「intはintegerの略です」-> 「integerってなに?」みたいな。
「integerとは整数です」という説明が英語圏の人より1つ余分に必要になりますね?
この手の余分に教育にかかる手間の総量はどのくらいでしょう?

インドに優秀なプログラマが多いと噂に聞きますが、あそこのプログラマたちは
英語がペラペラですよね?


140 :ヽ(´ー`)ノ:03/12/01 08:59
>>138
いや、だからさ、国際化なんて UI で解決すればいいし、そうすべきモノでしょ?

> 「プログラミング言語では国際語である(以下略)聞いてみたい。
日常生活と不特定多数の人間が読むコードを一緒くたにする神経が俺には信じられん。

もう一つ重要な(というか、当然の)事、肝心のコーディングの事を考えてない。
ある日本人が日本語を使ってコードを書き、自分のコードを GPL で公開しました。
そのプログラムが気に入ったギリシャ人のオッサンは特定の機能がギリシャ語では
うまく機能しない事に気が付き、修正する事にしました。

1. 日本語フォントをインストールする
2. 日本語入力をするために IM を入れる
3. 使っているツール(エディタ、コンパイラ、etc) を国際化対応させる

この論理で行くと、優れたプログラマはフランス語もドイツ語もハングルも日本語も、
そして勿論英語も知ってなきゃいけない。少なくともオープンソースにおいては
英語でコード書いた方が可搬性/生産性が高くと思うんだけど、どうよ。
そもそもクローズドならそもそも初心者のために変数名を多言語化する必要ないし、
その上、自分達のコードを日本語やローマ字で書くという選択肢は以前として存在する。

プログラミングを勉強したい初心者ならついでに英語も勉強してくらはい。
main, this, class, get/set, print とかなら中学生でも分かるでしょ。
別に TOEIC 700 点以上取らないとコードが書けないって訳でもなし。

>>139
「int = 整数」でいいじゃん。それなら一段階。
なんで int なの?って説明を求められた時に始めて答えてあげれば良い。


141 :デフォルトの名無しさん:03/12/01 09:21
>>140
> 英語でコード書いた方が可搬性/生産性が高くと思うんだけど、どうよ。
> そもそもクローズドならそもそも初心者のために変数名を多言語化する必要ないし、
> その上、自分達のコードを日本語やローマ字で書くという選択肢は以前として存在する。
いやお説ごもっともです。異存はございません。それを踏まえての、あえてしてみる、
思考実験として書きました。

> 「int = 整数」でいいじゃん。それなら一段階。
> なんで int なの?って説明を求められた時に始めて答えてあげれば良い。
int = 整数を覚える手がかりがまったくありませんね?
極端に話題を振るのが好きな私としては「BooFooWoo = 整数ね」といわれて
なっとく出来るのかなと。ネイティブスピーカーなら「integerを略してintと書くのね」
と即座に納得できるだろうし。

英語と日本語との違いという面では、漢字が我々の脳へ訴える力、
例えば、planeより面、axiomより軸、interfaceより界面のほうが、
われわれの心に響くのでは?

以上を書いてきたのは、「変数名を日本語にしてみたらどうだろう」->
「気でも狂ったか?」的なやりとりをいくつかの場面で目撃してきたからです。
現時点で日本語を使ったプログラミングが現実的だとは思っておりません。
ですから、私もプログラミングするときは英語を使っていますし、必死に
勉強しております。


142 :デフォルトの名無しさん:03/12/01 09:23
初心者のとき、void の意味が分からなかったなぁ。
初心者のとき、引数の意味が分からなかったなぁ。

143 :141:03/12/01 09:29
あっと、今になって気づきましたが、変数などを「国際化」という枠組みの
中で多言語化して欲しいという論点では書いておりませんでした。

いちプログラマとしてプログラミングをする立場で、英語が出来ない/嫌いな
凄腕プログラマという人もいるだろうに、現在の状況ではそういう人は
活躍の場がせばめられられて、世間的にももったいないと思っていたからです。
実際に、英語嫌いな冴えてる友人がいたことも、そう思った理由の一つです。

いちじるしくスレ違いで申し訳ない。>> all

144 :デフォルトの名無しさん:03/12/01 09:33
voidは何かfj始めてわかったなぁ

145 :デフォルトの名無しさん:03/12/01 09:42
>>142
> 初心者のとき、void の意味が分からなかったなぁ。
> 初心者のとき、引数の意味が分からなかったなぁ。
だから、用語を決めるときの重要性はあなどってはならないと思います。
英語では、学術的な用語と一般的な用語との乖離が日本語ほどはなはだしくは
なかったと思います。
ここで気が利いた例を挙げればいいのですが浅学のためあげられません。
あくまで私がそう感じていると言えるだけです。

プログラミングに関して私が尊敬しているある人がプログラミング能力を
高めたかったら、英語を死に物狂いで勉強しろといった意味は、とうぜん
資料が英語だからということを指しているのでしょうが、総合的に、今、
プログラミングをするということは、英語とは切り離せないことだと思っています。

>>140
日常生活と不特定多数の人間が読むコードを一緒くたにする神経が俺には信じられん。
同じ言語コミュニケーション活動というくくりで考えています。
実際このやりとりも、日常生活の延長ですが、不特定多数の人間、たとえば、
エチオピアの人たちも読んでいるかもしれません。

そして将来的には、コンピュータがこの過去ログを読んで意味を理解した上でなんらかの処理を
するという可能性もあるわけです。

トンデモでスマソ。


146 :デフォルトの名無しさん:03/12/01 09:43
覚える手がかりって別になくてもいいんじゃないの?

第一、英語を学習する際に integer = 整数 だって覚える手がかりはないじゃない。


147 :デフォルトの名無しさん:03/12/01 09:46
トンデモっていうか、何を主張したいのか分からないよ。

>いちプログラマとしてプログラミングをする立場で、英語が出来ない/嫌いな
>凄腕プログラマという人もいるだろうに、現在の状況ではそういう人は
>活躍の場がせばめられられて、世間的にももったいないと思っていたからです。
が主張なのなら、>>140
>プログラミングを勉強したい初心者ならついでに英語も勉強してくらはい。
>main, this, class, get/set, print とかなら中学生でも分かるでしょ。
で解決。

elisp に関係ない話はこっちでやってくれ
http://life.2ch.net/test/read.cgi/yume/1069749452/l50

148 :デフォルトの名無しさん:03/12/01 09:56
>>147
> トンデモっていうか、何を主張したいのか分からないよ。
主張というほどのものは無くて、elispの国際化から端を発した
世間話のつもりだったけど、度がすぎましたね。

> elisp に関係ない話はこっちでやってくれ
おっしゃるとおり。すみませんでした。

イタチの最後っ屁ではないですが...
>>146
> 第一、英語を学習する際に integer = 整数 だって覚える手がかりはないじゃない。
だから概念構築からやらなければならないので、英語学習が大変なのです。


149 :デフォルトの名無しさん:03/12/01 10:37
という訳でelispのdocstringの多国語化は、
>> 122
> XEmacs 方面で docstring にも gettext を使う作業してたと思う。
> 翻訳がどの程度進んでるか知らないけど。
という感じかなとは思うけど、Commentary:部分はどうかな?
徐々にマニュアルに取り込まれているという感じかな?
Commentary: 部分を自動抽出してマニュアルに入れるという
方法も考えられるね。そうすれば、わざわざelファイルを覗く
必要もなくなるし。いま、elcファイルだけを配るLinux
ディストリビューションってあるよね?


150 :デフォルトの名無しさん:03/12/01 11:10
そういや英語圏の人はプログラミング言語が英語なのをうれしいと思ってるのかね
本などでプログラミング言語の説明をするときキーワードを一々イタリックにしたりね

もし変数名やキーワードが日本語になると
API ドキュメントなどで日本語キーワードを「」で囲んだりすることになるかもね

>>141
> 以上を書いてきたのは、「変数名を日本語にしてみたらどうだろう」->
> 「気でも狂ったか?」的なやりとりをいくつかの場面で目撃してきたからです。

日本語は助詞が複雑だよ?

151 :デフォルトの名無しさん:03/12/01 11:14
(´-`).。o(…cons とか cdr とか、どうやって訳すんだろう…)


152 :デフォルトの名無しさん:03/12/01 11:42
> 英語と日本語との違いという面では、漢字が我々の脳へ訴える力、
> 例えば、planeより面、axiomより軸、interfaceより界面のほうが、
> われわれの心に響くのでは?
なんかそこはかとなく不吉な文章だな…。界面のほうが心に響くか?
「界面って?」「interface の事」みたいな会話が飛び交いそうだが…。
まぁ、あれだ。ローカライズは各国でがんがってくれと。だって、漏れ
英語でもヒィヒィいってんのにサンスクリット語の変数名に悩む未来はイラネ。

153 :デフォルトの名無しさん:03/12/01 11:45
(´-`).。o(…合体 とか 体 って訳すんじゃないかな…)

154 :デフォルトの名無しさん:03/12/01 11:46
>>149
> 方法も考えられるね。そうすれば、わざわざelファイルを覗く
> 必要もなくなるし。いま、elcファイルだけを配るLinux
> ディストリビューションってあるよね?
昔、debianを使っていたのですが、たしか、elファイルとelcファイル
は別パッケージだったような気がします。今はどうなのだろう?

>>150
> そういや英語圏の人はプログラミング言語が英語なのをうれしいと思ってるのかね
>本などでプログラミング言語の説明をするときキーワードを一々イタリックにしたりね
厳密な定義はプログラミング言語内で規定されているのは、当然としても、
なんらかの、脳みそへの引っかかりのようなものがあるから、英語のキーワードを
使っているのではないでしょうか? ある意味では数学の+, -, などはそういう意味では
英語vs日本語という観点からは中立的といえるのかもしれません。

> 日本語は助詞が複雑だよ?
手始めに名詞レベルでの日本語化はどうだろうと思います。
また、助詞の複雑さといってもそれを利点に変えるチャンスはあるのでは?

>> 151
> (´-`).。o(…cons とか cdr とか、どうやって訳すんだろう…)
英語でもなんじゃーこりゃー!的な、もうすでに意味がとれない単語が
沢山あるのは承知しています。Cobolでの実験もしっているつもりです。
触ったことないけど。


155 :デフォルトの名無しさん:03/12/01 11:48
NullPointerException
空指標例外

156 :デフォルトの名無しさん:03/12/01 12:03
言葉が英語から日本語への翻訳という枠組みからでてくるという思考を一度、
はずしてみたらどうだろう?
ただ実質的に「NullPointerException」は、プログラミングの世界では「日本語」と
言ってもいい存在に「現在は」なっているということは分かります。

>NullPointerException
>空指標例外
あきらかに漢字圏の人間には「空指標例外」の方が何なのか連想しやすそうですね。
これが名前としてふさわしいという意味ではないです。もっとよさそうなのがあるでしょう。

>>152
> なんかそこはかとなく不吉な文章だな…。界面のほうが心に響くか?
バレましたか、私も界面はどうだろうと思いますが、激賞する人もいるので
書いてみました。

elisp万歳!

157 :デフォルトの名無しさん:03/12/01 12:06
>>154
> 昔、debianを使っていたのですが、たしか、elファイルとelcファイル
> は別パッケージだったような気がします。今はどうなのだろう?
今でもそう。Emacs単にインスコしただけじゃ el は入らない。

>>156
> これが名前としてふさわしいという意味ではないです。もっとよさそうなのがあるでしょう。
略して「カラシ」とか。

158 :デフォルトの名無しさん:03/12/01 12:06
NullPointerException
ぬるぽ

159 :デフォルトの名無しさん:03/12/01 15:09
# なんかすごく伸びてるが

>>136
special form に対しても defalias出来るんだ、
と当然の事に感心してしまった。

160 :デフォルトの名無しさん:03/12/01 15:14
国際語がマルチバイトな言語だったり、コンピュータの発達した国が
そーいう圏内だったらどうなってたんだろう。

161 :デフォルトの名無しさん:03/12/01 15:22
<ヽ`∀´> コンピュータの起源はウリナラニダ。
ソースコードはハングルで書くニダ。とか?

162 :デフォルトの名無しさん:03/12/01 16:14
ウリナラにLisperっているの?

163 :デフォルトの名無しさん:03/12/01 16:31
http://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_ko&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=

http://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くらい居スニダ

164 :デフォルトの名無しさん:03/12/01 21:20
なんか、すんごいのびてると思ったら、英語を異常なほど嫌ってる基地外が暴れてるだけかよ

165 :デフォルトの名無しさん:03/12/01 22:01
基地外というほどではないと思うが、
実際英語以外の言語で実用的なプログラミングは
あまり行なわれていないな。
日本語の場合は文字コードがまるで違うので別の問題があるが、
独仏のプログラマなんかはどんな感じなんだろ。
独語の関数とか、やはりキモい感じがするのかな。

166 :デフォルトの名無しさん:03/12/01 22:53
視点が興味深いので貼ってみます。

----

情報技術者の定義
http://www.ne.jp/asahi/bdx/info/jp-cyberscope/jp-cyberscope-20010321.html
> 最近の意見交換の中から、昔から思っていることで
> ここに書いていなかったことをまとめておく。反論歓迎。

> * コンピュータ技術は本質的にアングロサクソン文化の
> 継承物であるため、基本的にその中心言語は英語となる。

167 :デフォルトの名無しさん:03/12/02 01:57
こんなののどこが興味深いんだか……。
そろそろスレ違いも飽きたので、これ以上やるならどこかにスレ立ててやってくれ。


168 :デフォルトの名無しさん:03/12/02 02:18
MIND とか AppleScript とか知らんのけ?

169 :デフォルトの名無しさん:03/12/02 12:15


  ス  レ  違  い  は  他  板  へ


関連リンク: http://life.2ch.net/


170 :デフォルトの名無しさん:03/12/02 19:23
蒸し返すようで悪いのだがC-b, C-fが

C-u 後ろ
C-m 前

なんてキーバインドだったら絶対にemacsなんて使わないからな。


171 :デフォルトの名無しさん:03/12/02 19:34
>>170
キーの並び的に C-b, C-f より自然に見えるけどな

172 :デフォルトの名無しさん:03/12/02 20:25
C-mが改行に準じる動作以外に割り当てられるのはさすがにいやすぎかと。


173 :デフォルトの名無しさん:03/12/02 22:56
>>172
それは Emacs や readline がそうなっているのに慣れたからだと

174 :デフォルトの名無しさん:03/12/02 23:35
はあ? Emacsとreadlineだけしかものを知らん奴というのも珍しいな。



175 :デフォルトの名無しさん:03/12/02 23:49
僕は矢印キーしか使わないのでNP

176 :デフォルトの名無しさん:03/12/03 00:04
>>174
知らないけれど他にどんなのがあるの?

177 :デフォルトの名無しさん:03/12/03 01:18
MS-Winのメモ帳とかedlinとかWordstar系とかviとか。
TECOもそうかも。

178 :デフォルトの名無しさん:03/12/03 01:40
N-88 BASIC
Ok

179 :名無しさん@Emacs:03/12/03 08:01
メモ帳がC-mで改行できるのしらなかた。おしえてくれたエロい人アリガトウ

180 :デフォルトの名無しさん:03/12/03 08:53
>>179 制御文字コードを規定したISO規格で決まっていたでしょう?
Emacsのキーバインドだってそれにそったものだよね。
だから何らかの形の日本語化が行われるとしても、規格にそむいた独自路線を
走ることはないでしょう。


181 :デフォルトの名無しさん:03/12/03 09:55
>>180
そういや UNIX 系 OS では改行が ^M って表示されるな
Windows 上の C-M はそれに追随したものだと思っていたのだが
ISO 規格だったのか…

ところで Emacs は ^H をヘルプにして潰してるけど何でよ?

182 :デフォルトの名無しさん:03/12/03 10:23
knee-jerk reactionでは、"H"elpから?


183 :デフォルトの名無しさん:03/12/03 16:49
Emacs は UNIX 生まれじゃないしな

184 :デフォルトの名無しさん:03/12/04 00:29
UNIXでの改行は LF(^J) だよ。
ここにいるやつの程度が知れるな。


185 :デフォルトの名無しさん:03/12/04 00:44
悪い、間違えた。
http://pc.2ch.net/test/read.cgi/prog/1069868102/
このスレと勘違いして煽り入れて書いてしまった。スマソw

186 :デフォルトの名無しさん:03/12/04 01:20
>>184
画面出力の改行のことではなくキー入力の改行の話

187 :デフォルトの名無しさん:03/12/04 08:41
elispといえば、guile-emacsってどうなの? 既存のelispプログラムを実行できる
くらいの互換性は確保しているの?
RMSもなんだか、現行のEmacs Lispを大幅に変更する気が本当にあるのかなという
気がする。だいたいschemeに変更したからって得られるものは何よ?
現在のEmacs Lispを若干補正するくらいで、どうにかなるのじゃないの?
とりあえず、packageの導入。Lexical scoping あたりかな?


188 :デフォルトの名無しさん:03/12/04 09:10
先生!。Scheme君で独自拡張路線を走るよりも、どうせならMacLisp系列ということで
Common Lisp君を見習ってしまった方がよいと思います。もう遅いのでつか?

189 :デフォルトの名無しさん:03/12/04 09:25
だれがRMSを説得するかという問題。

190 :デフォルトの名無しさん:03/12/04 09:26
http://mail.gnu.org/archive/html/emacs-devel/2002-08/msg00372.html
From: 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 をサポートする *ことになっている* のは技術的理
由からではないのです。

191 :デフォルトの名無しさん:03/12/04 09:33
君の〜、行く道は〜、果てしなく遠い〜...
というguile-emacsの進化とは別問題として、Emacs Lispの進化は続くでしょうね...
とりあえず、packageシステム入れろ矢ゴラッァ! 互換性とるのなんか簡単だろ!
パッケージ書くのが苦痛なんだよ!

あっ、俺がやればいいのか...

192 :デフォルトの名無しさん:03/12/04 10:04
elisp packageシステム開発する -> emacs開発チームへ相談 -> RMSに相談 -> >>189


193 :デフォルトの名無しさん:03/12/04 10:09
gccの移行はうまくやったよな。あれは関係者はそうとう慎重に事を運んだって噂だね。


194 :デフォルトの名無しさん:03/12/04 10:13
つまりRMSがEmacs改良のボトルネックになってるのか?


195 :デフォルトの名無しさん:03/12/04 10:15
RMSクラスだと「そういうことも全て考えた上で判断している」可能性も
否定できないので、難しい。


196 :デフォルトの名無しさん:03/12/04 10:26
>> 189
> だれがRMSを説得するかという問題。
竹内郁雄先生になんて、お願いできないの? お友達同士でしょ?

197 :デフォルトの名無しさん:03/12/04 11:34
emacsでシェルを起動するとdos窓がタスクバーに表示されないのは
どういう仕掛けなん?

198 :デフォルトの名無しさん:03/12/05 00:21
良く知らないで書いているのでアレですが、XEmacs ではダメなんですか?
Who Wrote にも RMS は入ってないし。

199 :デフォルトの名無しさん:03/12/05 06:45
RMS=DQN

200 :ヽ(´ー`)ノ:03/12/05 15:49
しばらくしたら temp-buffer を勝手に閉じてくれる lisp があった気が
するんだけど、どないしても探せないのですよ。誰か知らね?


201 :デフォルトの名無しさん:03/12/05 16:34
どうやって temp-bufferかそうでないか判断するの?
with-temp-buffer の事じゃないよね?

202 :ヽ(´ー`)ノ:03/12/05 19:10
>>201
レスどもー。

キー入力があると *Completions* とかを閉じてくれるものなんで、
with-temp-buffer では無いと思われ。

momentary-string-display の temp-buffer 版っぽいようなことを
hook でやってくれるようなモノだったと記憶してるんだけども、
記憶が曖昧で(;´Д`)。

頑張って自分で作ってみます。



203 :デフォルトの名無しさん:03/12/05 20:39
>>202
http://www.geocities.co.jp/SiliconValley-Oakland/7673/
ここの lcomp.el は?
自分は自作コード使ってるけど(ヘボいが自作なので)。

204 :ヽ(´ー`)ノ:03/12/06 10:41
>>203
あ、それです、それです。ありがとう。


205 :デフォルトの名無しさん:03/12/09 10:47
ひまつぶしに、バイトコードコンパイラをイジくろうと思うんだけど、
バイトコードの定義って"(elisp)Disassembly"で少し紹介されているだけで、
正確な定義ってbytecomp.elを読むしかないのかな?
GNU Emacs と XEmacs で非互換のバイトコードもあるよね?

206 :デフォルトの名無しさん:03/12/10 13:43
んなやる気のないやつにイジられてもね。
まあコンパイラよりは先にVMの実装読んだ方が早いよ。

207 :デフォルトの名無しさん:03/12/11 12:24
>>206
>まあコンパイラよりは先にVMの実装読んだ方が早いよ。
src/bytecode.cをすこし読んでみたんだけど、これが2千行以下で
このくらいなら遊びで自作VMを乗っけてみるのもオツかなと
思いました。いやドラゴンブックを読んでいるもんで。

バイトコンパラは何か改良の余地はあるのでしょうか?
目標があったほうが弄りがいもあるでしょう?

208 :デフォルトの名無しさん:03/12/11 17:48
あのVMはいくらでも改良できるから、適当なCPU上でJITで
動かせる様にしたりすると大勢の人間に喜ばれるかもね。
コンパイラの改造としてはレキシカルスコープにしてみたりとか。
RMSは怒るかもしれないケドさ。
関係ねえもんな。

209 :デフォルトの名無しさん:03/12/11 18:13
レキシカルスコープになったら動かない自作のコード沢山ありそう...

210 :デフォルトの名無しさん:03/12/11 18:28
>>208
> あのVMはいくらでも改良できるから、適当なCPU上でJITで
> 動かせる様にしたりすると大勢の人間に喜ばれるかもね。
ドラゴンブックの範囲を超えるな...だから面白いのか...

> コンパイラの改造としてはレキシカルスコープにしてみたりとか。
これは、lexical-letがclにあるからハックバリューが低いような。

> RMSは怒るかもしれないケドさ。
> 関係ねえもんな。
わらた。

211 :デフォルトの名無しさん:03/12/12 15:38
elispにCommonLisp風パッケージを追加するのは、intern類にadviseすれば
簡単にできると思ってやってみようと思ったけど、read, load, などCで
書かれたprimitive群は、Cで書かれたinternを直接呼んでいるようなので、ダメですね...
   elisp: (intern name &optional obarray) => symbol
common-lisp: (intern name &optional package) => symbol, status
と引数までそろっているのに...残念。

212 :デフォルトの名無しさん:03/12/12 16:30
こんなのはどうなの
http://www.nocrew.org/cgi-bin/cvsweb/cvsweb.cgi/emacs-cl/cl-packages.el

213 :デフォルトの名無しさん:03/12/12 18:00
>>211
Vobarrayをコピって差し換えればいけるかも。
面倒だけど。
(let* ((obarray (make-obarray てきとー)))
(read ...)
(exportするシンボルをVobarrayに書き書き))
みたいな?


214 :デフォルトの名無しさん:03/12/15 04:14
あのぅ…… すみません。
「ドラゴンブック」って何でしょうか? ググってみても「富士見ドラゴンブック」
くらいしか出てきません。あきらかに無関係ですよね、コレは。

215 :214:03/12/15 04:21
たぶんコレの事ですね。探す努力が欠けてました。本当にすみません。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4781905854/

216 :デフォルトの名無しさん:03/12/15 07:23
日本語版のカバーにドラゴンはすんでいるのかな?

217 :デフォルトの名無しさん:03/12/15 19:05
質問です。
大学のPCでemacsを使っていると、「#include」や「int」とか「printf」とか打つと文字色が変わるのですが、
自分の家のvine linuxに付いていたemacsを使うと色が変わりません。そうやったら変わるのでしょうか?
もし設定等ありましたらお教えください。宜しくお願い致します。

218 :デフォルトの名無しさん:03/12/15 19:26
(global-font-lock-mode t)

219 :デフォルトの名無しさん:03/12/15 19:37
>>217 微妙にスレ違い。
ここはEmacsの設定スレではありません。テンプレにも書いてあるでしょ。

バージョンすら書いてないけど、メニューがあればメニューから選べるはず。
別の方法としては ~/.emacs.el (ないしは ~/.emacs)に
(global-font-lock-mode t)
と書いておくことかな。

次からはLinux板(になければUNIX板)のEmacsスレへどうぞ。
Linuxの各ディストリビューション、とりわけVineLinuxでは
他の環境のユーザが知らない独自設定がされている場合が多いので、
Linuxでの話はLinux板で聞く方がよいです。


220 :デフォルトの名無しさん:03/12/15 20:49
>>291
 そうでしたか。どうもすみませんでした。
そして答えていただきありがとうございました!

221 :デフォルトの名無しさん:03/12/16 09:21
CLパッケージで定義されているlexical-letについて質問です。
(lexical-let bindings body)において、bindings中の変数をgensymで作成した
uninterned symbolで置き換えることによって、lexical-scopingを実現している
んだろうなと思ったのですが、こんどはそれを参照する側のbody中の各フォーム
で元の変数への参照を、先のgensymで作成したシンボルに置き換えなくては
なりませんね? これって異常に大変そうなのですが、ほんとにそうやっているの
かな?

222 :デフォルトの名無しさん:03/12/16 09:45
そんなことしてないんじゃないの?
シンボル名の完全な置き換えなんてマクロを全部展開した上でないと無理だし、
コンパイル時に行わないと時間掛かりすぎるし。

223 :デフォルトの名無しさん:03/12/16 09:53
でも、こんな感じなんだよね...
(macroexpand '(lexical-let ((a 10)) (+ a a)))
(let ((--a--95409 10)) (+ (symbol-value (quote --a--95409)) (symbol-value (quote --a--95409))))


224 :デフォルトの名無しさん:03/12/16 15:35
ほんとにそうしてるよ。
cl-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--))
みたいになる。

225 :デフォルトの名無しさん:03/12/16 17:13
コンパイルしないと遅いんだろうね、たぶん。
CLパッケージのマニュアルにも、定義している関数外にクロージャを
持ち出さない限り、普通のLetを使うべしみたいなことが書いてあったと思う。


226 :デフォルトの名無しさん:03/12/16 22:19
Emacs LispでCLの範囲指定コメント#|〜|#って作れないでしょうか?


227 :デフォルトの名無しさん:03/12/18 08:31
>>226 Emacs LispにはCLにあるreadtableという仕組みがたしかなかったと思うので
実現するには、Cレベルでいじる必要があるのではないでしょうか。
ところで、#|〜|#ってどんな場面で重宝しますか?

228 :226:03/12/18 18:36
>>227 レスどうも.無理っぽいですか…
.emacs内の一連の動作を一時的に無効にする時にあると便利だと思いますけど.
C++で言えば;が//,#|〜|#が/*〜*/にあたります.(一応)


229 :デフォルトの名無しさん:03/12/18 18:44
(ignore "〜") とか。

230 :デフォルトの名無しさん:03/12/18 19:06
(when nil 〜) とか。

231 :デフォルトの名無しさん:03/12/18 20:32
(quote 〜)

232 :デフォルトの名無しさん:03/12/18 20:57
ブロックの最後に適用したいときにダメじゃん

233 :デフォルトの名無しさん:03/12/18 23:21
贅沢言うな。

234 :デフォルトの名無しさん:03/12/19 00:22
prog1


235 :デフォルトの名無しさん:03/12/19 07:53
>>228
>.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 ...)
などコードの解釈で、無効にするやりかたは、色がコメント色にならず、
意味が分かりづらいのでほとんど使いません。


236 :デフォルトの名無しさん:03/12/19 08:42
リージョンをコメントアウトするコマンドとかありそうだ

237 :デフォルトの名無しさん:03/12/19 09:12
あるとしたら実質#|〜|#と同じ機能だよね。
調べたらありますた。comment-region, uncomment-region
|(or (test1-p foo)
| -!-(test2-p bar)-!-)
-!-と-!-がregionとしてこの状態で、M-x comment-regionすると、
|(or (test1-p foo)
| ;; (test2-p bar)
| )
になりました。これであしたはホームランだねパパ。ありがとう。

238 :デフォルトの名無しさん:03/12/19 11:31
キモチワルイね。
基本的なとこはCommonLispに習うべきだと思うなあ・・
#|〜|#はネストもできるんだぜ?

239 :デフォルトの名無しさん:03/12/19 11:44
所詮エディタに付属の言語

240 :デフォルトの名無しさん:03/12/19 12:22
>>238
>基本的なとこはCommonLispに習うべきだと思うなあ・・
これは賛成。

>#|〜|#はネストもできるんだぜ?
現状での解決策は、
;; ;;(foo)
;; ;;(bar)
;; (buz)
というように行を分けて書くしかないのかな?


241 :デフォルトの名無しさん:03/12/19 12:33
;; ;;(foo)
;; ;;(bar)
;; (buz)
このやり方で、コメントを外すときとコメントにするときは、
C-x r d (delete-rectangle)とC-x r t (string-rectangle)を私は使用しています。
みなさんはどうですか?

242 :デフォルトの名無しさん:03/12/19 12:45
>>241
おなじく。C-x r k の方をよく使うけど。
kill-rectangle-saveが欲しい……


243 :デフォルトの名無しさん:03/12/19 12:47
>>241
C-u M-x comment-region

244 :デフォルトの名無しさん:03/12/21 01:45
advice.elのドキュメントって長いな…。誰か訳してないものか。

245 :デフォルトの名無しさん:03/12/21 14:50
私はadvice機構をElisp Manualの"(elisp)Advising Functions"ノードで学習しましたが、
まぁまぁ分かりやすいですよ。日本語訳されていないのかと思ったら、されていますね。
それとも、そんなこと知っててadvice.elファイル内のCommentary部分の話をしているのでしたら、スマソ。


246 :デフォルトの名無しさん:03/12/21 21:39
"abc" という文字列から、"abc-1","abc-2","abc-3"といった
関数名を生成してコールすることは可能でしょうか?

よろしくお願いします。


247 :デフォルトの名無しさん:03/12/21 21:40
可能。


248 :デフォルトの名無しさん:03/12/21 21:42
教えてください (>_<)

249 :デフォルトの名無しさん:03/12/21 22:14
>>246
事故解決しました
(funcall (intern "abc"))

250 :246:03/12/22 03:22
連続質問失礼します。

文字列から生成された関数monyoに値をsetfしたいのですが
失敗してしまいます。

どこがまずいのでしょうか?
申し訳ありませんが、教えてください。

(defmacro monyo (a)
`(car ,a))

(let* ((data 'c)
(li '(a d))
(func "monyo"))
(setf (funcall (intern func) li) data)
(print "~S" li))



251 :デフォルトの名無しさん:03/12/22 03:38
何がしたいのか分からん。

252 :デフォルトの名無しさん:03/12/22 03:47
何がしたいのか良くわからんが、マクロはfuncallできないにょ。


253 :デフォルトの名無しさん:03/12/22 03:50
lambdaで囲め < マクロの funcall

254 :デフォルトの名無しさん:03/12/22 07:39
>>250
macro は先に展開されるから、 setf には (funcall (intern func) li) が、展開されずに渡される。
これが (car li) に展開されることは実行時まで予測できないから、 setf がうまく展開できないと思う。

compile しない場合なら、 funcall とかの setf method 定義してけばいけるかな…

255 :デフォルトの名無しさん:03/12/22 08:08
>>250 やりたいことがいまいち読みきれないので何ですが、
setfというちょっと複雑なしくみより、すなおに
Function: fset symbol definition
を使えば考えがまとまりやすくなりませんか?
そしてmanyoをマクロにしたい気持ちの理由はなんでしょう?

256 :250:03/12/22 11:42
お騒がせしてます(>_<)

やりたいことは"文字列で渡された関数名に対応した関数に、
値をsetfすること"です。
下記S式の"monyo"にあたる部分を文字列にしたいのです。
monyoはマクロでも関数でもかまいません。

(setf (monyo li) 'c)

わかりづらい説明ですみません…
よろしくお願いします。



257 :デフォルトの名無しさん:03/12/22 12:39
(let ((name nil)) (set (intern "name") t) name)
=> t

setf 使いたがってるのはCommonLisperだから?


258 :デフォルトの名無しさん:03/12/22 13:06
>>256
>やりたいことは"文字列で渡された関数名に対応した関数に、
>値を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)を呼び出す。

どう?

259 :258:03/12/23 13:36
チェッ、ニゲラレタカ。。。

260 :デフォルトの名無しさん:03/12/23 15:45
>>256
>下記S式の"monyo"にあたる部分を文字列にしたいのです。
>monyoはマクロでも関数でもかまいません。
>(setf (monyo li) 'c)
字面のとおりに解釈したとして、(setf ("monyo" list) 'c)が機能する
ようにしたいとしたら、setfをいじるしかないな。


261 :デフォルトの名無しさん:03/12/23 16:05
>>258
返事が大変遅くなり、申し訳ありません。

早速教えていただいた方法を試してみたのですが、
この方法だと"monyo"がBlack Boxのとき利用することが
できません(T-T)。

手軽に実現する方法はないのでしょうか…
(複雑に実現する方法もわかりませんが^^;)


262 :シヌマデツキアウelisper:03/12/23 16:50
>>261
>この方法だと"monyo"がBlack Boxのとき利用することが
>できません(T-T)。
black boxという意味は実行時に文字列の正体が決定されるという意味ですか?
たとえば、ユーザーに入力してもらうので、あるときは"monyo"次は"boyoon"とか?

"monyo"がblack boxのとき、その関数としての定義はいつ決定されますか?

恥ずかしがらずに、こちらの手がかりとなりそうなことを、できるだけ具体的に
ずらずらと書いてみてください。最終的にどういうコードがどういう結果を返せば
満足なのかとか。

もしかしてネタ? ツラレテモイイヤ。

263 :デフォルトの名無しさん:03/12/23 20:41
関数に値をsetfするっていうのが分からん

(setf (funcall (intern func) li) data)
これはliが(c b)になってほしいってこと?

264 :デフォルトの名無しさん:03/12/23 21:13
(defmacro monyo (a)
`(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))

265 :たいへんお騒がせしました:03/12/23 21:59
>>264さんの方法で関数monyoにsetfすることができました!

みなさんありがとうございました^^

266 :デフォルトの名無しさん:03/12/23 22:07
あの、今 elisp-intro-jp 読み進めてて
Cutting & Storing Text (テキストのカットと保存)
の演習問題にさしかかってます。search-forward の実装が課題の
ようですが、いくら正規表現ぬきでいいとはいえ、これっていきな
り飛躍しすぎじゃないですか?立往生してます。

とりあえず考えたのは 引数の文字列を対話的に受取って、それを
1文字ずつに分解、そんで1文字サーチしてマッチしたら次の文字
も連続してマッチするか調べていく。。っての思いついたんだけど
変かな?

267 :デフォルトの名無しさん:03/12/23 22:26
比較を減らす方法がいくつかあるので、一度調べてみては?

268 :デフォルトの名無しさん:03/12/23 22:33
search-forwardを使って検索して見つかったら
ポイントを移動してメッセージを出す問題だと思うけど。

269 :デフォルトの名無しさん:03/12/23 23:23
>>268
そういうことでしたか。
(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さんの
こと調べてみたいと思います。


270 :デフォルトの名無しさん:03/12/23 23:27
(message (or (nth 3 kill-ring)
"ネーヨ"))

271 :デフォルトの名無しさん:03/12/24 00:47
>>270
サンクス!!

272 :デフォルトの名無しさん:03/12/24 02:59
<>で囲まれた文字を抜き出したいんですがうまくいきません。
(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 には追加されてるんですが、なぜなんでしょう?


273 :デフォルトの名無しさん:03/12/24 03:48
267の個人情報が暴かれそうです。

274 :デフォルトの名無しさん:03/12/24 04:20
>>272
とりあえず実行してみたけど、ちゃんと抽出してるみたいだよ?
copy-region-as-kill-nomark って関数がなかったから copy-region-as-kill にしたのと、
error になるから search-forward の第三引数 t にしたけど。
; search-forward の第三引数の意味って、処理系依存だったりするのかな…

ところで get-list が空っぽって、どうやって確認したの?

275 :デフォルトの名無しさん:03/12/24 13:04
>>274
成功してるんですか。関数の最後に get-list を置いてるので
M-x my-get-tag で呼びだしたら現在のバッファに get-list の
中身を表示してくれるのかなーと思ったんですが。

276 :デフォルトの名無しさん:03/12/24 14:03
>>275
(insert (car get-list))
したらちゃんと表示されました。勘違いしてたみたいです。
すみません。

ところで GNU Emacs Lisp Reference Manual ってほとんどの
関数のことが書いてあるんですか?たとえばバッファ、開始
ポイント、終了ポイントを渡すと、その文字列を返してくれる
ような関数が欲しい時に info の 文字列とバッファのところ
を読んで、なかったら諦めて自分で作るなりしないといけない
んですか?


277 :デフォルトの名無しさん:03/12/24 17:27
> 関数のことが書いてあるんですか?たとえばバッファ、開始
> ポイント、終了ポイントを渡すと、その文字列を返してくれる
buffer-substring
一連の流れ読んでないけど、ここだけ見えたので。


278 :デフォルトの名無しさん:03/12/24 18:43
apropos使え

279 :デフォルトの名無しさん:03/12/24 18:44
と関ポよをん

280 :デフォルトの名無しさん:03/12/27 06:22
グラフの準備
われわれの目標は、Emacs Lispのソースコードにあるさまざまな長さの関数定
義の個数を表示したグラフを作ることである。

elisp-introで説明を読んでて何がしたいのかさっぱりだったんで、最初に
完成させたいグラフを見てみた。次の式を評価するとこんなグラフができる
らしい。なんだこれ。どこがどこに対応してるんだ。。?

(graph-body-print '(1 2 3 4 6 4 3 5 7 6 5 2 3))

*
* **
* ****
*** ****
********* *
************
*************

281 :デフォルトの名無しさん:03/12/27 06:23
SKK の辞書使って fill-paragraph してくれる lisp 無いかな。
禁則処理よりももっと賢く改行して欲すぃ時があるんだけど。


282 :ヽ(´ー`)ノ:03/12/27 06:25
>>280
*
* **
* ****
*** ****
********* *
************
*************
1234643576523


283 :デフォルトの名無しさん:03/12/27 06:46
>>282
何も言わずにさらりと回答するところを見るとあんた漢だね。
自分が馬鹿なのがいけないんだけどさ、こんなグラフ見ずら
くてしょうがないよ。普通

1 *
2 **
3 ***

だと思うんだけど。elispの入門書なんだから勉強できれば別
に問題ないんだけどねヽ(´ー`)ノ

284 :デフォルトの名無しさん:03/12/27 10:12
>>283
上→下のグラフと左→右のグラフ、どっちが手間が多いか
ちょっと考えれば分かると思うんだが


285 :デフォルトの名無しさん:03/12/27 11:00
283でもないが、左→右のほうが楽そうに思えるけど。

286 :デフォルトの名無しさん:03/12/27 16:20
282見てもどういう対応があるのか解らない。

287 :デフォルトの名無しさん:03/12/27 17:05
普通のブラウザとかだとスペースが潰れる
↓も等幅フォントじゃないと多分ずれる

        *
    *   **
    *  ****
   *** ****
  ********* *
 ************
*************
1234643576523

288 :デフォルトの名無しさん:03/12/27 18:25
おまえらElispスレくらいnavi2chで見ろyo


289 :デフォルトの名無しさん:03/12/27 19:03
>>288
navi2ch で見てても モナーフォント使ってたり環境は
色々ってことなんじゃない?

また質問なんだけど、さっきの棒グラフを折れ線グラフ
にしろって問題です。

折線グラフは、各バーの先頭より下が空白の棒グラフであると考えられる。 折線グラフのコラムを作るには、
まず、値より1小さい空白文字のリストを作り、`cons'を使って印のシンボルをリストに繋げ、`cons'を使ってリ
ストの先頭に空白文字を埋め込む。

たぶん頭悪いんだろうけど、これも言ってる意味がよく
分からないんだ。。
*
* *
***
***
---
324

これを折れ線グラフにするとどんなグラフになるの?

290 :デフォルトの名無しさん:03/12/27 19:36
こうだろ。

*
*
*

---
324

値が0のとき工夫がいるな。
こうするのかな? それともそこまで考えてない出題か?

*
*
-*-
102


291 :デフォルトの名無しさん:03/12/27 20:14
ム板とかをモナーフォントで見てる馬鹿などシラネ

292 :ヽ(´ー`)ノ:03/12/27 21:04
ASCII で「折れ線」グラフって辛いと思う。
artist-mode を上手く使って作れないかなぁ、とか。

>>281
具体的にはどんなのよ。

293 :デフォルトの名無しさん:03/12/27 21:18
>>290
なるほど。そう考えてから文章読むと明確ですね。
ほんと国語力ないな自分。。いまからチャレンジ
してみます。

294 :デフォルトの名無しさん:03/12/27 22:24
             /ヽ       /ヽ
            /  ヽ      /  ヽ
  ______ /     ヽ__/     ヽ
  | ____ /           :::::::::::::::\
  | |       //       \  :::::::::::::::|
  | |       |  ●      ●    ::::::::::::::|   何このスレ...
  | |      .|             :::::::::::::|   
  | |       |   (__人__丿  .....:::::::::::::::::::/  
  | |____ ヽ      .....:::::::::::::::::::::::< 
  └___/ ̄ ̄       :::::::::::::::::::::::::|
  |\    |            :::::::::::::::::::::::|
  \ \  \___       ::::::::::::::::::::::::|


295 :デフォルトの名無しさん:03/12/28 00:56
>>292
たぶん、fill-columnに到達したとき、そのままだと

ながいながいぎょう……禁則処
理みたいな例

になるのを、SKK辞書に「禁則」、「禁則処理」がある事を利用して、

ながいながいぎょう……禁則
処理みたいな例

というふうにしたいのでは?

296 :デフォルトの名無しさん:03/12/29 14:10
新年をあかるく迎えられそうなelispを一発おねがいします。痛くてもいいです。

297 :デフォルトの名無しさん:03/12/29 17:08
>>296
ttp://www.geocities.co.jp/SiliconValley-SanJose/7225/log/1001393679.html#R87
これなんかどう?
すっきりした状態で新年迎えられるよ。ついでに痛いし。

298 :デフォルトの名無しさん:03/12/29 18:16
>>297
こういうレスを見ると、年末年始だな、って思うよ。
まぁ俺には休みが無いわけだが。

299 :デフォルトの名無しさん:03/12/29 20:32
M-x doctor

300 :デフォルトの名無しさん:03/12/30 17:14
(defun my-upcase-word ()
(interactive)
(backward-word)
(upcase-word)
(insert " "))

この関数、 upcase-word のところでエラーが出て
しまって動きません。
error: (wrong-number-of-arguments #<subr upcase-word> 0)
この手順通りに手動でやるとちゃんと動くんですが。
upcase-word を調べてみたところ、別に引数は必須
じゃないみたいです。何がいけないんでしょうか。

301 :デフォルトの名無しさん:03/12/30 17:23
>>300
手元のだと引数が一つ必須って書いてあるけどな…
interactive に呼ぶと自動で引数を補ってはくれるけど。
ほんとに *scratch* とかで (upcase-word) を評価して error 出ないの?

302 :デフォルトの名無しさん:03/12/30 17:36
(upcase-word) を評価するとエラーでました。すんません。
こういう場合はどうしたらいいんでしょう。がんばって引数
を渡すようにするしかないですか?

303 :デフォルトの名無しさん:03/12/30 18:06
>>302
1単語だけが対象でいいならとりあえず固定値を渡しときゃいいんじゃない?
その後にでも my-upcase-word へ引数を渡す方法を勉強するとか。


304 :デフォルトの名無しさん:03/12/30 19:13
>>300
やりたいのはつまりこういうこと?

(defun my-upcase-word (p)
(interactive "p")
(if (eolp)
(let ((pos (point)))
(upcase-word (- p))
(goto-char pos))
(upcase-word p)))


305 :デフォルトの名無しさん:03/12/30 20:57
>>303>>304
おお。動きました。
upcase-word に -1 を渡すと直前の単語に対して作用してくれるんですね。
んでカーソルが行末じゃなかったら通常通の upcase-word みたいに動くと
いうことですか。勉強になりました。ありがとん。ついでに downcase-word
と capitalize-word にも同じようなやつ作ってキーに割りあてときました。

306 :デフォルトの名無しさん:04/01/05 15:55
-3を入力したら今日より3日前の日付けを返すような関数を作る際に
助けになるような関数ってありますか?
format-time-string だけでは大変で…


307 :デフォルトの名無しさん:04/01/05 16:37
(apply (lambda (s min h d mon y dow dst zone)
(format-time-string "%Y-%m/%d"
(encode-time s min h (- d 3) mon y)))
(decode-time))

みたいなのとか、かな…


308 :デフォルトの名無しさん:04/01/05 17:10
306じゃないけど、encode-timeでマイナスの値扱えるのかー!
以前似たような事したいとき、
current-timeをゴニョゴニョするのかなーなんてやってたよ。

309 :デフォルトの名無しさん:04/01/05 18:26
>>306です。 encode-time, うっかり見逃しておりました。
ありがとうございました!


310 :デフォルトの名無しさん:04/01/06 07:52
EmacsスレでXEmacsは現在勢力が弱くなってきているという話を聞いたのですが、
XEmacs Lisperの人っていらっしゃいますか? 精力減退を感じますか?

EIEIOを使っている人、使い心地はどんな感じですか? 遅くないですか?

311 :デフォルトの名無しさん:04/01/07 23:08
XEmacs使ってないけど、某elispパッケージ開発系MLでも
もうXEmacsサポートするのも嫌だけど、いいアイデアは
出すけど作業途中でトンずらする奴と、そんなのを崇めてる
その他ボケナスが開発続ける限りどうせいずれなくなるし
みたいなこと書かれてたよ。詳しいこと知らないけど。

312 :デフォルトの名無しさん:04/01/07 23:54
某MLって伏せる必要あるのん?

313 :デフォルトの名無しさん:04/01/08 00:07
そういう年頃なんだよ

314 :デフォルトの名無しさん:04/01/08 00:12
「某」を覚えたてなんだよ

315 :311:04/01/08 00:52
いや記憶があいまいで。多分emacs-w3m

316 :デフォルトの名無しさん:04/01/08 08:36
なるほど、そういう年頃なんですな

317 :デフォルトの名無しさん:04/01/08 09:12
正確な数字は無理にしても、おおまかなGNU Emacsのユーザ数とXEmacs
のユーザ数の比率がわからないかな…。俺はドキュメントの正確さに
惹かれてずっとGNU Emacsを使ってきたけど。

GNU Emacsだけのことを考えてプログラミングすればいいのなら楽だな。

XEmacsの今後の開発の方向性はどうなっているのだろう?(スレ違いか)

318 :デフォルトの名無しさん:04/01/08 09:21
>GNU Emacsだけのことを考えてプログラミングすればいいのなら楽だな。

まったくそれで構いません。XEmacsをサポートするために生産性が
下っているとは残念・・・と言いたいGNU Emacsユーザがたくさん
いるのではないでしょうか。


319 :デフォルトの名無しさん:04/01/08 12:59
と318は自分の考えを一般化してみたのであった。
# ちょっとの変更で両方使えるようになるなら、
# 切り捨てなくてもと、もう一年ぐらい XEmacs使ってない俺は思う。
# 〜が対応してないからこっちの使用を断念ってのは M$的みたいで。

320 :デフォルトの名無しさん:04/01/12 13:42
実行環境がmeadowかどうかを確かめるかっこいいコードを教えてください。

ちなみにGNU Emacs 20未満であることを確認するときは以下のようなコードを思い付きました。
これももっといいのがあれば教えてください。
(when (or (featurep 'xemacs) (<= emacs-major-version 20))
;; code for GNU Emacs 20 未満
)

321 :名無しさん@お腹いっぱい。:04/01/12 14:36
>>320
(fboundp 'Meadow-version) とか?

322 :320:04/01/12 15:25
>>321 ありがとう。

>>320 まちがえちゃった。正しくは、
(when (and (not (featurep 'xemacs)) (<= emacs-major-version 20))
;; code for GNU Emacs 20 未満
)


323 :デフォルトの名無しさん:04/01/12 16:51
>>321
どっちかってーと (featurep 'meadow) では?

324 :322:04/01/13 08:28
>>323
>どっちかってーと (featurep 'meadow) では?
あれっ、これってありましたっけ?
てっきり無いと思ってました。これがあるなら話は早いですね。


325 :デフォルトの名無しさん:04/01/13 10:25
>>324
(Meadow-version) => "Meadow-2.00 Beta2-dev (WOMINAHESHI)"
(featurep 'meadow) => t

326 :デフォルトの名無しさん:04/01/13 21:10
他所で尋ねたのですが分かりませんでした。教えてください。コメント記号の
数に応じて,そのコメント行の色を変更するには,どうしたらいいのでしょう
か。
たとえばですが,emacs-lisp-modeだと,;の行は青色で,;;;の行は赤色にし
たいのですが。

327 :デフォルトの名無しさん:04/01/14 00:07
マッチさせて色を変える

328 :デフォルトの名無しさん:04/01/14 00:21
C-h v font-lock-defaults RET

329 :デフォルトの名無しさん:04/01/14 00:48
つい最近たまたまその手の elisp見たんだけど、なんだったかなー。
emacs21に標準で付いてたやつで、コメントを見てなんとなく実行してみたら、
;;; Commentary: とかのフォントが大きくなったりした。
local-variableとかでファイル毎に定義できたと思う。

330 :デフォルトの名無しさん:04/01/14 07:08
>>328
手掛りに調べてみます。
>>329
それ利用したいなあ。追加情報があったらどうぞよろしく。

331 :デフォルトの名無しさん:04/01/17 02:57
√(二分の一乗根)はどのように表現すればいいのでしょうか?

332 :デフォルトの名無しさん:04/01/17 03:07
sqrt

333 :デフォルトの名無しさん:04/01/18 09:24
emacs-wiki.el を改造したくて意気ごんで elisp-intro-jp を読破
したものの、実際にコード読んでみたらサパーリ(´・ω・`)ショボーン

334 :デフォルトの名無しさん:04/01/18 12:09
>>333

いきなりコードを全部読破しても、理解するのは難しいと思うよ。
まずは、やりたいことに関係する部分をちょこちょこいじってみるのが吉かと。

おいらも emacs-wiki を改造してるから、少しはアドバイスできるかも。

335 :デフォルトの名無しさん:04/01/18 17:17
>>333 やりたいことがあるということは、elispをものにする上で有利だと思う。

elisp-intro-jpを読み終ったら、Emacs Lisp Reference Manualにざっと目を通したり、
または、それをしなくてもソースファイルを読みながら、必要に応じて、
C-h TAB ;;info-lookup-symbolやM-x find-function、M- x find-variableを駆使してがんばれ。

その他にも改造したい部分を含む関数の挙動をedebugで観察したり、eldocモードを使うなど
色々おもしろいことはあるよ。

336 :デフォルトの名無しさん:04/01/18 19:06
インストールしたemacs lispにタグジャンプできるようにしておくといいよ。
結構便利。


337 :デフォルトの名無しさん:04/01/18 19:56
>>336
find-function とかじゃなくて tag 使うの?
それとも併用?

338 :デフォルトの名無しさん:04/01/18 20:30
>>334-336
`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> をつけない
ようにしたいんです。何かアドバイスいただけると嬉しいです。

339 :デフォルトの名無しさん:04/01/18 21:24
>>338

emacs-wiki-publishing-markup の中の、コメントで plain paragraph separator
って書かれてる正規表現をいじればよさげ。

デフォルトでは、<p> タグに置き換えられるようになってるね。

340 :デフォルトの名無しさん:04/01/18 21:39
>>337
単にfind-function知らなかっただけです……。
読みこんでない*.elの関数も検索できます、と言い訳させてください。(^_^;
ご指摘ありがとうございました。



341 :デフォルトの名無しさん:04/01/19 08:26
おいらが使っているinfo-lookup-symbol用の設定。.emacsに書いておくもの。
だれかの参考になればうれしい。

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 " - [^:]+: ")))

342 :デフォルトの名無しさん:04/01/19 14:12
symbolを指定すると最初にinfo-lookup-symbolで検索、
失敗したら、find-function, find-variable で検索、
失敗したら、find-tagで検索する、そんなコマンドfind-elisp-symbolが欲しい。

自分で書けばイイノカ...

343 :デフォルトの名無しさん:04/01/23 07:03
>>339
亀レスすまそ。アドバイスを参考にしてがんばってみます。

344 :デフォルトの名無しさん:04/01/25 12:08
"abc" の中の `a' を `b' に置換したいんだけど

(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.

345 :デフォルトの名無しさん:04/01/25 12:15
(subst-char-in-string ?a ?b "abc")
=> "bbc"

346 :デフォルトの名無しさん:04/01/25 12:19
char だから (subst-char-in-string ?a ?b "abc")

347 :デフォルトの名無しさん:04/01/25 12:25
>>345
成功しました。
`?' 演算子知りませんでした。 subst-char-in-string の第一、第二引数は
文字列じゃなくて文字だったんですね。勉強になりました。

348 :デフォルトの名無しさん:04/01/25 13:18
subst-char-in-string (fromchar tochar string &optional inplace)
(subst-char-in-string "abclmn" "ABCLMN" "Leave me alone!")
=> "LeAve Me ALoNe!"
みたいな拡張も視野に入れているのかもしれないけど、
関数のデザイン的に、現状の仕様ではfromchar,
tocharに文字列を渡したらエラーにして欲しいな。

と思ったらReference manualにはこの関数は記載されていないね。


349 :デフォルトの名無しさん:04/01/25 18:53
lisp/subr.el にある下請け関数なんで、手抜きに30ルピー。
文字列でなくても配列型なら使える実装になっているね。

(subst-char-in-string 'a 'b [a b c])

で [b b c] が返る。


350 :ヽ(´ー`)ノ:04/01/25 21:21
> => "LeAve Me ALoNe!"
=> "LeAve Me AoiMoe!" に見えた(;´Д`)

351 :デフォルトの名無しさん:04/01/26 10:16
>>349 文字列でなくても配列型なら使える実装になっているね。
文字列も配列の一種だからね。
次はsubst-char-in-sequenceという名前にして、リストでも
良い事にするとかって、そりゃ、clのsubstituteだよね。

こういうsequenceという抽象データ型を操作する関数を定義しておいて、
実際にリストにするかベクタにするかは、使用時に有利になるほうを選ぶ
というコーディングにはロマンを感じます。

個人的には、alist、plist, hash-table でそういうことをやりたいので、
これらを抽象化したデータ型の統一操作関数群が標準で欲しい。
データが少ないときはalistを使っておいて、データが増えたらhash-tableに
するってとき多いよね?

>>350
> => "LeAve Me AoiMoe!" に見えた(;´Д`)
「萌え」という単語は知っているけど、Aoiはわからないな...

352 :ヽ(´ー`)ノ:04/01/26 10:53
>>351
http://www.google.co.jp/search?q=AoiMoe&lr=lang_ja
// ム板じゃ塩兄ちゃんはあまり有名じゃないのか。

353 :デフォルトの名無しさん:04/01/26 11:02
塩兄ちゃんどころか、itojunさん知らんひとも多いしな。
VOIDを知らん人は少なそうだw

354 :デフォルトの名無しさん:04/01/26 11:30
>>352 そのリンク張るならこうだろ。
http://www.google.co.jp/search?q=%B7%BB%A4%C1%A4%E3%A4%F3&ie=EUC_JP&hl=ja

355 :デフォルトの名無しさん:04/01/26 12:01
>>351 EIEIO を使えば。

356 :デフォルトの名無しさん:04/01/26 12:33
EIEIOでdefmethodを使うという話?
抽象データ型としてhash-tableとalistを操作する関数を「標準」で欲しい
というところがミソなんじゃないの?

自分で書くなら、hash-table-p、listpを使って関数内で場合わけすれば書けるよね?

外してたらごめんよ。

357 :デフォルトの名無しさん:04/01/26 13:45
「標準」って最初から付いてくるっていう意味で言ってるとしたら、EIEIO を
勧めるのは方向ちがいだったね。すまん。

けど、そういう関数の要望が高くなったとしても、C で実装するかなあ。
Sequence でもリストと配列では違いが大きいから、ディスパッチャを書くこ
とになる。C で書くより Lisp の方が楽。Lisp で用意してくれるだけなら、
遅くなるだけだと思う。

データの出し入れの前にチェックもしたいから、そこまで含めて初期化とゲッ
タ、セッタの関数の仕様を固定しておいて、とりあえず alist か plist で実
装。重くなってきたらハッシュで書き直す。さらに重くなったら外部のDBを呼
ぶように書き直す。ということで困らないと思うけど。


358 :デフォルトの名無しさん:04/01/26 15:30
結論には賛成。今まで外部データベースとの連係までは考えたことはないけど。

> けど、そういう関数の要望が高くなったとしても、C で実装するかなあ。
おれはelispに速度はあまりもとめないたちなので、CかLispかは問題には
しません。というかなるべくLispで書いてほしい気がする。

> Lisp で用意してくれるだけなら、遅くなるだけだと思う。
それはそうなんだけど、そういう関数が最初から決まっている
だけでも、初期化、ゲッタ、セッタの関数名、引数の順番を考えたり
定義したりする手間も省けると思うんだよね。まぁ、foo-init, foo-get,
foo-setでもいいけど。

とは言うものの、よく考えてみると俺がalistがすごく便利だと考えているのは、
consから構成されているという実装を知っていて、たまに、単なるリストや
木として処理したりという反則ぎみの使い方をするからなんだと思う。矛盾しているね。


359 :デフォルトの名無しさん:04/01/30 06:58
C++で、void test_*() というメソッドについて
CPPUNIT_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ではどう書けばいいのでしょう?


360 :デフォルトの名無しさん:04/01/30 09:50
とりあえず、操作手順を記録するキーボードマクロ
C-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"で正規表現による置換を勉強すること
かな。

361 :Emacs Lisp :04/02/08 05:17
で完全数を探すスマートなやつを書いてください。

362 :デフォルトの名無しさん:04/02/09 14:14
>>361
F島さんですか?笑

363 :(define (´∀`) 'マターリ) :04/02/09 15:51
スマートじゃないけど。
100000まででは(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))))

364 :Emacs Lisp:04/02/09 21:13
>>362
だれっすか?
>>363
サンクスコ。これで単位がきます。

365 :デフォルトの名無しさん:04/02/09 23:46
教官にここのURL送っておこう。

366 :デフォルトの名無しさん:04/02/10 08:40
elispで課題を出すのか…

367 :Emacs Lisp:04/02/10 09:41
>>366
友人は gcc でアセンブラはかせて出していました。

368 :デフォルトの名無しさん:04/02/10 09:48
>>367
ネタ決定


369 :デフォルトの名無しさん:04/02/23 17:59
>>329,330
激しく遅レスだが、それ hi-lock-mode でしょ

370 :デフォルトの名無しさん:04/02/28 09:28
>>369
326です。ありがとうございます。それを探してました。
M-x hi-lock-mode
M-x highlight-regexp [RET] ^;;;*.$ [RET] 色
ですね。
拡張子で判定して,ファイルを開くといつもhighlightできると便利なんです
が。。。


371 :デフォルトの名無しさん:04/02/28 09:31
>>370
M-x highlight-regexp [RET] ^;;;*.$ [RET] 色
ではなく,
M-x highlight-regexp [RET] ^;;;.*$ [RET] 色
でした。


372 :369:04/03/01 17:08
そんなら
(add-hook
'emacs-lisp-mode
'(lambda ()
(highlight-regexp "^;;;.*$" 'hi-red-b)
))
とか

373 :デフォルトの名無しさん:04/03/02 22:27
Elisp でファイルをアップロードしたいのですが,

<form enctype="multipart/form-data" action="upload.cgi" method="post">
<input type="file" name="uploadfile">

に対してアップロードする方法が分かりません.google で検索してみましたが,
ダウンロードについてはいろいろと見つかりましたが,アップロードは見つかり
ませんでした.


374 :デフォルトの名無しさん:04/03/03 09:32
open-network-stream して http://www.ietf.org/rfc/rfc2616.txt
参考にしつつ自前で書く。

375 :デフォルトの名無しさん:04/03/05 17:28
326です。
>>373
一箇所, 'emacs-lisp-mode を 'emacs-lisp-mode-hook とすれば,それでOKでした。

376 :デフォルトの名無しさん:04/03/06 10:55
教えてください。
emacsの正規表現で,「空白行の次の行の先頭が数字」で始まる文字を表現す
るにはどうすればいいでしょうか?
^$^[0-9]
では,うまくsearch-forward-regexpできません。


377 :デフォルトの名無しさん:04/03/06 11:17
^\n[0-9] みたいに、直接改行文字埋め込むとか…

378 :デフォルトの名無しさん:04/03/10 13:19
>>376

\n[0-9].*$

379 :378:04/03/10 13:21
間違えた
行でなくて文字ですね。
\n[0-9].hoge

380 :デフォルトの名無しさん:04/03/10 13:57
>>379 それだと空白行いがいにもまっちしませんか?

381 :デフォルトの名無しさん:04/03/10 16:45
\n\nにすればよかろう

382 :デフォルトの名無しさん:04/03/10 16:54
そりゃそうだ。

383 :デフォルトの名無しさん:04/03/10 18:19
バッファの先頭が空行だったら?


384 :デフォルトの名無しさん:04/03/10 18:24
>>383
自分で考えろ
\\(\n\\|\\`\\)\n[0-9].hoge

385 :デフォルトの名無しさん:04/03/10 22:37
なぜ>>377がスルーされてるのか不思議だ。


386 :デフォルトの名無しさん:04/03/11 08:38
つーか、>>377が正解の1つで、あとは、みんなで別解を探して遊んでいるんでしょ?

387 :デフォルトの名無しさん:04/03/13 00:37
Wandlust にあるメールフォルダを参照して新しいフレームにタイマーをつかっ
て何分かおきにアップデートするプログラムを elisp で書きました。

set-buffer を使っているので save-excursion を使って囲みましたが、タイ
マーでそれが実行されるとそのフレームのアップデートはうまくいきますが、
その際、本体の emacs カーソルが消えてしまい、なにもしないと二度ともどっ
てきません。(フォーカスからはずれるような感じ、なにかキー操作すると戻っ
て来る)。作成した新しいフレームにカーソルが移動しているようには、見え
ないので save-excursion は、うまく動作していると思います。教えて君で
す、スンマソン。


388 :デフォルトの名無しさん:04/03/13 03:06
私の知識も大したものではないのですが、
別の wm でやるとどうなりますか?
または、その現象を超単純化した lisp でも出していただけると
わかりやすいと思います。

389 :デフォルトの名無しさん:04/03/13 05:54
ちなみに、 save-excursion は window とか frame のことは関知しないよ。
window 周り担当は save-window-excursion。
frame は、 poe に save-selected-frame ってのがあるみたい。

でも、何かすれば戻ってくるってことは、ただカーソル見えないだけ?
あんまり害がなさそうな気がする…
終わったとき redraw-display でもしてみるとか?

390 :デフォルトの名無しさん:04/03/14 01:14
MLD5に収録されているXemacsを使っているのですが、
Lisp Interaction ModeでCtrl-jで評価できると
ある本で読んだのですが、改行されてしまいます。
どうもCtrl-jが改行に割り当てられているような
のですが、なぜなのでしょうか?設定を弄ったり
はしていません。みなさんはどうされていますか?

391 :デフォルトの名無しさん:04/03/14 04:11
C-h k C-jでヘルプがでるから見たら?
eval-print-last-sexpになってないのかな。

M-C-xだとミニバッファに評価してくれる

392 :デフォルトの名無しさん:04/03/14 12:46
>>391
eval-print-... に設定するにはどうすればいいのでしょうか?

あとEmacs Lispのよい参考書を教えてください。
いま山本和彦さんの「リスト遊び」という本で勉強
しています。かなり自分には合うプログラミング言語
だと思います。

393 :デフォルトの名無しさん:04/03/14 13:42
>>392 EmacsマニュアルとElispマニュアルを、大変ですが一度は通読しておくと
便利です。何しろ原典ですから頼りになります。私はそうやって勉強しました。
日本語に翻訳したものもあるはずです。

あと、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)
と書いてみるとか。

394 :デフォルトの名無しさん:04/03/14 18:27
emacs-lisp-modeで C-xC-e, C-uC-xC-eしか使ってないな。

395 :デフォルトの名無しさん:04/03/15 20:10
Emacsを使っているときのみでよいのですが、
CtrlキーとCaps Lockキーの役割を入れ替えたい
のですが、誰かくわしいかたやり方を教えてください。
考えているのは、.emacsファイルで設定をいじって
入れ替えるやりかたです。

お願いします。


396 :デフォルトの名無しさん:04/03/15 20:23
>>395
それは Emacs 側でやることじゃないんじゃないか?

397 :395:04/03/15 21:31
実は Windows 上で Meadow というエディタを
使っていて、 Meadow を使っているときだけ
Ctrl と CapsLock を入れ替えたいなと思いまし
て。。。

398 :デフォルトの名無しさん:04/03/15 22:06
>>388 >>389
レスサンクス。ご指摘どおり、save-window-excursion を
使ったらうまくいきました。select-frame 関数が原因だっ
たのかな。

399 :デフォルトの名無しさん:04/03/15 23:59
>>397
windowsなら「窓使いの憂鬱」使えば?

400 :デフォルトの名無しさん:04/03/16 00:38
最近Emacs関連の書き込みが少ないせいか、妙に親切なレスが多いのに感心する

401 :デフォルトの名無しさん:04/03/16 00:51
>>397
おいおい、FAQだよ。
ttp://meadow.sourceforge.jp/cgi-bin/hiki.cgi?%B0%EC%C8%CC%C5%AA%A4%CA%BE%F0%CA%F3#l4

ちっとは調べろ。あと、マルチポスト( ゚Д゚)イッテヨシ。


402 :デフォルトの名無しさん:04/03/16 19:48
>>397
HHKかえばいいよ。

ごろ寝してHHK腹の上に置いて
モニターを天地逆さまにおいたら
むちゃくちゃ使いややすいぞ。
たまに頭に血登って気絶するけど
やめられん。

403 :デフォルトの名無しさん:04/03/16 19:51
>>402
どんな体位でやってるんだ?
モニータが天地逆さまってどんなだ?
想像つかねー


404 :デフォルトの名無しさん:04/03/18 23:59
>>402じゃないんで想像だけど、
頭に血が登るという部分から想像するに
ベッドの端から頭がはみ出るような形で仰向けに寝て、
首を背中側に90度曲げるんじゃないかな。
そうすれば普通と上下が反対になるから、
モニターを天地逆に置く理由になる。


405 :デフォルトの名無しさん:04/03/19 01:27
HHK って window に使いにくくない?

406 :デフォルトの名無しさん:04/03/19 01:40
なんだって?

407 :デフォルトの名無しさん:04/03/19 04:37
HHK って window に使いにくくない?


408 :デフォルトの名無しさん:04/03/19 13:43
なんだって?

409 :デフォルトの名無しさん:04/03/19 14:07
HHK って window で使いにくくない。

410 :デフォルトの名無しさん:04/03/19 14:13
なんだって。

411 :デフォルトの名無しさん:04/03/19 14:37
1: Happy Hacking Keyboard って Microsoft Windows で使いにくいか。
2: Happy Hacking Keyboard って X Window System で使いにくいか。
可能性としては、これくらいしか思い浮かばん。
でどうなの?

412 :デフォルトの名無しさん:04/03/19 15:49
いずれにしろスレ違いなわけで。

413 :デフォルトの名無しさん:04/03/19 18:06
10秒後になにか動作を起こすようにしたいんですけど
これではどこがいけないんでしょうか?

(run-at-time "10 sec" nil (message "hoge"))

これをscratchでC-jしたら
[nil 16474 46984 123352 nil "hoge" nil nil]
とででミニバッファにhogeと表示されました。
10秒後にhogeと表示されるのを期待していたのですが。

414 :デフォルトの名無しさん:04/03/19 18:21
(run-at-time "10 sec" nil #'message "hoge")

415 :デフォルトの名無しさん:04/03/19 19:03
>>414
ありがとうございました。

416 :デフォルトの名無しさん:04/04/10 14:12
cvs update -rlexbind

417 :デフォルトの名無しさん:04/04/12 08:52
本当?

418 :デフォルトの名無しさん:04/04/12 13:58
>>417
yes

419 :デフォルトの名無しさん:04/04/15 07:31
互換性はどうやって保つのかな? lexical-letとか使うの?
letをlexicalにしてしまったら、ある意味、漢だね。

420 :デフォルトの名無しさん:04/04/15 21:13
有効になるのは Emacs Lisp ファイルの頭に
-*- ... ; 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;
だそうだ。

421 :KingMathematician ◆5lHaaEvFNc :04/04/17 16:52
xyzzy lisp の (progn (setq x (random 50)) (dotimes (y x) (format t "~d~%" y)))
は、 emacs lisp の何に相当しますか?

422 :デフォルトの名無しさん:04/04/17 18:27
(progn
(setq x (random 50))
(dotimes (y x) (print (format "%d" y) (current-buffer))))
とか?

423 :KingMathematician ◆5lHaaEvFNc :04/04/17 19:11
Re:>>422
(progn
(setq x (random 50))
(dotimes (y x) (princ (format "%d\n" y) (current-buffer))))
でうまくいきました。

誰か emacs lisp と xyzzy lisp の相違点について解説してもらえませんか?

424 :デフォルトの名無しさん:04/04/17 20:33
自分で調べようともしないのは何故?

425 :デフォルトの名無しさん:04/04/17 23:16
>>423
xyzzy lisp ??

426 :デフォルトの名無しさん:04/04/18 01:42
坊やだからさ。


427 :デフォルトの名無しさん:04/04/18 12:59
>>423
>誰か 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にできるようにして、互換性も保てる方法があれば、
良いのだろうけど。


428 :デフォルトの名無しさん:04/04/18 15:10
> p.s. xyzzyのソースを読んでみてぇなぁ
最近知ったんですが、ソースは公開されてるようですよ。

429 :デフォルトの名無しさん:04/04/19 08:35
情報ありがとう

430 :デフォルトの名無しさん:04/04/22 10:09
Ruby や Perl での正規表現、先読み(lookahead)を elisp で使いたくなったとき、
みなさんどうしてますか?

elisp には先読みってありませんよね?

# メルマガ内の広告を invisible にするために使おうと思ってます。



431 :デフォルトの名無しさん:04/04/22 13:53
looking-atあたりを使うコードに手で書き直すしかないのかな。
実際に先読み指定を含んだ正規表現をここで見せてみたらどう?

432 :430:04/04/23 20:39
>>431

> looking-atあたりを使うコードに手で書き直すしかないのかな。
> 実際に先読み指定を含んだ正規表現をここで見せてみたらどう?

"john(?=ney)" みたいなのを想定してます。

というか、
先読みは自己流でムリヤリ作ってみて、その汚さ・不完全さに嫌気がさしました。
ご想像の通り、looking-at や match-data などを使いました。
しかし、もっと綺麗にやる方法についてどなたかの知恵を借りたいなー、
と思った次第です。

本当いうと、戻り読み "(?<foo)bar" のほうが欲しいんですが。


433 :デフォルトの名無しさん:04/04/23 21:12
こんなんでどう?
"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))))

434 :430:04/04/25 00:25
>>433
どもです。上に書いてもらったのに、関数を書き加えて、

(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))


435 :デフォルトの名無しさん:04/04/25 10:43
カーソルが"foo"の直後にある時は"(?<foo)bar"を検索できないと思うが、そう言うもの?


436 :430:04/04/25 11:09
>>435

うーん、確かに検索できませんね。

自分の用途では、とりあえずそういう使い方をしないので不都合ないんですが、
きちんとした戻り読みの実装という意味では、中途半端なもんはだめですね。

誰か、直せませんかね。
根本的な改善も歓迎。

437 :デフォルトの名無しさん:04/04/25 11:17
(defun re-search-forward-lb-la (lb-regexp regexp la-regexp
&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))))

438 :デフォルトの名無しさん:04/04/25 12:09
>>437
カーソルが"fo"の直後にある時は"(?<foo)bar"を検索できないと思う。


439 :デフォルトの名無しさん:04/04/25 12:42
(>= (match-end 0) (point)) だね。
bound も 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)

440 :デフォルトの名無しさん:04/04/25 13:58
>>439
re-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 の処理も自前で実装すればできそうかな…

441 :デフォルトの名無しさん:04/04/25 13:59
(defun re-search-forward-lb-la (lb-regexp regexp la-regexp &optional bound noerror count)
(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))))))))


442 :デフォルトの名無しさん:04/04/25 14:16
うわ、最後の行が間違ってる…
noerror が t でも nil でもなかったら、 goto-char したあと nil 返さないといけないんだっけ。

(t (goto-char (or bound (point-max)))
nil)))))

とかに修正だね。

443 :デフォルトの名無しさん:04/04/25 14:36
"(?<a)a+"を検索してみれ


444 :デフォルトの名無しさん:04/04/25 16:10
Perl同様look-behindを固定長限定で
(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)))

445 :デフォルトの名無しさん:04/04/25 16:15
うげ、改行多すぎと言われて編集したら変になった。最初の部分はこう。
(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)))))

446 :デフォルトの名無しさん:04/04/25 18:07
abababababaとなっている時、
"(?<a)b(?=a)"をCOUNTパラメタ付きで検索してみれ。

ポイントが最初のaの後ろにある時、
"(?<a)ba"も検索してみれ。


447 :デフォルトの名無しさん:04/04/26 01:54
最初に regexp を探してそれから前後をチェックするんじゃ駄目?

448 :デフォルトの名無しさん:04/04/26 08:24
それだと443がうまくないんじゃないかな

ユーティリティ
(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 "\\)\\(") "\\)"))

449 :デフォルトの名無しさん:04/04/26 08:24
本体
(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)))))

450 :デフォルトの名無しさん:04/04/26 09:22
最後の部分で、 re-search-forward で regexp だけ match させるには、
bound は la-regexp の match-beginning にしないとだめだよ。
.+(?=r) を barbaz から検索…みたいに、 la-regexp 以降まで一致しちゃう場合があるでしょ。


ところで、 lb-regexp で ? とか \| も弾いて、ほんとに固定長にしちゃえば、
search-backward しなくても、その長さだけ戻れば済みそうな気がする。

最初に regexp を探す場合で、 >>443 を aaaaaa とかから検索するには、
match しなかった場合に、 regexp の match-beginning より一文字後から再検索すればいいかな。

>>446 は、全部の b に一回ずつ match するのが正しいのかな。

451 :デフォルトの名無しさん:04/04/26 14:35
本体
(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)))))


452 :デフォルトの名無しさん:04/04/26 14:36
サブルーチン
(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)))


453 :デフォルトの名無しさん:04/04/26 14:36
サブルーチン2
(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)))


454 :デフォルトの名無しさん:04/04/26 14:57
「aaaaa」の直後にカーソルを置いて
(and (re-search-forward-lb-la "a" "a*" "a" nil t -1) (match-string 0))
=> ""

455 :デフォルトの名無しさん:04/04/26 15:17
例が変だった。
(and (re-search-forward-lb-la "「" "a*" "」" nil t -1) (match-string 0))
=> ""
(aaaaa になって欲しい)

456 :デフォルトの名無しさん:04/04/26 18:11
re-search-backward-lb-la-1で
> (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))
にすればいいのかな?


457 :デフォルトの名無しさん:04/04/26 20:12
固定長の regexp にマッチする長さを数えておいて
(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))))))))

458 :デフォルトの名無しさん:04/04/26 20:12
bound を調整し
(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)))

459 :デフォルトの名無しさん:04/04/26 20:13
使う1
(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)))))

460 :デフォルトの名無しさん:04/04/26 20:14
使う2
(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)))))

461 :デフォルトの名無しさん:04/04/26 20:15
使う3
(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)))))

462 :デフォルトの名無しさん:04/04/27 00:31
"a+(?=a+)"をBOUND指定付きで検索した時にBOUNDを超過して
本体のa+に一致してしまわない?


463 :デフォルトの名無しさん:04/04/27 01:19
forward の時は bound、backward の時は (point) の調整前の値を
変数 end あたりに束縛しておいて、最後のマッチを
(re-search-forward regexp (min (match-end (1+ lb-depth)) end))
こんなふうにすればいいのかな。

464 :デフォルトの名無しさん:04/04/27 07:16
>>457-461
a+(?=.+) みたいな嫌な la-regexp がくると、 bound が無効化されちゃうね。
regexp が bound より向こうで始まってないかも調べないといけなそう。
re-search-forward のときに bound が (point) より小さいと error が出ちゃう。


ところで >>446
> abababababaとなっている時、
> "(?<a)b(?=a)"をCOUNTパラメタ付きで検索してみれ。
って、何回 match するのが正しいんだろう…
re-search-forward に任せると三回だし、自前で match させれば五回にできるし。

465 :デフォルトの名無しさん:04/04/27 09:41
perl -e 'print "abababa" =~ m/(?<=a)b(?=a)/g, "\n"'
bbb
となるね

466 :デフォルトの名無しさん:04/04/27 10:40
テスト関数
(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))))

467 :デフォルトの名無しさん:04/04/27 10:43
パッチ1
@@ -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)))

468 :デフォルトの名無しさん:04/04/27 10:44
パッチ2
@@ -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)))

469 :デフォルトの名無しさん:04/04/27 11:59
(erase-buffer)
(insert "aaa")
(goto-char (point-min))
(re-search-forward-lb-la "" "a" "aa" (+ (point-min) 2))


470 :デフォルトの名無しさん:04/04/27 12:42
まずは定義からだ。

lookahead分もboundまで、で十分じゃないの?

lookbackは、regexpがマッチしてから判定し、pointより前も見る。
実装は、アンカーを使えば簡単だろう。

match-dataは、regexpにマッチしたものが設定されればいい?


471 :デフォルトの名無しさん:04/04/27 14:50
look-behind をそのように実装した場合、"(?<hoge)." のような検索をすると
一文字ずつずらしながら "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)))

472 :470:04/04/27 15:23
>>471
> look-behind をそのように実装した場合、"(?<hoge)." のような検索をすると
> 一文字ずつずらしながら "hoge\=" を検索することになる。
それはわかるが、使う側の問題と考えたい。
むしろ、negative lookbehind and/or lookaheadへの展開を期待してるんだが。


473 :デフォルトの名無しさん:04/04/27 16:32
negative に対応するとすると、まずはこんな感じで元の正規表現と同じ長さ
の任意の文字列にマッチする正規表現を作ってやり、マッチした文字列が元の
正規表現とマッチしないことを確認するといいんじゃないだろうか。
アルゴリズムは >>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))))

474 :470:04/04/27 21:38
>>473
> negative に対応するとすると、まずはこんな感じで元の正規表現と同じ長さ
> の任意の文字列にマッチする正規表現を作ってやり、マッチした文字列が元の
> 正規表現とマッチしないことを確認するといいんじゃないだろうか。
違うと思う。

475 :デフォルトの名無しさん:04/04/27 23:00
例えばlookaheadだったら
(and (re-search-forward regexp)
(not (re-search-forward (concat "\\=\\(" la-regexp "\\)"))))
って感じじゃない?


476 :470:04/04/27 23:20
>>475
これも違う。
elispで作るのだと、negativeはlookaheadの方が難しい。


477 :デフォルトの名無しさん:04/04/28 00:08
ふつーに regexp を検索して周囲のチェックじゃだめなの?
perl -e 'print "abababa" =~ m/.*(?!a)/g, "\n"'
abababa
perl -e 'print "abababa" =~ m/(?<!a).*/g, "\n"'
abababa
となるから余計に食っちゃう分にはかまわないみたいだが。

478 :デフォルトの名無しさん:04/04/28 01:11
>>452 っぽく negative lookahead を実装するとこんな感じかな?
(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)))


479 :デフォルトの名無しさん:04/05/02 04:17
              __
            γ ̄ ゚・  。ヽ
         へ_ノ゚゚・゚。γ⌒ヽω゚)
       ノo・゚゚。 ´д。ξ、  ν″
      ι 。Дζ_ゝ`ゞo〉 <スイ...マ...セ...ゴボ..ゴボッ...チョッ...ト..ズズズ...ココトボリマ...マ...グボッ
     /三≡゚・゚ つ "⌒つ
   〜〈 `,∀゚・゚。   っ ヘノ■)
    ζ・∀・・)ι゚。゚゚ 'Д⌒J
    ノ ∴ι"ヾー。~'つ っ
   (_と 。゚゚・・ /⌒ヽ゚ 。)
      )゚・゚。゚゚ノ    ";
      |。/|゚ /      ,’
      // |゚|     .
     U  .U    _



480 :学生:04/05/10 13:42
すいません。質問です。
学校の課題なのですがどうしてもできません。
次のような動作をするかんすう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))

誰か私を助けてください!!!

481 :デフォルトの名無しさん:04/05/10 13:45
(defalias 'rev #'reverse)

482 :学生:04/05/10 14:13
すいませんが基本関数だけでお願いします。

483 :デフォルトの名無しさん:04/05/10 14:41
(defun rev (x)
(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)))))


484 :デフォルトの名無しさん:04/05/10 15:02
>>482 作りかけのコードでもあれば見せてみれば?

485 :デフォルトの名無しさん:04/05/10 15:12
 (defun rev (sequence)
  (require 'cl)
  (reduce #'(lambda (seq item) (cons item seq)) sequence :initial-value nil))
これが俺のお気に入り。

486 :デフォルトの名無しさん:04/05/10 16:43
(defun  rev  (list)
    (let  ((f  #'(lambda  (list  reversed  f)
                              (if  (null  list)
                                      reversed
                                      (funcall  f  (cdr  list)  (cons  (car  list)  reversed)  f)))))
        (funcall  f  list  '()  f)))

487 :デフォルトの名無しさん:04/05/10 16:44
あらら…

488 :デフォルトの名無しさん:04/05/10 16:45
(defun rev (list)
  (let ((f #'(lambda (list reversed f)
               (if (null list)
                   reversed
                   (funcall f (cdr list) (cons (car list) reversed) f)))))
    (funcall f list '() f)))

489 :デフォルトの名無しさん:04/05/10 20:08
再帰版
(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))))


490 :デフォルトの名無しさん:04/05/11 01:54
(defun nrev (list)
(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)))

491 :デフォルトの名無しさん:04/05/11 11:36
最近emacsを使い始めたんだが、lispの勉強の為に数行のゲームとかマクロとか
知っている人が書いてくれると初心者には便利かもしれない。
elisp上で動く数行の簡単なゲームって誰かつくっていないのかい?
リストを使った並べ替えパズルなんてのは簡単に出来そうな気がするんだが。

492 :学生:04/05/11 12:20
皆さんありがとうございました。

493 :491:04/05/11 12:36
とりあえず数十分で数当てゲームを作ってみた。

(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))
 )
)



494 :デフォルトの名無しさん:04/05/11 13:25
Lispの初心者ということで(だよね?)、俺だったらこうすると思ったことをちょっと書きます。
変数名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)))

495 :デフォルトの名無しさん:04/05/11 13:25
悪い。油断して、あげちまった。

496 :デフォルトの名無しさん:04/05/11 13:38
できたら、お勉強はこっちでやってくれ。
http://pc5.2ch.net/test/read.cgi/unix/1063880951/


497 :デフォルトの名無しさん:04/05/11 14:03
emacsスレは拡散しているね。むこうからも、ここへ誘導しているのがワラタ。

498 :デフォルトの名無しさん:04/05/11 18:19
先生、emacsモナーさんを作ってみました。

(defun mona ()
  (interactive)
  (while t
    (message "( ´∀`)")
    (sit-for 2)
    (message "(´∀` )")
    (sit-for 2)
  )
)



499 :デフォルトの名無しさん:04/05/11 19:00
(defun hit-and-blow (ans)
(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))))


500 :デフォルトの名無しさん:04/05/12 07:36
次は、○×をだれかプリーズ。

501 :デフォルトの名無しさん:04/05/12 07:57
入力は、こんな感じでどう?
(read-from-minibuffer " │○│ 
―┼―┼―
 │×│ 
―┼―┼―
 │ │  コンマで区切って2つの数字を入力してください。(例 0,0)")

>>496さんの勧めに従って、途中経過は、
http://pc5.2ch.net/test/read.cgi/unix/1063880951/
の方でやったほうがよいかな? それで、完成品をここに展示と。

>>498さんも恥ずかしがらずに、トライしましょう。

502 :デフォルトの名無しさん:04/05/12 12:11
ゲームではないけどミニ電卓。lispの式そのままなので前置記法。
ついでに定数として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)))))

503 :デフォルトの名無しさん:04/05/12 13:48
(defun minicalc (sexp)
(interactive "x?>")
(let ((rad degrees-to-radians))
(message "%s" (eval sexp))))

504 :デフォルトの名無しさん:04/05/12 14:12
○×ボードだけ。

(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))))


505 :502:04/05/12 20:01
>503
おーーーっ、こんなに短くできるんですか!スゴイ。

506 :502:04/05/12 20:07
つーことで、シンサク。
編集中のテキストや電子書籍などのテキストの"ー"をキター━━━(゚∀゚)━━━変換。

(defun kitaaa ()
  (interactive)
  (goto-char 0)
  (replace-string "ー" "━━━(゚∀゚)━━━"))



507 :デフォルトの名無しさん:04/05/12 20:14
>>506
This 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.)


508 :502:04/05/12 20:58
キターの応用。これもキター変換と同じで編集中の文章を一発変換。

(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)))))


509 :デフォルトの名無しさん:04/05/12 21:36
>>508
変数に値を束縛するのには、なるべく let を使う。setq は必要な場合だけ。
replace-string は使っちゃだめ。
つーか、マニュアルくらい一通り目を通せ。
空白を「 」にするのはやめれ。消えて見えるのがいやなら &nbsp; に。

(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))))))

510 :502:04/05/12 21:47
あれ、ここは外人の人も見てるんですか?日本語のアスキーアートは英語だと
文字化けするから変なコードの文字列を見て親切に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?



511 :デフォルトの名無しさん:04/05/12 21:51
>>510
M-x describe-function replace-string

512 :502:04/05/12 21:57
あら、すいません。
空白入れちゃいけませんでしたか。ブラウザで見ると全角のスペースでインデント
入るんで簡単だったので。
マニュアル読んでるんですけど、lisp初めて三日ほどなのでちょっと。。。。
replace-stringは駄目なんですか?search-forwardだと厳密に文字列を調べるとしか書いて
無かったので問題ないかなっと思ったんですが。



513 :デフォルトの名無しさん:04/05/13 09:51
replace-string は対話用に用意されている。プログラムでは副作用の少ない
シンプルな関数を使うべき。next-line ではなく forward-line をとかね

514 :デフォルトの名無しさん:04/05/18 06:49
(defun hoge (from-string to-string)
(while (search-forward from-string nil t)
(replace-match to-string nil t)))
な関数ないの?

515 :(define (´∀`) 'マターリ):04/05/18 07:17
>>498
(defun mona ()
(interactive)
(dolist ( ´∀` (let ((´∀`  '( ´∀` ´∀` )))
(rplacd (cdr ´∀` ) ´∀` )))
(message "%s" (list  ´∀`)) (sit-for 2)))

516 :デフォルトの名無しさん:04/05/18 09:34
循環リスト作成のトリックがよくわからん……

517 :デフォルトの名無しさん:04/05/18 10:41
最後のコンスセルのcdrをリストの先頭に替えてるだけ。

518 :デフォルトの名無しさん:04/05/18 11:08
(defun mona ()
(interactive)
(dolist (mona '#1=( ´∀` ´∀`  . #1#))
(message "%s" (list mona)) (sit-for 2)))

519 :(define (´∀`) 'マターリ):04/05/18 17:11
(defun mona ()
(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))
'( ´∀` ´∀` ))))

520 :デフォルトの名無しさん:04/05/18 22:16
nconcのが、セルの絵描いても把握できないの。

521 :デフォルトの名無しさん:04/05/19 03:08
こんな感じ

(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))

522 :デフォルトの名無しさん:04/05/19 05:02
(let ((x (list 'a 'b))) (nconc x x))
x = (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 . ....)

523 :デフォルトの名無しさん:04/05/19 07:39
(defun mona ()
(interactive)
(while t
(message "%s" '( ´∀`))
(sit-for 2)
(message "%s" '(´∀` ))
(sit-for 2)))
これでええやん。

524 :デフォルトの名無しさん:04/05/19 22:25
>>523 ダサ

525 :デフォルトの名無しさん:04/05/20 00:38
無限ループのためだけに循環リストを使う方がよっぽど…

大体、Emacs Lisp Reference Manual では list とは nil で終端された cons
セルの連続、つまり Common Lisp での proper list と定義されてる。

引数に list を要求する関数やマクロに circular list を渡した場合の挙動
は未定義だし、たまたま希望通りの動作をしたとしても、それが将来にわたっ
て同等の動作をすると期待できるものでもなかろう。

526 :デフォルトの名無しさん:04/05/20 15:11
>>525 マジレスに当方当惑気味です。ごくろうさまです。

527 :デフォルトの名無しさん:04/05/21 11:48
525はマジレスじゃなくてネタですよ。

528 :デフォルトの名無しさん:04/05/22 16:10
短い面白コマンドを作ってくれる人はもういなくなったのか…

529 :デフォルトの名無しさん:04/05/25 22:15

(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 ゚∀゚))))

530 :デフォルトの名無しさん:04/06/06 09:18
emacsをマルチスレッド化できない理由として、dynamic scope
があるそうですが、dynamic scopeじゃ駄目ってのは常識
なんでしょうか?素人考えでは、
・何もしなければロック無し
・束縛はスレッド固有にして、スレッドを立てる時にコピー
で実現できそうに思ったのですが、間違っていたら
突っ込んでください。

531 :デフォルトの名無しさん:04/06/06 13:01
原理的に不可能なわけではないです。マルチスレッド化するにあたって必要とされる
Emacsのdynamic scope機構への変更が面倒くさいということなのではないでしょうか。

Dynamic scopeをサポートしているCommon Lispの処理系にマルチスレッド化されたものがあります。

532 :デフォルトの名無しさん:04/06/10 09:26
ExcelLispという様な表計算マクロ物があればlisp本来の能力を発揮できそうだな
、と思う今日この頃。

533 :デフォルトの名無しさん:04/06/10 20:06
>>532
ses-mode

534 :デフォルトの名無しさん:04/06/11 21:05
n^m(nのm乗)を計算したいのだけれど、再帰でどうやって書いたら良いの?
ループよりは再帰で書くのが良いという事は分かるが良く分からん。
標準ライブラリにもないし。

535 :デフォルトの名無しさん:04/06/11 21:18
リスト遊びで勉強中なんですが、「5.1.4 等しいリスト」のとこで
つまずいてます。

`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

536 :デフォルトの名無しさん:04/06/11 21:21
まず1回目の呼出しで (eq (car x) (car y) は t を返すので
再度 equiv が呼出されますよね。その際には
(equiv '(pig) '(pig)) のように呼出されると思うんですが
間違ってますか?これを自分で実行すると t が返ってきますが
(equiv '(dog (pig)) '(dog (pig))) では nil が返ってきます。

だからこの部分の解釈が間違ってるんだと思うんですが納得できない
んで誰かアドバイス下さい。

537 :デフォルトの名無しさん:04/06/11 21:28
(equiv '((pig)) '((pig)))を評価しる。


538 :デフォルトの名無しさん:04/06/11 21:52
>>534
expt

539 :デフォルトの名無しさん:04/06/11 21:55
(defun equiv (x y)
(if (or (null x) (null y)) (and (null x) (null y))
(and (eq (car x) (car y)) (equiv (cdr x) (cdr y)))))

540 :デフォルトの名無しさん:04/06/11 22:08
>>537
(cdr '(dog (pig)))
=> ((pig))
(eq (car '((pig))) (car '((pig))))
=> nil

ってことでしたか。納得しました。
でもリストについて理解してたつもりなのまた混乱してきた…
基礎から出直してきます。

541 :デフォルトの名無しさん:04/06/11 22:20
>>534
Emacs 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)))))))

542 :デフォルトの名無しさん:04/06/11 22:33
AAでちゃんと伝わるか不安ですが
(dog (pig)) って

| | | => | | | => nil
| |
dog | | | => nil
|
pig

こんな感じであってますかね?

543 :デフォルトの名無しさん:04/06/11 22:56
(dog . ((pig . ()) . ()))

544 :デフォルトの名無しさん:04/06/11 23:37
>538,541
サンクソ。激辛感動した。
loopで書けるのは分かっていたれど関数型言語だから再帰で書いてみたい。
再帰こそλの本質じゃないですか。チューリングマシン以外でコンピュータ
のメカニズムを記述できるのはラムだ!ラムダしか


545 :デフォルトの名無しさん:04/06/11 23:50
(defun power (x n)
(cond ((= n 0) 1)
((= n 1) x)
(t (* (power x (% n 2))
(square (power x (/ n 2)))))))

546 :デフォルトの名無しさん:04/06/12 01:09
現在プログラム板にはHSP関連スレに凶悪な荒らしどもが住みついています。

・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/

547 :デフォルトの名無しさん:04/06/12 02:17
要するに、非破壊的とか束縛という概念はポインタとかガベージコレクション
を前提としている訳だ。簡単に言うと変数の取り扱いだ。
これをlisperはいちいち難しい言葉を使って束縛だの非破壊だのと言っている
のだ。つまりそれはフロイト的に言うと無意識の抵抗だ。HSP厨房のような
連中にLISPを気安く語って欲しくはないという無意識の抵抗が「束縛」とか
「非破壊的変数」などという言葉を発してしまうつまりは古典的ハッカーの
リビドーなのだ。
だがここで一つの疑問が残る。なぜにHSP厨なのかという点だ。恐らく事は
エディプスコンプレックスなのではないかと思う。つまり潜在的にLisper
(C++,Java等の高級言語ユーザーも含む)は、日夜アホで低レベルな会話や
車輪の再発明をしているそのアホさにコンプレックスを抱いているのだ。
つまりHSP厨はアホな父親像であり、コンプレックスを抱きつつあほな父親像
にエディプスコンプレックスを意識しているのだ。ということは、
Lisper(C++,Java等の高級言語ユーザーも含む)は、深層心理の何処かでHSP厨
を強く意識しているはずであり、厨のアホ父親像に劣等感さえ憶えてしまっている
という事が明らかとなるのである。
という事は、fancy新山が留学やunixuserドメインを持ちエリート指向丸出しであり
ながら隠れてアホなblogを書いているのは厨という存在を強く意識している
深層心理の現われであり、フロイト的に分析すると、fancy新山は将来アホオヤジ
になるに違いない。

548 :デフォルトの名無しさん:04/06/12 09:04
末尾再帰に置き換えて
(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))))

549 :デフォルトの名無しさん:04/06/12 12:15
(defun power-loop (x n)
(let ((r 1))
(while (> n 0)
(setq r (if (= (% n 2) 0) r (* x r))
x (* x x)
n (/ n 2)))
r))

550 :デフォルトの名無しさん:04/06/12 12:42
(dotimes (i 10000)
(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

551 :デフォルトの名無しさん:04/06/12 12:52
(defun power-loop (x n)
(let ((r 1))
(while (and (setq r (if (= (% n 2) 0) r (* x r))) (> n 1))
(setq x (* x x)
n (/ n 2)))
r))

552 :デフォルトの名無しさん:04/06/15 00:38
powが出たついでに聞いちゃうけれどlispのラムチャン式で再帰的なsum(0からnの合計、Σ)
を計算しようとしてサンプルを見ながらリストを使ってよりエレガントにしてみた。

(defun sum (n)
(if (> n 0)
(cons n (sum (- n 1)))
nil))

ところが最後のリスト(1 2 3)などを合計する所が分からないのですが、
どうしたらいいですか。



553 :デフォルトの名無しさん:04/06/15 03:06
apply

554 :デフォルトの名無しさん:04/06/16 09:21
ラムさんです。

((lambda () (princ "こんにちはぁ〜っ、ラムでぇ〜す★")))

555 :デフォルトの名無しさん:04/06/17 10:11
('A`)

556 :デフォルトの名無しさん:04/06/17 13:33
Invalid read syntax: ")"

557 :デフォルトの名無しさん:04/06/17 14:00
>>556
ワロタ

558 :デフォルトの名無しさん:04/06/17 22:29
真偽値(nil, non-nil)のリストを引数にして論理和、論理積を返す関数をそれぞれ作れ。


559 :デフォルトの名無しさん:04/06/18 05:26
(defun ronriwa (list)
(eval `(or ,@(mapcar (lambda (x) (list 'quote x)) list))))
(defun ronriseki (list)
(eval `(and ,@(mapcar (lambda (x) (list 'quote x)) list))))

560 :(define (´∀`) 'マターリ):04/06/18 07:01
(defun ronriwa (list)
(not (eval `(and ,@(mapcar #'not list)))))
(defun ronriseki (list)
(not (eval `(or ,@(mapcar #'not list)))))

561 :(define (´∀`) 'マターリ):04/06/18 07:38
(defun ronriwa (list)
(memq nil (mapcar #'not list)))
(defun ronriseki (list)
(not (memq nil list)))

562 :デフォルトの名無しさん:04/06/26 16:03
上のはmeadowですか?xyzzyだと動かないや。
エディタ毎の関数や命令の実装状況ってどうなってるんですかね?
xyzzy,Meadow,muleなどのelバージョンとか実装の比較や一覧の資料があると
いですね。

563 :デフォルトの名無しさん:04/06/27 09:17
xyzzyはcommon lisp系のためemacs系のmeadow, muleとはlispの汎用的な機能で違う点が多い。
muleはemacs19系かな。meadowはemacs20系。meadow2はemacs21系。

>>561がxyzzyで動かないのはmemqのせいかな。だったら、memberを使えばいいかも。

564 :デフォルトの名無しさん:04/06/27 15:27
てゆーかxyzzyはEmacsじゃねーだろよそいけ


565 :デフォルトの名無しさん:04/06/27 16:42
かたいこというなよ

566 :デフォルトの名無しさん:04/07/06 08:49
相対的にemacs人口少ないからxyzzzzzzzyも入れorzkkksssssskksllll!.a..ak
見た目増えるからyoshiiiiiii.a....aa..aa.aa.a.aa.a.a.a.a..a.a.eeeeeeeee
.....良し。

しかし人が少ないスレだな。厨房はemacs使わずにVisuあーるすたdioか秀丸
なのだろうな。

567 :デフォルトの名無しさん:04/07/06 16:25
>>566 ッテキチガイ?


568 :デフォルトの名無しさん:04/07/06 16:28
>>567
ただのxyzzyユーザーです。


569 :デフォルトの名無しさん:04/07/06 16:38
>>568
なんだ、キチガイか...

570 :566:04/07/06 18:20
LISP的なAA置いとく。

λ......         λ......       λ......
  λ......            λ......
 λ......      λ......        
        λ......                  λ......
    λ......             λ......
                λ......
 λ......       λ......          λ...... 



571 :デフォルトの名無しさん:04/07/06 18:47
>>570
変にめげないおもしろいやっちゃな。少し好きになったよ


572 :デフォルトの名無しさん:04/07/06 21:38
xyzzyユーザーが入ってもいいけどxyzzyとEmacsは別物だから、
xyzzyで動くの?とか、互換性はどうなってるの?とか聞かれても困るし、
xyzzyとEmacsの違いは自分で埋めてね。

573 :デフォルトの名無しさん:04/07/07 17:56
xyzzyはどこまで発展してもEmacsのパチもんだから、いいんでない?

574 :デフォルトの名無しさん:04/07/09 18:39
Linux magazine8月号でRubyの作者が
Emacs Lispが遅いからcmailが遅い、
数百のメールを表示するのに数分かかるって言ってるんだけど
単にcmailがヘボなだけちゃうの?

575 :デフォルトの名無しさん:04/07/09 18:42
>>574
そうだな。Gnus や Mew なら数秒だな。
Wanderlust は数分だけど(藁)

576 :デフォルトの名無しさん:04/07/10 22:56
結論
Ruby>>>>>>>>|越えられない壁|>>elisp

577 :デフォルトの名無しさん:04/07/11 00:54
>>576
その不等号は所要時間を比較しているんだな?

578 :デフォルトの名無しさん:04/07/14 01:44
emacsのcodingまわりをいじりたいんですが、Cからelispへの
コールバックについて分かる人いませんか?
callN(),specbind()は分かったけど、GCPROn()はよく分かりません。
他にも、どんな場合にrecord_unwind_protect()が必要か、
lispを安全に呼び出せない場所はどう見分ければいいか、
とか基本的なことが分からなくて困っています。

579 :デフォルトの名無しさん:04/07/14 06:33
elispとGCとその他もろもろの知識不足だろ。先は長そーだな。
まずは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な。


580 :デフォルトの名無しさん:04/07/14 10:28
>>578
ttp://docs.biostat.wustl.edu/cgi-bin/info2html?(internals.info.gz)Top

これでも読んどけ。


581 :578:04/07/14 16:29
>>579-580
ありがとうございます。
GCについてはinfoにばっちり書いてありました。
record_unwind_protectは、使い方はいいのですが使いどころが
分からないのです。資源の解放は当然として、他に何を触ったら
元に戻す必要があるか、ということです。
その辺、emacs全体の設計を理解しないと難しいのでしょうか?

582 :デフォルトの名無しさん:04/07/14 17:00
emacs全体の設計というか……579のいうように、elispとEmacs自体の知識不足だろ。
はっきりいって、そんな質問が出てくる方が信じがたい。


583 :デフォルトの名無しさん:04/08/09 17:45
保守にまいりました。でも誰もいませんね。


584 :デフォルトの名無しさん:04/09/02 15:37
同感...

585 :デフォルトの名無しさん:04/09/03 03:34
どれに同感なんだろう??? やっぱり>>583?



586 :デフォルトの名無しさん:04/09/03 10:06
いや>>1にだろ

587 :デフォルトの名無しさん:04/09/11 19:40:45
なんか話題ない?


588 :デフォルトの名無しさん:04/09/12 10:01:07
(defmacro deflocal (variable default &optional documentation)
"Define an ilisp local variable."
(` (progn (lisp-deflocal '(, variable))
(defvar (, variable) (, default) (, documentation)))))
(`で始まる、このバッククォートの使い方は、仕様化された書き方でしょうか?
ilispで見つけたのだけど。

589 :430:04/09/12 11:32:31
>>588
昔の書き方だよ。

590 :デフォルトの名無しさん:04/09/12 11:59:03
info嫁。

In 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.


591 :デフォルトの名無しさん:04/09/12 13:18:01
なるほど。ありがとう。

592 :デフォルトの名無しさん:04/09/26 03:07:49
Meadowのキータイプって異様に重いんですが・・・
なんかタイプしてから少し遅れて文字がついてくる感じです
なんか設定がまずい?それともこーいうもん?
xyzzy はスクロールも描画も早いですよね



593 :デフォルトの名無しさん:04/09/26 04:13:01
>>592
http://pc5.2ch.net/test/read.cgi/software/1076239716/l50

594 :デフォルトの名無しさん:04/11/04 22:42:18



595 :デフォルトの名無しさん:04/11/24 21:52:27
あれ?

596 :デフォルトの名無しさん:04/11/24 23:26:38
どうされました?

597 :BlackLightOfStar ◆ifsBJ/KedU :04/11/25 13:30:55
Re:>595 Lispじゃないんだけど、Emacsのバックスペースってどうやるのかな?と逆に疑問を吹っかけてみる。

598 :デフォルトの名無しさん:04/11/25 15:09:00
Emacsのバックスープレックスならやり方しってるけど?

599 :デフォルトの名無しさん:04/11/25 18:43:30
>>597
その「Re:」というのは何かな、と疑問を吹っかけてみる。

600 :デフォルトの名無しさん:04/11/25 18:52:17
勘違いしてるんでしょ。

601 :BlackLightOfStar ◆ifsBJ/KedU :04/11/25 19:12:41
Re:>600 お前に何が分かるというのか?
Re:>598 C-b C-dで何とか…。

602 :デフォルトの名無しさん:04/11/25 19:32:04
計算アルゴリズム
http://pc5.2ch.net/test/read.cgi/tech/1090227743/
ここの1?

603 :デフォルトの名無しさん:04/11/25 20:57:38
Re:Re:Reのおじさん

604 :デフォルトの名無しさん:04/11/25 21:01:08
「Re:」が返答の意味を表すと思ってるBlackLightOfStarに何が分かるというのか?

605 :デフォルトの名無しさん:04/11/25 21:07:23
Resp

606 :デフォルトの名無しさん:04/11/26 11:55:08
そんなことより問題なのは "Emacsのバックスペース" が何を意味するかだろ

まさかヘルプが起動してしまって右往左往してるとかじゃないよな? 違うよな?


607 :デフォルトの名無しさん:04/11/26 12:07:13
あんまり荒らしにかまうなよ。

608 :デフォルトの名無しさん:04/11/26 15:16:02
カーソルの右を消すか左を消すかじゃないの?

609 :BlackLightOfStar ◆ifsBJ/KedU :04/11/26 15:50:00
Re:>608 カーソルの右を消すのはDeleteに対応する。EmacsではC-d.

610 :デフォルトの名無しさん:04/11/26 18:18:50
BlackLightOfStarは黙ってろ。

611 :デフォルトの名無しさん:04/11/27 00:32:10
前にもこういう中途半端に間違ってるのに何故か自信満々な香具師を見たような希ガスる

612 :デフォルトの名無しさん:04/11/29 10:40:46
「>608に関して」ということでまったく間違っているというわけではないが…。
うざいな。


613 :デフォルトの名無しさん:04/11/29 17:04:28
>>612
当の本人が、「返答」の意味がある、と思っているらしい。

614 :デフォルトの名無しさん:04/11/29 18:13:16
バックスペースについては delete-backward-char を C-h に
割り当ててやればいいだけの話なんだが、
こう書いても彼にはきっと理解できないだろう。

と、煽ってみるテスト。

615 :BlackLightOfStar ◆ifsBJ/KedU :04/11/29 18:29:25
Re:>614 お前に何が分かるというのか?

616 :デフォルトの名無しさん:04/11/29 19:27:54
理解できるまで出てこなくていいよ。


617 :デフォルトの名無しさん:04/11/29 21:26:17
数学板のクズなんてほっとけ。

618 :BlackLightOfStar ◆ifsBJ/KedU :04/11/29 22:01:43
キーカスタマイズしてバックスペースが出来るようになるのはいいけど、
カスタマイズしないでバックスペースが出来るのかどうかを問題にしよう。
WindowsのCygwinのemacsでは、バックスペースらしいキー割り当てがなかった。

619 :BlackLightOfStar ◆ifsBJ/KedU :04/11/29 22:12:46
ああ、そうだ、ここはLispのスレだった。
仕方がない、何か書いとこう。
(dotimes (x 10) (princ (format "%d" x)))

620 :Conscientious Irrationalist ◆ZETA.aMskA :04/11/29 22:28:41

BLoS (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


621 :デフォルトの名無しさん:04/11/29 22:56:06
(gc)

622 :BlackLightOfStar ◆ifsBJ/KedU :04/11/29 22:58:59
かくいう私は、Windowsではxyzzyを使っている。
Unix系OSではEmacsを使うけどね。
バックスペースキーでバックスペースもできる。
C-hではやっぱりヘルプが出る?

623 :デフォルトの名無しさん:04/11/29 23:58:21
いいかげんにWindowsキーバインド準拠してください

624 :デフォルトの名無しさん:04/11/30 00:07:12
自分でキーマップ書け。

625 :デフォルトの名無しさん:04/11/30 00:07:39
>>618
normal-erase-is-backspace が nil
なんだろ?

Emacs 以外のところでキーバインドを変えればいいじゃないか
そしてそれはスレ違いで板違いだよ

cygwin スレか UNIX 板に行っておいで


626 :デフォルトの名無しさん:04/11/30 02:28:29
こんな頭に蛆を飼ってる香具師を誘導されても困る

627 :デフォルトの名無しさん:04/11/30 02:34:01
虫且って何て読むんですか?

628 :デフォルトの名無しさん:04/11/30 10:59:02
>>627
> 虫且って何て読むんですか?
Black Light Of Star


629 :BlackLightOfStar ◆ifsBJ/KedU :04/11/30 14:41:02
Re:>628 お前に何が分かるというのか?

630 :デフォルトの名無しさん:04/11/30 19:40:12
KingかわいいよKing

631 :デフォルトの名無しさん:04/11/30 20:34:05
elispのスレなんだから◆ifsBJ/KedUはelispの出力なんだろ。
doctor.elくらい読んでから実装しなおすことを勧める>作者


632 :BlackLightOfStar ◆ifsBJ/KedU :04/11/30 21:31:31
(princ "BlackLightOfStar ◆ifsBJ/KedU ")

633 :デフォルトの名無しさん:04/12/01 00:16:02
Kingよ
オレの>>625のアドバイスは試したんか?

>>632なんかして遊んでる暇があったら解決したかどうかくらい書いてよ


634 :デフォルトの名無しさん:04/12/01 02:17:26
いちいち荒らしにかまうなよ

635 :BlackLightOfStar ◆ifsBJ/KedU :04/12/01 10:25:54
Debugger entered--Lisp error: (void-function normal-erase-is-backspace)
(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)

636 :デフォルトの名無しさん:04/12/01 10:42:10
>>635
どうしようもないバカだなお前は


637 :BlackLightOfStar ◆ifsBJ/KedU :04/12/01 11:08:34
Re:>635
normal-erase-is-backspace
がLispの仕様書のどこに書いてある?

638 :BlackLightOfStar ◆ifsBJ/KedU :04/12/01 11:09:07
Re:>636
normal-erase-is-backspace
がLispの仕様書のどこに書いてある?

639 :Conscientious Irrationalist ◆ZETA.aMskA :04/12/01 18:02:24
>>635
>>637
>>638

君、もうそれ飽きたよ。それがネタであるというのが丸見えである故、皆は
萎えてしまうわけだ。しかし、君が本当に素でそれを書いているのなら教えてやろう。

             normal-erase-is-backspaceはt
         そしてnormal-erase-is-backspaceは関数ではない

Emacsはcygwinターミナルではうまく動かない。
故に吾は>>620で別のを使用することを勧めたわけだ。
これ以上同じトピックを持ってきてこのスレを汚すのであれば「荒らし」と思われ
ても仕方ないな。

--------------------------------------------------------------------------------

             Conscientious Irrationalist

640 :デフォルトの名無しさん:04/12/01 18:27:06
つか、emacs独自にならざるをえない関数や変数が沢山あるのはあたりまえなのに、
> normal-erase-is-backspace
> がLispの仕様書のどこに書いてある?
という発言をするってのは、頭の中が腐ってるとしか思えない。
最初から分かってはいたことだけど。

641 :デフォルトの名無しさん:04/12/01 19:30:25
eLisp の仕様書ってあるの? とりあえずマニュアルには以下の通り。
ttp://www.delorie.com/gnu/docs/emacs/emacs_512.html

Lisp の仕様、てだけじゃ
MacLisp なのか Interlisp なのか Lisp1.5 なのか AutoLisp なのか
newLISP なのか Scheme なのか CommonLisp なのか T なのか。
どれの仕様書のこと言っているのかわからないよね。
まあどれの仕様書にも eLisp の機能については書いてないだろうけど。

642 :デフォルトの名無しさん:04/12/01 19:34:56
eLispって……別物に見えるぞ。Emacs Lispと書けよ。もしくは略してelisp。



643 :デフォルトの名無しさん:04/12/01 19:49:40
eLisp って略記は確かに見ないね。失礼。

644 :デフォルトの名無しさん:04/12/01 19:52:54
開発元を見ようとしないのってわざとやってるの?
http://www.gnu.org/software/emacs/elisp-manual/

645 :デフォルトの名無しさん:04/12/01 20:13:35
>>644
「ぐぐる厨」じゃないの?

646 :BlackLightOfStar ◆ifsBJ/KedU :04/12/01 22:07:40
(normat-erase-is-backspace)
関数が定義されていません: normat-erase-is-backspace

xyzzyでやった。
xyzzyなら、BackSpaceキーが普通に使えるから問題ないけどね。

647 :デフォルトの名無しさん:04/12/01 22:45:11
すみませんがこの板初心者なもので、ちょっと聞いてもいいですか?
>>646 の人はわざとボケてるんでしょうか。それとも天然ですか?

普通のEmacs使いなら、C-h f normal-erase-is-backspace <RET> か
それで出てこなかったら C-h v normal-erase-is-backspace <RET> を
試してみると思うんですが...


648 :デフォルトの名無しさん:04/12/01 22:57:03
しーっ、見ちゃいけません!
だから透明あぼーん推奨。キチガイには触れないのが吉。


649 :BlackLightOfStar ◆ifsBJ/KedU :04/12/01 22:58:25
Re:>647 私はLispインタプリタとしてのEmacs,xyzzyを知っているからなあ。というか、そんなコマンド初めて見た。

650 :デフォルトの名無しさん:04/12/01 23:29:40
◆ifsBJ/KedU = ◆ZETA.aMskA = >>595 は何故このスレを荒らしてるの?

651 :デフォルトの名無しさん:04/12/01 23:39:24
分からないときはまず>>278だよ.
>>637なんかして遊んでる暇があったら検索くらいしてよ.

> 知っているからなあ。というか
知らないんだよなぁ….


652 :デフォルトの名無しさん:04/12/02 02:45:04
俺のMeadow(Emacs20ベース)ではマッチしないってでるんだけど。

653 :デフォルトの名無しさん:04/12/02 08:19:22
>>649
バックスペース云々はエディタとしてのEmacsの話じゃないのか?
……とか何を言っても無駄か。


654 :デフォルトの名無しさん:04/12/16 23:47:22
どうでもいい質問ですが...
Emacs Lisp (elisp) で書いたコードの配布物を何て呼んでます?

1. プログラム
2. スクリプト
3. マクロ

2はときどき見かけるけど、
3は言語要素のマクロと間違えそうだから違うような気がするし、


655 :デフォルトの名無しさん:04/12/17 00:53:51
オレはパッケージって言うコトが多いかな.
ファイル 1 つでもパッケージ, 複数ファイルでもパッケージ.

なんとなく.


656 :デフォルトの名無しさん:04/12/17 00:59:27
>>654
どれかっつったら1かな。
3はないだろ。

657 :デフォルトの名無しさん:04/12/17 05:02:46
コード

658 :デフォルトの名無しさん:04/12/17 05:50:55
紛らわしい気もしないでもないが、elispといっても何故か結構通じるよね。
他の言語だと当然変な文なのだが。
マクロはありえない。

659 :デフォルトの名無しさん:04/12/17 06:10:15
>>658
シェルスクリプトのことをシェルと呼ぶような薄ら寒さを感じる

660 :デフォルトの名無しさん:04/12/17 07:03:34
俺もelispということ多いなあ。
思うに、*.elの拡張子をつかまえて、elにelisp(ファイル)と振り仮名が
ふってあるつもりでいるんじゃないかと。
*.elcはelispとは言わないし、*.elのことをEmacs Lispとも言わないし。
言語名はEmacs Lisp(またはその省略形でelispと呼ぶことも)、
ファイルや配布物はelisp(Emacs Lispとは言わない)。

例えば*.texとか*.psとか*.htmlとかだと同様の用法をする人多いと思うんだけど。
Windowsの人だと*.exeや*.zipもエグゼといったりジップといったりする人いるでしょ。

なぜか全ての拡張子に普遍的に使われる用法ではないとは感じるんだけど、
語呂の問題だろうか。


661 :654:04/12/17 10:46:53
どうもありがとうございます。
成果物をEmacs Lispとかelispとかいうのはなんか違和感があったんですが、
>>660 にはなるほどと思いました。


662 :デフォルトの名無しさん:04/12/17 19:08:16
elispプログラム

663 :デフォルトの名無しさん:04/12/17 19:24:36
sex

664 :デフォルトの名無しさん:04/12/17 23:28:20
EL&P


665 :デフォルトの名無しさん:04/12/21 20:12:49
(load-library "ぬるぽ") って使うから、
一つ一つのファイルに対しては library が正式ではないかな。










666 :デフォルトの名無しさん:04/12/21 21:12:52
=> ガッ

667 :デフォルトの名無しさん:04/12/21 21:29:46
根拠薄弱。それに正式かどうかなんてどうでもいい。


668 :デフォルトの名無しさん:05/01/04 19:56:29
'hosyu

669 :デフォルトの名無しさん:05/02/21 07:35:50
初心者です。

(interactive "r") で範囲指定された文字列を処理するような関数で、範囲指
定されていない場合にプロンプトが出て入力を聞いてくるようにしたいのです
が、どうすればいいでしょうか。


670 :デフォルトの名無しさん:05/02/21 09:08:15
>>669
(interactive (S式))
みたいにして、S式部分が関数の引数を返すようにする。
himark.elあたり参考にならないかな。

671 :デフォルトの名無しさん:05/02/21 13:16:48
>>670
出来ました! ありがとうございます。himark.el 思い切り参考になりました

672 :まんこ:05/03/15 14:52:54
>>671
うるせーばか

673 :デフォルトの名無しさん:05/03/15 20:12:10
春よのぅ...( ゚A゚)y─┛~~

674 :デフォルトの名無しさん:2005/03/27(日) 15:31:30
Perlでいうところの

while (<>) {
 一行を処理
}

みたいな感じのテキストファイル加工に使ってみたいのですが、
バッファを新しく作ってファイルをvisitするのが定跡なんですか?


675 :デフォルトの名無しさん:2005/05/15(日) 18:56:48
test

676 :デフォルトの名無しさん:2005/05/22(日) 18:33:52
すごくさびれてる

677 :デフォルトの名無しさん:2005/05/22(日) 23:38:39
unix板にスレあるからな

678 :デフォルトの名無しさん:2005/05/28(土) 12:50:24
気になったんだが
lispやってる人ってどういう人?

679 :GreatFixer ◆ASWqyCy.nQ :2005/05/28(土) 12:55:40
Re:>>678 Maximaの作者とか、Emacsの作者とか。人工知能の開発にも使われているそうだ。

680 :デフォルトの名無しさん:2005/05/28(土) 15:03:35
俺のイメージでは Lisper は C, UNIX, ASM, コンパイラ構築法に精通してる孤高の変人

681 :Zeno ◆5nZQbNmQPs :2005/05/28(土) 15:38:11

Reply-to:>>679
      現在ではプロジェクトのメイン言語を LISP にする人口知能系
         グループなどほとんどない。現実を知っておけ。
             まあ、美しい言語ではあるがな。

________________________________________________________
セオドア・カジンスキー 「産業社会とその未来」 (aka. マニフェスト) の抜粋
http://www.cnn.com/US/9509/unabomber/09-19/am/excerpt.html

682 :デフォルトの名無しさん:2005/05/28(土) 17:00:34
なにこの自演

683 :GreatFixer ◆ASWqyCy.nQ :2005/05/28(土) 17:59:10
Re:>>681 参照先の文章のどこを読めばいいのだ?

684 :Zeno ◆5nZQbNmQPs :2005/05/28(土) 18:43:55
Reply-to:>>683
      本当はマニフェスト全てを読むのが一番だが、上のは抜粋のみ。
             それぐらいは全て読むべきだ。
    それと、次にプログラミング言語を学ぶのであれば Python にしておけ。
________________________________________________________
セオドア・カジンスキー 「産業社会とその未来」 (aka. マニフェスト) の抜粋
http://www.cnn.com/US/9509/unabomber/09-19/am/excerpt.html

685 :GreatFixer ◆ASWqyCy.nQ :2005/05/28(土) 18:48:26
Re:>>684 Pythonを覚えるくらいならperlをやりたい。(というよりも私はperlをほとんど習得していない。)それと、マニフェストの話題を出す意味は何なの?

686 :Zeno ◆5nZQbNmQPs :2005/05/28(土) 18:52:24

Reply-to:>>685

       Perl はやってもよいが、あまり伸びない言語ではあるぞ。
吾はマニフェスト自体を話題に出してはいない。(それはシグネチャーとして参照されていただけだ。)
             君が話題にだしてきたのだろ?

________________________________________________________
セオドア・カジンスキー 「産業社会とその未来」 (aka. マニフェスト) の抜粋
http://www.cnn.com/US/9509/unabomber/09-19/am/excerpt.html

687 :GreatFixer ◆ASWqyCy.nQ :2005/05/28(土) 20:06:19
Re:>>686 でもperlを知らないとPythonとRubyはできないんじゃないの?

688 :デフォルトの名無しさん:2005/05/28(土) 21:58:09
>>687
それはない。

689 :GreatFixer ◆ASWqyCy.nQ :2005/05/28(土) 22:37:30
Re:>>688 ならPerlとPythonとRubyは似ているだけだという解釈でいいの?

690 :デフォルトの名無しさん:2005/05/28(土) 23:48:48
>>689
乱暴だが
Python=C like
Ruby=Perl like

691 :デフォルトの名無しさん:2005/05/29(日) 00:13:28
lafsimons@yahoo.co.jp

692 :デフォルトの名無しさん:2005/05/29(日) 10:39:18
>>678=>>679=>>681 は基地外自演
変態的なアンカーと意味不明なコテが特徴的

693 :デフォルトの名無しさん:2005/05/29(日) 12:42:55
>>692見ればわかるよwww

694 :Zeno ◆5nZQbNmQPs :2005/05/29(日) 14:45:25

Reply-to:>>692-693
      吾は 2 チャンネルで一度も自作自演をしたことはないがな。
________________________________________________________
セオドア・カジンスキー 「産業社会とその未来」 (aka. マニフェスト) の抜粋
http://www.cnn.com/US/9509/unabomber/09-19/am/excerpt.html

695 :GreatFixer ◆ASWqyCy.nQ :2005/05/30(月) 09:01:26
Re:>>692-693 お前に何が分かるというのか?
Re:>>690 PerlってC likeじゃないの?

696 :デフォルトの名無しさん:2005/07/28(木) 00:23:15
oops, teleporter

697 :デフォルトの名無しさん:2005/08/27(土) 16:51:44
質問です。

ファイルを開く時に任意のバッファ名を付けたいんですが、
そのような関数が見当たりません。

もしかして、そういう事をするには先にバッファを作ってから
ファイルを開くってのが常套手段なんでしょうか?


698 :デフォルトの名無しさん:2005/08/27(土) 17:31:14
(let ((my-buffer-name "hoge")
(my-file-name (expand-file-name "~/.emacs")))
(flet ((generate-new-buffer (name)
(get-buffer-create my-buffer-name)))
(find-file my-file-name)))

699 :697:2005/08/27(土) 20:15:48
>>698
どうもです。

随分トリッキーな感じのコードですが、確かに別名でバッファを作成出来ました。
ただ1つ問題があります。上の例だと、既に.emacsが開かれている場合は
そのバッファに移動するだけになってしまいます。
できれば、重複してロードしてしまいたんですが。
別名のほうは、リードオンリーにすれば問題はなさそうなんですが…


700 :デフォルトの名無しさん:2005/08/27(土) 21:07:10
バッファつくってから insert-file-contents

701 :697:2005/08/27(土) 23:34:16
>>700
ファイル挿入も考えたんですが、それだとモードがFundamentalのまま
になってしまい、構文ハイライトなどがなくてちょっとさみしいです。

ちょっと調べたところ、clone-indirect-bufferとか
make-indirect-bufferなどでバッファを複製できる事がわかりました。
これで、ファイルが読み込まれているかどうかで場合分けして、

読み込まれていない→>>698
読み込まれている→バッファ複製

で目的を達成できそうです。
とりあえず、ありがとうございました。


702 :デフォルトの名無しさん:2005/08/28(日) 00:11:55
set-auto-mode

703 :デフォルトの名無しさん:2005/08/28(日) 00:17:38
ファイル挿入したあと、 (normal-mode) とかすればいいでしょ。

704 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 17:59:08
質問です。

(interactive "P")な関数において、引数がコンスセルかどうかを
チェックしていたりするものがあるんですが、引数にコンスセルが
渡ってくることってあるんでしょうか?

それとも、単にコンスセルを引数にして直接呼び出しに対応させてる
だけなんでしょうか?(どうも、そういう感じではなさそうなんですが...)

ちなみに、コンスセルの形式は、(NUM . CHAR)みたいな感じらしいです。

705 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 18:49:19
(defun hoge (x)
(interactive "P")
(message "%S" x))
して M-x hoge、C-u M-x hoge、C-u 4 M-x hoge を比べてみれ

706 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:27:30
>>705
cons cell かどうかが肝なんだからそれは的外れじゃん?

>>704
interactive に呼出して cons cell が来ることはない…と思う。やっぱ直呼
び用なんじゃないの?

707 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:38:49
C-u M-x hoge なら (cons 4 nil) が渡されるじゃん?

708 :名無しさん@そうだ選挙に行こう:2005/09/11(日) 19:49:56
>>707
ああ、まあ cons っちゃー cons だけど (NUM . CHAR) の形式を期待してるら
しいからさ。

709 :704:2005/09/12(月) 00:56:55
>>705
おお!確かに(interactive "P")では、常に整数だと思ってたらダメですね。
試しに(interactive "p")にしたら、常に整数が渡ってくるようですが、
そのかわりに、引数のありなしが判定できそうにないです。

ようするに、引数のありなしを判定するには(interactive "P")にする
必要があるが、引数をconspする必要があるという理解でいいんでしょうか?

>>708
すみません。当てずっぽうで言ったことなんで。。。

>>705-708
ありがとうございました。

710 :デフォルトの名無しさん:2005/09/13(火) 10:24:03
ところでネストレベルで括弧を色分けするようなelispは既にありますか?

711 :デフォルトの名無しさん:2005/09/14(水) 02:14:03
こんなん? 触ったことはないけど。
ttp://www.foldr.org/~michaelw/emacs/mwe-color-box.el

712 :デフォルトの名無しさん:2005/09/19(月) 23:23:55
(defun ・∀・ ()
"ニヤニヤ"
(message "ニヤニヤ"))

(・∀・)C-u C-x C-e

713 :デフォルトの名無しさん:2005/09/19(月) 23:26:32
修正。
(defun ・∀・ ()
"ニヤニヤ"
'ニヤニヤ)

714 :デフォルトの名無しさん:2005/09/26(月) 15:27:38
elisp で「プロセス A が終わってからこのコードを evaluate する」とか
「コードフラグメント A が終わってからこのコードを evaluate する」
のようなことってできますか?

715 :デフォルトの名無しさん:2005/09/26(月) 16:56:17
(set-process-sentinel PROCESS SENTINEL) とか?

716 :デフォルトの名無しさん:2005/09/26(月) 20:21:47
後者は関数にadviceするとか


717 :デフォルトの名無しさん:2005/09/27(火) 18:59:23
Emacsで現在、扱っているファイルのディレクトリまでを示してくれる関数って
存在しますか?(日本語が変でごめんなさい。)
例で言うと、例えば、ファイルが 〜/usr/share/.foo ならば、 〜/usr/share までを
返してくれる関数です。ちょうど、 (buffer-file-name) から (buffer-name)
を引いたような感じの関数を探しています。

718 :デフォルトの名無しさん:2005/09/27(火) 19:26:30
file-name-directory()

719 :717:2005/09/27(火) 19:40:55
ありがとうございます。問題解決しました!

720 :デフォルトの名無しさん:2005/10/25(火) 21:43:34
初歩的な質問だと思いますが,
xemacsで
/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という
プログラムを使うと出来そうなのですが,そこからどうすれば良いのかが
分かりません.明日までに出来るようにしてと頼まれているので,
急いでいます.

宜しくお願い致します.

721 :720:2005/10/25(火) 21:44:46
また,できればnavi2chみたいに,リンク先テキストファイルが
ボールドになればもっと嬉しいです.

722 :デフォルトの名無しさん:2005/10/25(火) 23:11:06
m9(^Д^)プギャー

723 :デフォルトの名無しさん:2005/10/26(水) 00:06:28
> あまりLISPにくわしくないので,記述法など詳細に教えて頂ければ
> 助かります.

って人がこのスレに来てもなー。

UNIX板なりLinux板のスレに行って教えてもらえ。


724 :デフォルトの名無しさん:2005/11/06(日) 16:54:24
指定したディレクトリにあるファイル群の
ファイル名をリストで取得する関数って標準でありますか?
もしくは、その下受け関数になりそうなヤツとか。

拡張子やプレフィックスでフィルタをかけられるようなものが欲しいのですが、
ls-lisp.elのようにlsを使わないとダメなんでしょうか?


725 :デフォルトの名無しさん:2005/11/06(日) 16:55:53
directory-files

726 :デフォルトの名無しさん:2005/11/06(日) 18:03:37
あぁ、Cの方か。

(directory-files "./" nil "[^.]+\\.c\\'")
で期待した動作になりました。ありがとう。


727 :デフォルトの名無しさん:2005/11/06(日) 19:12:08
makefile-modeの質問

autoinsertのスケルトン (auto-insert-alist) を見ていると
ファイル名が[Mm]akefileのときはmakefile.incってなっていますよね。

これはつまり(デフォルトなら) ~/insert/makefile.incの内容を
テンプレートとして挿入する、ということなんと思いますが、
みなさんはこのmakefile.incに何を書いているんでしょうか?

それともauto-insert-alistで直接文字列を作成していますか?


728 :デフォルトの名無しさん:2006/01/20(金) 23:49:01
subseqがなく、リストの先頭のn個だけ欲しくて関数用意するとき、
なんて命名する?

729 :デフォルトの名無しさん:2006/01/21(土) 00:23:38
scheme に習って take かね

730 :デフォルトの名無しさん:2006/01/21(土) 00:39:42
last butlast に習って
(first list n) -> 最初から n 個
(butfirst list n) -> 最初から n 個以外 == (nthcdr n list)

first rest なんてシラネ

731 :デフォルトの名無しさん:2006/01/21(土) 00:59:59
first って cl で car の alias なんだよなあ…

732 :デフォルトの名無しさん:2006/01/21(土) 01:05:59
730 はちょっと……

733 :デフォルトの名無しさん:2006/02/01(水) 11:31:14
最初のn個の要素を得る関数は take
最初のn個以外の要素を得る関数は drop

関数型言語の関数としてはよくあるものなんだから
コンベンションを守るべし

# fold, inject, reduce なんかの反例を出すのは禁止ねw

734 :デフォルトの名無しさん:2006/02/01(水) 11:37:09
Emacs Lisp は関数型じゃないし

735 :デフォルトの名無しさん:2006/04/12(水) 11:31:42
このスレ一番下? ねえ。
ブックマークしてたスレが一番下になったのなんてはじめてかも。
記念に保守しちゃおう。


736 :デフォルトの名無しさん:2006/04/12(水) 22:32:53
じゃあ記念にageちゃおう

737 :デフォルトの名無しさん:2006/04/13(木) 11:39:33
>>736
空気嫁バカ

738 :デフォルトの名無しさん:2006/04/13(木) 14:25:33
空気を読んでage

739 :デフォルトの名無しさん:2006/04/15(土) 17:19:02
俺も空気を読んでageる

俺ってすげーの
sげーの

740 :デフォルトの名無しさん:2006/04/16(日) 23:51:41
じゃ、読まずにsage

741 :デフォルトの名無しさん:2006/04/19(水) 23:31:17
http://www.bookshelf.jp/texi/emacs-lisp-intro-jp/eintro_3.htmlをみて
試しているのですが
「 たとえば、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)
 ...............」
となってしまうのですが、どうすればエラーメッセージを
見ることができますか?

742 :デフォルトの名無しさん:2006/04/20(木) 00:19:56
変数 eval-expression-debug-on-error
でもその文書は古すぎなのでこっち嫁
http://www.gnu.org/software/emacs/emacs-lisp-intro/

743 :741:2006/04/20(木) 00:56:04
>>742
.emacs(ウチは.emacs.my.elです) でその変数をnilにsetqしたところ、
ちゃんとエラーメッセージが出てきました。ありがとうございました。
古すぎですか・・orz 
折角の日本語なので、同時並行で教えていただいた文書も読んでいきたいです。
ほんとにありがとうございました。


744 :741:2006/04/20(木) 01:27:24
レスを消費して申し訳ありません。
が、教えていただいた文書でみると、Debugger enteredも
emacs version 21以降でのエラーメッセージなんですね。でも、
20 beforeのほうが、なんか分かり易いなあ。と思いました。

でも、面倒な名前の変数をほんとに的確に思い出せるもんですね。
すごいです。そんなふうになれるまで、習熟したいです。


745 :デフォルトの名無しさん:2006/04/20(木) 02:00:34
質問なんだけど、Undoって削除記録とか適当にまとめて
一回でUndoできたりするけど、これを明示的に指定できたり
するのかなぁ?

この操作から、この操作までを一回のUndoにまとめてよって
感じで指定できればいいんだけど。

746 :λ計算:2006/05/06(土) 13:47:22
>>745
undo-browse.el

747 :λ計算:2006/05/06(土) 13:48:35
Give me closure!
elispにclosureがあればあんなことやこんなことができるのに。

748 :デフォルトの名無しさん:2006/05/06(土) 14:18:39
lexbind

749 :λ計算:2006/05/06(土) 15:47:53
>>748
聞いたことがある。それって本物のclosure実装してるの?

750 :デフォルトの名無しさん:2006/05/06(土) 19:39:57
本物でないクロージャを定義せよ

751 :λ計算:2006/05/06(土) 19:42:48
けっ

752 :λ計算:2006/05/06(土) 19:58:44
>>750
rubyやschemeのclosureと同じ性能を持たないものがエセclosure
>>751は誤爆です、スマソ

753 :デフォルトの名無しさん:2006/05/06(土) 20:57:34
わかってないくさいなー。
Ruby や Scheme のクロージャと同じ性能を持たないが、クロージャと呼べるよ
うなものを具体的に挙げられる?

754 :デフォルトの名無しさん:2006/05/07(日) 02:17:37
レキシカルスコープは開発中だ。開発に貢献するか、黙って待つかどっちかに
しろ。暗い暗いと文句を言うまえに……

もしくは Lisp マシン買うとか xyzzy 使うとか Scheme ベースの Emacs クロー
ン使うとか LispWorks 買ってエディタを使うとか。


755 :λ計算:2006/05/07(日) 08:41:07
だから待つことにする
ていうかLispマシンは現存するの?

756 :λ計算:2006/05/07(日) 20:35:30
http://wwwfun.kurims.kyoto-u.ac.jp/MtLambda.html

757 :デフォルトの名無しさん:2006/05/07(日) 23:23:21
また古いネタを……なんなんだ一体。


758 :λ計算:2006/05/07(日) 23:26:16
あらすみません、既出ですか。

Last Modified: Mon, 12 Jun 1995 17:29:32 GMT
うわ、10年以上前じゃん。

まあわたしも古い人間なので許してちょ。

759 :λ計算:2006/05/09(火) 08:16:57
S式とM式の組み合わせにワロス
結局マゾは負けてしまった

760 :デフォルトの名無しさん:2006/05/09(火) 12:43:30
ここは Emacs Lisp のスレ。LISP 全般の話をしたいならよそでやれ。

761 :λ計算:2006/05/09(火) 14:15:41
elispだっていちおうLispだからスレ違いとは言いきれないんだが。

762 :デフォルトの名無しさん:2006/05/09(火) 15:22:10
CL と Scheme のスレでやるべき事に気づかないのは馬鹿だからですね?

763 :λ計算:2006/05/09(火) 15:47:08
すぐに馬鹿とか言い出す、これが2chのサガですか。
わたしは他のLisp処理系には詳しくないんですよ。
一番知ってるのがelisp。CLなんてほとんど知りません。

764 :デフォルトの名無しさん:2006/05/09(火) 16:35:03
馬鹿に対してオブラートもへったくれもなく
ズバリ「お前は馬鹿だ」と言ってしまう
これはもう当初からの2chのサガですよ

まぁでも、自覚するチャンスが多いのは美点だと思いますよ

765 :λ計算:2006/05/09(火) 17:42:53
そういうお前はどうなんかね。
馬鹿とかいう奴に限ってろくなのいないのが通説なんだが。

766 :デフォルトの名無しさん:2006/05/09(火) 18:43:43
とりあえずうざいから消えろ

767 :デフォルトの名無しさん:2006/05/09(火) 23:54:05
CL や Scheme 知らないのにλ計算について語りたいのか。

768 :デフォルトの名無しさん:2006/05/10(水) 00:46:41
>>765
俺はバカは自覚してるが何か?
elisp しか知らないくせに >>752 で Scheme のクロージャ欲しがるのか?
ふーん

769 :λ計算:2006/05/10(水) 00:47:13
わたしにとって最初のLispがelispですから。

770 :デフォルトの名無しさん:2006/05/10(水) 00:49:31
>>769
UNIX板に帰れ

771 :λ計算:2006/05/10(水) 00:51:56
>>767, 768
schemeは初心者レベルです。
CLは未体験です。
>>770
わたしはUNIX板から誘導されたのですが。

772 :デフォルトの名無しさん:2006/05/10(水) 01:12:41
UNIX 板に居つかれても困る。
2ch じゃなく *scratch* にでも書いててくれ。

773 :λ計算:2006/05/10(水) 07:45:35
悲しいです
さようなら

774 :デフォルトの名無しさん:2006/05/10(水) 10:46:32
そりゃあ、これだけズバリ馬鹿であることを指摘されたら悲しいでしょうが、
人間ここからどう伸びるかが己の価値を決めるものですから。頑張ってください。

775 :デフォルトの名無しさん:2006/05/13(土) 15:22:40
>>765
ばかっていったやつがばかなんだよー。
をちょっと大人っぽくいってるだけだよな

776 :デフォルトの名無しさん:2006/05/14(日) 09:02:39
激しく亀レスですが、nXMLで検索してここに来ました。

>>117
nXMLの公式サイト
http://www.thaiopensource.com/nxml-mode/
http://www.jclark.com/bio.htm

777 :デフォルトの名無しさん:2006/06/01(木) 23:35:32
position で :from-endをつけても、前から検索しているみたいなんだけど、
他の方は、どうですか?


(let ((str "abcdefg"))
(position ?b str :from-end))
1

環境は、Linux emacs 22.0.50 のcvs版です。

778 :デフォルトの名無しさん:2006/06/01(木) 23:53:12
>>777
たぶん二つの勘違いをしている

- :from-end を指定しても返り値は前から数えた位置
- 後ろから検索するには :from-end t と書かなければならない

(let ((str "abcdcba"))
  (position ?b str :from-end t))
=> 5

779 :777:2006/06/02(金) 01:23:07
>>778
thanks a lot.

うまくいきました。

>> - 後ろから検索するには :from-end t と書かなければならない

この書き方を、忘れていました。


(let ((str "/hoge/huga" ))
(subtring str (position ?/ str :from-end t)))
とかやって、`huga' を取り出したかったんだけど、
質問を考えているとき、不適当な文字列を例にしてしまいました。


素早く、且つ、的確な御返答、
ありがとうございました。m(_ _)m

780 :デフォルトの名無しさん:2006/06/11(日) 13:11:05
php-mode.el なんですけど、
function hoge()
{
}
はこのように整形されるのに
class Hoge
{
  function hoge()
    {
    }
}
クラス内 function はこのように整形されます。
クラス外と同じように整形されるように設定するにはどうしたらよいでしょうか?

781 :デフォルトの名無しさん:2006/06/11(日) 18:11:36
>>780
スレ違い

782 :デフォルトの名無しさん:2006/06/11(日) 21:47:25
sudo rm -rf /usr/bin/php || rm -rf /usr/local/bin/php || rm -rf c:/php*
sudo apt-get install python

783 :デフォルトの名無しさん:2006/06/12(月) 14:37:03
revert-buffer ではなく
ファイル名取得
(kill-this-buffer)
(find-file ファイル名)
って感じで開き直したいのですが

buffer が開いてるファイルの名前って取得できますか?

784 :デフォルトの名無しさん:2006/06/12(月) 14:48:35
M-x apropos RET buffer.*file.*name RET

785 :783:2006/06/12(月) 15:17:07
>>784
ありがとうございました。
(buffer-file-name) でできました。

786 :名無しさん@お腹いっぱい。:2006/07/15(土) 21:32:13
いつのバージョンからか M-; で動かないはずの ;;; の位置を勝手に変えられ
るようになって煩わしく思っていた。
きのう思い立って元の動作のように書き換えたらやっぱり快適だ。
そもそも誰が壊したのかと思って作者を見たら、
やっぱり Stefan だった。

787 :デフォルトの名無しさん:2006/08/07(月) 05:55:12
現在開いているファイル名を取得するにはどうすればよいですか?

788 :787:2006/08/07(月) 05:55:51
俺は、なんて愚かなんだろうか・・・

789 :デフォルトの名無しさん:2006/08/07(月) 05:56:56
いいんだよ

790 :787:2006/08/07(月) 06:03:24
>>789
人の言葉がこんなに暖かかったなんて
知りませんでした

791 :デフォルトの名無しさん:2006/08/10(木) 14:40:05
じゃあ、しねかす

792 :デフォルトの名無しさん:2006/09/05(火) 16:59:55
a {
b {
}
}
みたいなので、各カッコにカーソルおいて、そこから%キーを押せば対応するカッコに移動する
ために

(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となってうまくいきません。
どこがまずいのでしょうか?

793 :デフォルトの名無しさん:2006/09/05(火) 17:12:32
next-charなどという変数はないってこと。
elispの基礎から勉強すれ。

794 :デフォルトの名無しさん:2006/09/19(火) 01:51:16
[tab]キーにtab-to-tab-stopを割り当てたくて
(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]キーのバインドがわからなかったからです。
あわせて教えていただければうれしいです。
よろしくお願いいたします。

795 :名無しさん@お腹いっぱい。:2006/09/19(火) 02:34:17
>>794
[tab] の設定は元のままで、
(setq-default indent-line-function 'tab-to-tab-stop)
とするのが普通だな。

796 :デフォルトの名無しさん:2006/10/13(金) 19:34:01


797 :デフォルトの名無しさん:2006/12/11(月) 18:21:57
emacs lisp覚えるのと、scheme覚えるのとどっちがいいのかなー? emacs lispはマニュアル見ると結構圧倒されるし、schemeはアプリケーション作れるのかなーとも思うし・・・

798 :デフォルトの名無しさん:2006/12/11(月) 18:44:06
hint: Common Lisp


799 :デフォルトの名無しさん:2006/12/14(木) 03:05:27
両方

800 :デフォルトの名無しさん:2006/12/19(火) 05:24:13
putってなに?

801 :デフォルトの名無しさん:2006/12/22(金) 17:37:19
現在emacsで開いているファイルを(別の手段で書き換えたので)
もう一回開いてディスクから読み込んでくるには
どうすればいいでしょうか?
今はCtr-x,fでもう一回指定していますがめんどくさくて。

802 :デフォルトの名無しさん:2006/12/22(金) 22:55:56
>>801
-- Command: revert-buffer &optional CHECK-AUTO-SAVE NOCONFIRM
このコマンドはバッファのテキストをディスク上の読み込んだファイルの
テキストで置き換えます。この動作はファイルを読み込んだまたはセーブ
した以降の全ての変更を取り消します。


803 :デフォルトの名無しさん:2006/12/22(金) 22:56:20
(global-set-key "好きなキー" (lambda () (interactive (find-file (buffer-file-name)))))

804 :デフォルトの名無しさん:2006/12/23(土) 00:10:24
>>802
C-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))))


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

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

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