トップページ⇒tech
1001コメント352KB

Emacs Lisp 2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
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/
0153デフォルトの名無しさんNGNG
(´-`).。o(…合体 とか 体 って訳すんじゃないかな…)
0154デフォルトの名無しさんNGNG
>>149
> 方法も考えられるね。そうすれば、わざわざelファイルを覗く
> 必要もなくなるし。いま、elcファイルだけを配るLinux
> ディストリビューションってあるよね?
昔、debianを使っていたのですが、たしか、elファイルとelcファイル
は別パッケージだったような気がします。今はどうなのだろう?

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

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

>> 151
> (´-`).。o(…cons とか cdr とか、どうやって訳すんだろう…)
英語でもなんじゃーこりゃー!的な、もうすでに意味がとれない単語が
沢山あるのは承知しています。Cobolでの実験もしっているつもりです。
触ったことないけど。
0155デフォルトの名無しさんNGNG
NullPointerException
空指標例外
0156デフォルトの名無しさんNGNG
言葉が英語から日本語への翻訳という枠組みからでてくるという思考を一度、
はずしてみたらどうだろう?
ただ実質的に「NullPointerException」は、プログラミングの世界では「日本語」と
言ってもいい存在に「現在は」なっているということは分かります。

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

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

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

>>156
> これが名前としてふさわしいという意味ではないです。もっとよさそうなのがあるでしょう。
略して「カラシ」とか。
0158デフォルトの名無しさんNGNG
NullPointerException
ぬるぽ
0159デフォルトの名無しさんNGNG
# なんかすごく伸びてるが

