Emacs Lisp 3 ..
[2ch|▼Menu]
116:デフォルトの名無しさん
08/12/17 23:20:41
すみません、
>>106>>108>>112
より簡単に書けませんか?
よく分かりません

117:デフォルトの名無しさん
08/12/17 23:50:38
宿題をここで教えてもらうような人間が提出するには
コードが綺麗すぎて困っているのですね、わかります。

118:デフォルトの名無しさん
08/12/18 15:56:12
(defun co (x lst)
(let ((f (lambda (node acc)
(cond ((eq node x) acc)
((consp node)
(or (funcall f (car node) (cons 'car acc))
(funcall f (cdr node) (cons 'cdr acc))))))))
(funcall f lst '())))

119:デフォルトの名無しさん
08/12/24 16:57:33
ある eval に時間のかかる式を
開発中に eval-buffer したときは eval せずに,
compile 時のみに eval したいんですが,
どうするんでしょうか?

(eval-when (compile) (hoge))

これはうまくいっていないように思う.
Emacs 22.


120:デフォルトの名無しさん
08/12/24 22:25:20
eval-when-compile

121:デフォルトの名無しさん
08/12/25 00:44:53
eval-when-compile は eval-buffer でも eval される.

質問の仕方を変えると, byte compiling 中のみ Non-NIL に
なる変数はどうすれば定義できるか?

(defvar hoge-byte-compiling-p ...)



122:デフォルトの名無しさん
08/12/25 09:15:49
>>119>>121じゃ問題が全然違うだろ。

123:デフォルトの名無しさん
08/12/25 12:25:52
質問がへたでごめんなさい.
eval-when-compile は eval-buffer のときも byte-compile のときも eval されるが,
今どちらなのかを区別したいです.


124:デフォルトの名無しさん
08/12/25 16:32:59
>>121
backtrace/backtrace-frame を使って byte-compile-form あたりの有無で判定
できると思う.


125:デフォルトの名無しさん
09/02/07 11:11:43
大学2年です
春休みを使って、emacs lispを勉強して、より快適な環境を作り、雑多な手間を省きたいんですが
どのくらいのレベルに行けば、emacs lispを扱えるレベルと言えるんでしょうか?
現在、自分はレベル1でしょうか

実は、Pythonのほうが興味があって、Pythonのほうがメインの勉強だったりします
Pythonでも下記のリンクのようなことは、できそうですよね?
Lisp(emacs lispとの違いがまだよくわかっていませんが)のほうがスマートなんでしようか

古いネタですが、叩き台のネタに

Scheme:Schemeプログラマのレベル10
URLリンク(practical-scheme.net)


126:デフォルトの名無しさん
09/02/07 23:23:43
新しいmajor-modeを書いたり、標準のelispとか誰かが作ったelispのバグを取ったり拡張を書いたり
できるようになれば十分扱えてるといっていい状態だろうね
それ以外の項目については何が言いたいのかよくわからない

127:デフォルトの名無しさん
09/02/08 00:28:15
Lispの方がスマートに解ける問題もあればPythonの方が良い場合もあるでそ。
なんとなく思いだしたのでこれ貼っとく。
URLリンク(www.aoky.net)

128:デフォルトの名無しさん
09/02/08 06:58:22
>>127
リンク、サンクスです
この人の寸評だと、このころはRubyのほうが優れた言語とされていたんだね

elispで何ができるかというのは、漠然とだけど、掴めるんだけど
Schemeでなにができるかがよく掴めない(どういう用途に優れているとか)
単なる教養としての言語なのかな
言語仕様として一貫性があるとか、そんな感じなのかな

Scheme関連のチュートリアルを読んでみます

129:デフォルトの名無しさん
09/02/08 11:50:11
一応言っておくけど、Lispを学びたいからEmacs Lispをやるっていうのなら、
括弧になれるとか入口程度に思っておいた方がいいよ。
Emacs Lispは、見た目、Lispなだけだから。
末尾再帰を最適化できないから、再帰で書くことが事実上できなかったり、色々とLispらしくないから。

130:デフォルトの名無しさん
09/02/08 12:40:51
Emacs Lispはテキストエディタのマクロとは思えないほど多機能だけど
>>129に書かれてるような問題があるよということを>>127の人の最近のポストで書いてるね。
URLリンク(steve-yegge.blogspot.com)
Emacs LispでJavascriptを実装しちゃうってのも凄い話だけど。
あとLispの方言の説明がおもろい。

>Lisp is a whole family of languages, and can be broken down approximately as follows:
> * Scheme is an exotic sports car. Fast. Manual transmission. No radio.
> * Emacs Lisp is a 1984 Subaru GL 4WD: "the car that's always in front of you."
> * Common Lisp is Howl's Moving Castle.

131:デフォルトの名無しさん
09/02/08 13:02:07
>>130
コメント欄みてみるとハウルネタがやたらウケてるな。このアニオタどもめ!

132:デフォルトの名無しさん
09/02/08 13:11:50
言語仕様に問題のあるEmacs Lispだけどlispの総合環境としてはソースレベルデバッガあり、トレーサあり、
プロファイラあり勿論ディスアセンブラもありと割と至れり尽せりだったりする

133:デフォルトの名無しさん
09/02/08 13:43:30
>>130
ハウル、みていないんだがw
Emacs Lisp の"the car that's always in front of you."をYahooに訳させたら、
いつもあなたの正面にある車。と訳したんだけど、どういう意味だ
1984 Subaru GLは
URLリンク(farm1.static.flickr.com)
らしいけど、古い4WDって話か
>>132
そういう通常利用の一個上を行く使い方ってどういうのがあるんですかね
潜在能力が高いなら、もっと踏み込んで勉強したいところなんですが
ちょっとEmacs Lispをかじっただけですが、けっこうのことをEmacs1つでできそうだなと想像するんですが


Lisp関連であと2日ぐらいググって、今後のカリキュラムを組もうかな
言語仕様50ページだったSchmeは、ちょっとやりたくなるね
Schmeをやってから、Emacs Lispをやったほうが言語仕様も理解しやすいかな

関数名が長いのってEmacs Lispだけじゃなくて、Schmeもそうなんだね
略記もあるみたいだけど
個人的に長いほうが好きかも
保守しやすそうだし

チラシの裏
年齢(生まれ)比較
Lispは1958年生まれの51歳
Schmeは1970年代生まれの30代
Comon Lispは1984生まれの25歳
Emacs本体(Emacs Lisp)は約1976年生まれ, 32〜33歳
Pythonは1991生まれの18歳
C言語は1972年生まれの37歳

134:デフォルトの名無しさん
09/02/08 16:19:28
>>133
"the car that's always in front of you."
は、俺だったら
「いつもそこにある車」 って訳すかな
(=古くてダサくて定番中の定番で面白くないけど、結局乗るのはこの車なんだよね、
的な意味で)

あと、「Scheme」 だぞ。typoかと思ったけど全部Schmeって書いてるってことは
本気で勘違いしてる?

135:デフォルトの名無しさん
09/02/08 16:27:08
schemeやelispはhogeライブラリのfoo関数ってのをhoge-fooみたいに定義せにゃならんからね
この規則を使って階層になったライブラリの関数、hogeライブラリの中にあるfooライブラリの関数fの名前を付けると
hoge-foo-fのようになってしまう
長くなるのは仕方ないけど、この規則ででかいアプリケーションは書きたくないよね

136:デフォルトの名無しさん
09/02/08 16:31:26
the car that's always in front of you というネタの原型はフォードT型。
あまりに売れすぎて、「どんなレーシングカーもフォードTの前に出ることはできない。どれだけ抜いてもまだ前にもう1台いる」というジョークが生まれたので。
スーパーカーとの対比で、性能はプアだけどみんなが使ってる普及版っていうニュアンスだろうな。

elispはよくも悪くもEmacsと切り離せないものなので、本当に言語の勉強をしたいならcommon lispかschemeのほうがいいよ。
逆にEmacsいじって遊びたいならelisp使うしかないし。

137:デフォルトの名無しさん
09/02/08 16:39:45
>>136
134だが勉強になった。トン

138:デフォルトの名無しさん
09/02/08 18:12:24
>>136
> elispはよくも悪くもEmacsと切り離せないものなので、本当に言語の勉強をしたいならcommon lispかschemeのほうがいいよ。
言語の勉強したいまでは、まだ至っていません
Emacsを使いこなせるようになりたいだけで

Schemeは、知っていて損はなさそうですね
チュートリアルの語彙も特徴的で好奇心をそそられる
英語・日本語の資料も豊富そうで資料には、困らないだろうし
プログラマとしての幅が広がるなら、なおうれしいかな

139:デフォルトの名無しさん
09/02/14 00:26:28
俺はバッファ、リージョン、選択範囲なんか用の
map関数を書いてよく使ってるんだがこれ便利よ
色々関数を別途定義しといて
関数を行に対して呼び出す

2chに書き込むときによくやるのは
タブ→スペース変換と
半角スペース→nbsp変換
こうするとプログラムはインデントされて見やすい

ところで、久しぶりにここきたんだが
xyzzyスレってどこいったの?
見つからないんだけど

140:デフォルトの名無しさん
09/02/14 00:34:37
ソフトウェア板とWindows板に1つずつあるよ。

141:デフォルトの名無しさん
09/02/14 00:45:02
あったあった、さんきゅー

142:デフォルトの名無しさん
09/02/19 18:25:06
行の(半角相当で)80文字目の位置をを色づけしたいとおもったんですが,
とりあえず思いついた
'(("^......................................................\
.........................\\(.\\)" 1 highlight-long-line-face append))
というのをfont-lock-add-keywordsして加えたところ、
当然ながら全角文字をいれると後ろにずれました

半角で80文字目の位置をを色づけする方法について、
なにかお知恵を拝借できませんでしょうか?

143:デフォルトの名無しさん
09/02/19 19:21:13
URLリンク(www.emacswiki.org)

144:デフォルトの名無しさん
09/02/19 22:19:43
質問者じゃないけど
めちゃめちゃ重いなそれw

145:デフォルトの名無しさん
09/02/20 15:29:29
>>143
ありがとうございます
そんなものが作られてたんですね、試してみます

146:デフォルトの名無しさん
09/02/23 22:05:35
>>144
うまい工夫をしないと速くならないだろうからなぁ。常に80文字目を数えるって
いうことだしね。

147:デフォルトの名無しさん
09/02/23 23:00:47
cygwin環境下でgaucheをリッチに使いたくて
行ごとに色を変えたいんですが教えてください

まさに自分がやりたいことがこれ
URLリンク(pitecan.com)

上のプログラムをざっと読んだ感じ、
色の変更に関するプリミティブな部分ってのは
「put-text-propertyに背景色を設定したfaceを設定する」
というように感じたのですがあってますか?

それらしきコードを書いてみたのですがうまくいかず・・

(setq symbol (make-symbol "test"))
(setq face (make-face symbol))
(set-face-background face "DarkSeaGreen1")
(point)
134 ←評価結果
(point)
146 ←評価結果
(put-text-property 134 146 'face face)

148:デフォルトの名無しさん
09/02/23 23:02:07
あ、補則。このコードは行は意識してなくて、とりあえず指定箇所の背景色を変えたいだけです

149:デフォルトの名無しさん
09/02/24 00:19:05
とりあえずfont-lock-faceにしたら動いたけど
(put-text-property 1 20 'font-lock-face 'highlight)

150:デフォルトの名無しさん
09/02/24 00:39:13
ありがとうございます。
それを実行したときはtが返るんですよね?
M-x list-faces-displayで書いてあるフェイスをいくつかうちこんでは見ましたが
自分の環境ではnilが返ってきて色が変わらないです

↓動作はよくわかってませんが、これを切り替えた場合はちゃんと色が変わります
(global-font-lock-mode t)
(global-font-lock-mode nil)

今日は寝て、また明日調べてみますわ

151:デフォルトの名無しさん
09/02/25 12:19:45
ver22で拡張された \,(function \1) みたいなのが
replace-match では使えない(不正な\エラーになる)のは何で?

こんな感じ↓
(re-search-forward "\\(.+\\)" nil t)
(replace-match "\\,(my-func \\1)" nil nil)
=> Invalid use of `\' in replacement text


152:デフォルトの名無しさん
09/02/25 15:06:59
est

153:デフォルトの名無しさん
09/02/25 17:08:20
>>151
君の頭が腐っているというのを疑った方がいいよ

154:デフォルトの名無しさん
09/02/27 00:26:35
>>151
プログラマブル正規表現だっけ?
よくわからん

155:デフォルトの名無しさん
09/02/27 01:11:40
プログラマブルなのが使えるのは、インタラクティブに実行した場合だけでしょ。

NEWS
*** When used interactively, the commands `query-replace-regexp' and
`replace-regexp' allow \,expr to be used in a replacement string,

ちなみに replace-regexp を実行したら次のように展開された(repeat-complex-command)。

(replace-regexp "\\(.+\\)"
(quote
(replace-eval-replacement replace-quote
(my-func (match-string 1))))
nil
(if (and transient-mark-mode mark-active)
(region-beginning))
(if (and transient-mark-mode mark-active)
(region-end)))

で、replace-regexp をプログラムの中で使うのはbadなので、

(while (re-search-forward "\\(.+\\)" nil t)
(replace-match (my-func "\\1") nil nil))


156:151
09/02/28 01:47:45
>> 154
そんな名前があるとは知らなんだ。
google先生は記号の検索には弱いしね・・・

>> 155
サンクス。インタラクティブ専用だったんだ。
よく使う置換の組を「お気に入り」みたいに登録して一発で呼び出せるlispを作ってたんだけど、
仕組み上、正規表現は自由に指定可能だから関数決めうち実行ができなくて。
プログラマブル正規表現は非対応とあきらめるしかないか。

157:デフォルトの名無しさん
09/02/28 03:23:53
>> と数字の間は開けないで

158:デフォルトの名無しさん
09/02/28 22:18:39
起動時にインタラクティブな関数を自動的に呼び出すにはどうしたらいい?
2画面で起動して、片方にSchemeインタプリタを起動したい
2画面の分割は、.emacsに(split-window-vertically)を追記したらうまくいったが
M-x run-schemeが呼び出せないんだ

159:デフォルトの名無しさん
09/02/28 22:50:34
(run-scheme) ではだめなのけ?

160:デフォルトの名無しさん
09/02/28 23:14:03
だめぽ。そうするとこんなわけわからんエラーが出る
Wrong number of arguments: #[(cmd) "\304\305!\204^Y^@\306^H!^Y\307\310\311 @\312 A%q\210\313 \210)^H^R\305^S\314\305\
!\207" [cmd cmdlist scheme-program-name scheme-buffer comint-check-proc "*scheme*" scheme-args-to-list apply make-comint "s\
cheme" nil inferior-scheme-mode pop-to-buffer] 6 ("/usr/share/emacs/21.2/lisp/cmuscheme.elc" . 6428) (list (if current-pref\
ix-arg (read-string "Run Scheme: " scheme-program-name) scheme-program-name))], 0

161:デフォルトの名無しさん
09/02/28 23:18:46
describe-function(C-h f)ぐらい覚えような

162:デフォルトの名無しさん
09/02/28 23:29:14
>>160
(run-scheme scheme-program-name)


163:デフォルトの名無しさん
09/03/01 09:48:57
(call-interactively 'run-scheme)


164:デフォルトの名無しさん
09/03/01 14:28:41
>>161-163
d牛d牛トーン・・カツ!
すばらしく快適な環境になった

165:デフォルトの名無しさん
09/03/01 17:07:00
>>164
(call-interactively 'run-scheme)
これしらんかった、すげぇ勉強になった、ありがとう
いままでintaractive関数の機動失敗時はいつも.elの中調べてた。



最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5381日前に更新/48 KB
担当:undef