>>136
special form に対しても defalias出来るんだ、
と当然の事に感心してしまった。
0160デフォルトの名無しさんNGNG
国際語がマルチバイトな言語だったり、コンピュータの発達した国が
そーいう圏内だったらどうなってたんだろう。
0161デフォルトの名無しさんNGNG
<ヽ`∀´> コンピュータの起源はウリナラニダ。
ソースコードはハングルで書くニダ。とか?
0162デフォルトの名無しさんNGNG
ウリナラにLisperっているの?
0163デフォルトの名無しさんNGNG
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くらい居スニダ
0164デフォルトの名無しさんNGNG
なんか、すんごいのびてると思ったら、英語を異常なほど嫌ってる基地外が暴れてるだけかよ
0165デフォルトの名無しさんNGNG
基地外というほどではないと思うが、
実際英語以外の言語で実用的なプログラミングは
あまり行なわれていないな。
日本語の場合は文字コードがまるで違うので別の問題があるが、
独仏のプログラマなんかはどんな感じなんだろ。
独語の関数とか、やはりキモい感じがするのかな。
0166デフォルトの名無しさんNGNG
視点が興味深いので貼ってみます。

----

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

> * コンピュータ技術は本質的にアングロサクソン文化の
> 継承物であるため、基本的にその中心言語は英語となる。
0167デフォルトの名無しさんNGNG
こんなののどこが興味深いんだか……。
そろそろスレ違いも飽きたので、これ以上やるならどこかにスレ立ててやってくれ。
0168デフォルトの名無しさんNGNG
MIND とか AppleScript とか知らんのけ?
0169デフォルトの名無しさんNGNG


  ス  レ  違  い  は  他  板  へ


関連リンク: http://life.2ch.net/
0170デフォルトの名無しさんNGNG
蒸し返すようで悪いのだがC-b, C-fが

C-u 後ろ
C-m 前

なんてキーバインドだったら絶対にemacsなんて使わないからな。
0171デフォルトの名無しさんNGNG
>>170
キーの並び的に C-b, C-f より自然に見えるけどな
0172デフォルトの名無しさんNGNG
C-mが改行に準じる動作以外に割り当てられるのはさすがにいやすぎかと。
0173デフォルトの名無しさんNGNG
>>172
それは Emacs や readline がそうなっているのに慣れたからだと
0174デフォルトの名無しさんNGNG
はあ? Emacsとreadlineだけしかものを知らん奴というのも珍しいな。

0175デフォルトの名無しさんNGNG
僕は矢印キーしか使わないのでNP
0176デフォルトの名無しさんNGNG
>>174
知らないけれど他にどんなのがあるの?
0177デフォルトの名無しさんNGNG
MS-Winのメモ帳とかedlinとかWordstar系とかviとか。
TECOもそうかも。
0178デフォルトの名無しさんNGNG
N-88 BASIC
Ok
0179名無しさん@EmacsNGNG
メモ帳がC-mで改行できるのしらなかた。おしえてくれたエロい人アリガトウ
0180デフォルトの名無しさんNGNG
>>179 制御文字コードを規定したISO規格で決まっていたでしょう?
Emacsのキーバインドだってそれにそったものだよね。
だから何らかの形の日本語化が行われるとしても、規格にそむいた独自路線を
走ることはないでしょう。
0181デフォルトの名無しさんNGNG
>>180
そういや UNIX 系 OS では改行が ^M って表示されるな
Windows 上の C-M はそれに追随したものだと思っていたのだが
ISO 規格だったのか…

ところで Emacs は ^H をヘルプにして潰してるけど何でよ?
0182デフォルトの名無しさんNGNG
knee-jerk reactionでは、"H"elpから?
0183デフォルトの名無しさんNGNG
Emacs は UNIX 生まれじゃないしな
0184デフォルトの名無しさんNGNG
UNIXでの改行は LF(^J) だよ。
ここにいるやつの程度が知れるな。
0185デフォルトの名無しさんNGNG
悪い、間違えた。
http://pc.2ch.net/test/read.cgi/prog/1069868102/
このスレと勘違いして煽り入れて書いてしまった。スマソw
0186デフォルトの名無しさんNGNG
>>184
画面出力の改行のことではなくキー入力の改行の話
0187デフォルトの名無しさんNGNG
elispといえば、guile-emacsってどうなの? 既存のelispプログラムを実行できる
くらいの互換性は確保しているの?
RMSもなんだか、現行のEmacs Lispを大幅に変更する気が本当にあるのかなという
気がする。だいたいschemeに変更したからって得られるものは何よ?
現在のEmacs Lispを若干補正するくらいで、どうにかなるのじゃないの?
とりあえず、packageの導入。Lexical scoping あたりかな?
0188デフォルトの名無しさんNGNG
先生!。Scheme君で独自拡張路線を走るよりも、どうせならMacLisp系列ということで
Common Lisp君を見習ってしまった方がよいと思います。もう遅いのでつか?
0189デフォルトの名無しさんNGNG
だれがRMSを説得するかという問題。
0190デフォルトの名無しさんNGNG
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 をサポートする *ことになっている* のは技術的理
由からではないのです。
0191デフォルトの名無しさんNGNG
君の〜、行く道は〜、果てしなく遠い〜...
というguile-emacsの進化とは別問題として、Emacs Lispの進化は続くでしょうね...
とりあえず、packageシステム入れろ矢ゴラッァ! 互換性とるのなんか簡単だろ!
パッケージ書くのが苦痛なんだよ!

あっ、俺がやればいいのか...
0192デフォルトの名無しさんNGNG
elisp packageシステム開発する -> emacs開発チームへ相談 -> RMSに相談 -> >>189
0193デフォルトの名無しさんNGNG
gccの移行はうまくやったよな。あれは関係者はそうとう慎重に事を運んだって噂だね。
0194デフォルトの名無しさんNGNG
つまりRMSがEmacs改良のボトルネックになってるのか?
0195デフォルトの名無しさんNGNG
RMSクラスだと「そういうことも全て考えた上で判断している」可能性も
否定できないので、難しい。
0196デフォルトの名無しさんNGNG
>> 189
> だれがRMSを説得するかという問題。
竹内郁雄先生になんて、お願いできないの? お友達同士でしょ?
0197デフォルトの名無しさんNGNG
emacsでシェルを起動するとdos窓がタスクバーに表示されないのは
どういう仕掛けなん?
0198デフォルトの名無しさんNGNG
良く知らないで書いているのでアレですが、XEmacs ではダメなんですか?
Who Wrote にも RMS は入ってないし。
0199デフォルトの名無しさんNGNG
RMS=DQN
0200ヽ(´ー`)ノNGNG
しばらくしたら temp-buffer を勝手に閉じてくれる lisp があった気が
するんだけど、どないしても探せないのですよ。誰か知らね?
0201デフォルトの名無しさんNGNG
どうやって temp-bufferかそうでないか判断するの?
with-temp-buffer の事じゃないよね?
0202ヽ(´ー`)ノNGNG
>>201
レスどもー。

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

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

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

0203デフォルトの名無しさんNGNG
>>202
http://www.geocities.co.jp/SiliconValley-Oakland/7673/
ここの lcomp.el は?
自分は自作コード使ってるけど(ヘボいが自作なので)。
0204ヽ(´ー`)ノNGNG
>>203
あ、それです、それです。ありがとう。
0205デフォルトの名無しさんNGNG
ひまつぶしに、バイトコードコンパイラをイジくろうと思うんだけど、
バイトコードの定義って"(elisp)Disassembly"で少し紹介されているだけで、
正確な定義ってbytecomp.elを読むしかないのかな?
GNU Emacs と XEmacs で非互換のバイトコードもあるよね?
0206デフォルトの名無しさんNGNG
んなやる気のないやつにイジられてもね。
まあコンパイラよりは先にVMの実装読んだ方が早いよ。
0207デフォルトの名無しさんNGNG
>>206
>まあコンパイラよりは先にVMの実装読んだ方が早いよ。
src/bytecode.cをすこし読んでみたんだけど、これが2千行以下で
このくらいなら遊びで自作VMを乗っけてみるのもオツかなと
思いました。いやドラゴンブックを読んでいるもんで。

バイトコンパラは何か改良の余地はあるのでしょうか?
目標があったほうが弄りがいもあるでしょう?
0208デフォルトの名無しさんNGNG
あのVMはいくらでも改良できるから、適当なCPU上でJITで
動かせる様にしたりすると大勢の人間に喜ばれるかもね。
コンパイラの改造としてはレキシカルスコープにしてみたりとか。
RMSは怒るかもしれないケドさ。
関係ねえもんな。
0209デフォルトの名無しさんNGNG
レキシカルスコープになったら動かない自作のコード沢山ありそう...
0210デフォルトの名無しさんNGNG
>>208
> あのVMはいくらでも改良できるから、適当なCPU上でJITで
> 動かせる様にしたりすると大勢の人間に喜ばれるかもね。
ドラゴンブックの範囲を超えるな...だから面白いのか...

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

> RMSは怒るかもしれないケドさ。
> 関係ねえもんな。
わらた。
0211デフォルトの名無しさんNGNG
elispにCommonLisp風パッケージを追加するのは、intern類にadviseすれば
簡単にできると思ってやってみようと思ったけど、read, load, などCで
書かれたprimitive群は、Cで書かれたinternを直接呼んでいるようなので、ダメですね...
   elisp: (intern name &optional obarray) => symbol
common-lisp: (intern name &optional package) => symbol, status
と引数までそろっているのに...残念。
0212デフォルトの名無しさんNGNG
こんなのはどうなの
http://www.nocrew.org/cgi-bin/cvsweb/cvsweb.cgi/emacs-cl/cl-packages.el
0213デフォルトの名無しさんNGNG
>>211
Vobarrayをコピって差し換えればいけるかも。
面倒だけど。
(let* ((obarray (make-obarray てきとー)))
(read ...)
(exportするシンボルをVobarrayに書き書き))
みたいな?
0214デフォルトの名無しさんNGNG
あのぅ…… すみません。
「ドラゴンブック」って何でしょうか? ググってみても「富士見ドラゴンブック」
くらいしか出てきません。あきらかに無関係ですよね、コレは。
0215214NGNG
たぶんコレの事ですね。探す努力が欠けてました。本当にすみません。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4781905854/
0216デフォルトの名無しさんNGNG
日本語版のカバーにドラゴンはすんでいるのかな?
0217デフォルトの名無しさんNGNG
質問です。
大学のPCでemacsを使っていると、「#include」や「int」とか「printf」とか打つと文字色が変わるのですが、
自分の家のvine linuxに付いていたemacsを使うと色が変わりません。そうやったら変わるのでしょうか?
もし設定等ありましたらお教えください。宜しくお願い致します。
0218デフォルトの名無しさんNGNG
(global-font-lock-mode t)
0219デフォルトの名無しさんNGNG
>>217 微妙にスレ違い。
ここはEmacsの設定スレではありません。テンプレにも書いてあるでしょ。

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

次からはLinux板(になければUNIX板)のEmacsスレへどうぞ。
Linuxの各ディストリビューション、とりわけVineLinuxでは
他の環境のユーザが知らない独自設定がされている場合が多いので、
Linuxでの話はLinux板で聞く方がよいです。
0220デフォルトの名無しさんNGNG
>>291
 そうでしたか。どうもすみませんでした。
そして答えていただきありがとうございました!
0221デフォルトの名無しさんNGNG
CLパッケージで定義されているlexical-letについて質問です。
(lexical-let bindings body)において、bindings中の変数をgensymで作成した
uninterned symbolで置き換えることによって、lexical-scopingを実現している
んだろうなと思ったのですが、こんどはそれを参照する側のbody中の各フォーム
で元の変数への参照を、先のgensymで作成したシンボルに置き換えなくては
なりませんね? これって異常に大変そうなのですが、ほんとにそうやっているの
かな?
0222デフォルトの名無しさんNGNG
そんなことしてないんじゃないの?
シンボル名の完全な置き換えなんてマクロを全部展開した上でないと無理だし、
コンパイル時に行わないと時間掛かりすぎるし。
0223デフォルトの名無しさんNGNG
でも、こんな感じなんだよね...
(macroexpand '(lexical-let ((a 10)) (+ a a)))
(let ((--a--95409 10)) (+ (symbol-value (quote --a--95409)) (symbol-value (quote --a--95409))))
0224デフォルトの名無しさんNGNG
ほんとにそうしてるよ。
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--))
みたいになる。
0225デフォルトの名無しさんNGNG
コンパイルしないと遅いんだろうね、たぶん。
CLパッケージのマニュアルにも、定義している関数外にクロージャを
持ち出さない限り、普通のLetを使うべしみたいなことが書いてあったと思う。
0226デフォルトの名無しさんNGNG
Emacs LispでCLの範囲指定コメント#|〜|#って作れないでしょうか?
0227デフォルトの名無しさんNGNG
>>226 Emacs LispにはCLにあるreadtableという仕組みがたしかなかったと思うので
実現するには、Cレベルでいじる必要があるのではないでしょうか。
ところで、#|〜|#ってどんな場面で重宝しますか?
0228226NGNG
>>227 レスどうも.無理っぽいですか…
.emacs内の一連の動作を一時的に無効にする時にあると便利だと思いますけど.
C++で言えば;が//,#|〜|#が/*〜*/にあたります.(一応)
0229デフォルトの名無しさんNGNG
(ignore "〜") とか。
0230デフォルトの名無しさんNGNG
(when nil 〜) とか。
0231デフォルトの名無しさんNGNG
(quote 〜)
0232デフォルトの名無しさんNGNG
ブロックの最後に適用したいときにダメじゃん
0233デフォルトの名無しさんNGNG
贅沢言うな。
0234デフォルトの名無しさんNGNG
prog1
0235デフォルトの名無しさんNGNG
>>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 ...)
などコードの解釈で、無効にするやりかたは、色がコメント色にならず、
意味が分かりづらいのでほとんど使いません。
0236デフォルトの名無しさんNGNG
リージョンをコメントアウトするコマンドとかありそうだ
0237デフォルトの名無しさんNGNG
あるとしたら実質#|〜|#と同じ機能だよね。
調べたらありますた。comment-region, uncomment-region
|(or (test1-p foo)
| -!-(test2-p bar)-!-)
-!-と-!-がregionとしてこの状態で、M-x comment-regionすると、
|(or (test1-p foo)
| ;; (test2-p bar)
| )
になりました。これであしたはホームランだねパパ。ありがとう。
0238デフォルトの名無しさんNGNG
キモチワルイね。
基本的なとこはCommonLispに習うべきだと思うなあ・・
#|〜|#はネストもできるんだぜ?
0239デフォルトの名無しさんNGNG
所詮エディタに付属の言語
0240デフォルトの名無しさんNGNG
>>238
>基本的なとこはCommonLispに習うべきだと思うなあ・・
これは賛成。

>#|〜|#はネストもできるんだぜ?
現状での解決策は、
;; ;;(foo)
;; ;;(bar)
;; (buz)
というように行を分けて書くしかないのかな?
0241デフォルトの名無しさんNGNG
;; ;;(foo)
;; ;;(bar)
;; (buz)
このやり方で、コメントを外すときとコメントにするときは、
C-x r d (delete-rectangle)とC-x r t (string-rectangle)を私は使用しています。
みなさんはどうですか?
0242デフォルトの名無しさんNGNG
>>241
おなじく。C-x r k の方をよく使うけど。
kill-rectangle-saveが欲しい……
0243デフォルトの名無しさんNGNG
>>241
C-u M-x comment-region
0244デフォルトの名無しさんNGNG
advice.elのドキュメントって長いな…。誰か訳してないものか。
0245デフォルトの名無しさんNGNG
私はadvice機構をElisp Manualの"(elisp)Advising Functions"ノードで学習しましたが、
まぁまぁ分かりやすいですよ。日本語訳されていないのかと思ったら、されていますね。
それとも、そんなこと知っててadvice.elファイル内のCommentary部分の話をしているのでしたら、スマソ。
0246デフォルトの名無しさんNGNG
"abc" という文字列から、"abc-1","abc-2","abc-3"といった
関数名を生成してコールすることは可能でしょうか?

よろしくお願いします。
0247デフォルトの名無しさんNGNG
可能。
0248デフォルトの名無しさんNGNG
教えてください (>_<)
0249デフォルトの名無しさんNGNG
>>246
事故解決しました
(funcall (intern "abc"))
0250246NGNG
連続質問失礼します。

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

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

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

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

0251デフォルトの名無しさんNGNG
何がしたいのか分からん。
0252デフォルトの名無しさんNGNG
何がしたいのか良くわからんが、マクロはfuncallできないにょ。
■ このスレッドは過去ログ倉庫に格納されています