The Yak Shaver
さあ、今日も毛を刈ろう。
skip to main
|
skip to sidebar
ラベル
lisp
の投稿を表示しています。
すべての投稿を表示
ラベル
lisp
の投稿を表示しています。
すべての投稿を表示
2013/06/19
メジャーモードごとに eval-region を切り替える
[Python でもスクラッチバッファで対話したい](http://yak-shaver.blogspot.jp/2013/04/python.html) のつづきです。 メジャーモードごとに eval-region を切り替えるようにしてみました。簡単な割に便利です。 これで、スクラッチバッファでもそうでなくても `M-x eval-region` すると、そのメジャーモードにふさわしい eval-region が呼び出され、リージョンの評価結果をプリントするようになります。…といっても、今のところ Python, Ruby, ELispだけですが。 各モード用の `eval-region-xxx` の関数定義は共通化すればシンプルになりそうですが、早すぎる最適化を招きそうなのでこのまま放置です。
Emacs Lisp の関数のすげ替え テスト
fset / setf と、とてもまぎらわしいので、備忘録的においておきます。 テストとして、挨拶文を表示する`greeting`という関数を朝用と夜用にすげ替えてみます。 これでいいのか、今ひとつ自信ないです…。
2013/04/19
Elisp のトグル動作や内部カウンタはクロージャを使う
よく忘れるので、メモしておきます。 トグル動作をさせたい場合や、内部のカウンタを使いたいときは、スタティック変数が欲しいところです。 Emacs Lisp ではクロージャを使えば可能です。 (defun cage1 () (lexical-let ((v 0)) (defun func1 () (setq v (1+ v))))) ; C-x C-e これを評価すると、`cage1` という関数が定義されます。しかし `cage1` 関数自体はコールされてないため、`cage1` の中にある `func1` 関数はまだ未定義です。 なので、`func1`をコールしたいと思っても、 (func1) ; C-x C-e Debugger entered--Lisp error: (void-function func1) (func1) eval((func1) nil) eval-last-sexp-1(nil) eval-last-sexp(nil) call-interactively(eval-last-sexp) eval-region-or-last-sexp() call-interactively(eval-region-or-last-sexp nil nil) となり、エラーが発生します。 一旦 `cage1` をコールしてやれば、 `func1` が定義されるので、それ以後は問題なく `func1` をコールできるようになります。 (cage1) ; C-x C-e (func1) ; C-x C-e => 1 (func1) ; C-x C-e => 2 (func1) ; C-x C-e => 3 ここでもし 変数 `v` がグローバル変数なら、外から値を変更できてしまいます。しかし、この `v` はレキシカル変数(この場合 `cage1` 内部にある、一種のローカル変数)なので、外から変更できません。 外から変更しようとして、下のようにしても (setq v 100) ; C-x C-e (func1) ; C-x C-e => 4 (func1) ; C-x C-e => 5 というぐあいに、`func1` が 101, 102, ... を返したりはせず、カウンタの動作として正しい値をカウントし続けます。 つまり、100 を setq した `v` と `func1` がカウンタに使っている `v` は別物ということです。 カウンタではなく、トグル動作にしたい場合は (defun cage1 () (lexical-let ((v nil)) (defun func1 () (setq v (not v))))) とします。
2013/02/24
Land of Lisp 日本語版
つ、ついに発売されてしまったようです。 Land of Lisp の日本語訳 訳者は川合さんか。これは買うしか…。
前の投稿
ホーム
About
Unknown
詳細プロフィールを表示
Labels
AVR
( 12 )
Blogger
( 10 )
Chrome
( 2 )
cocoa
( 5 )
Eagle
( 5 )
emacs
( 31 )
game
( 1 )
Google
( 4 )
iPhone
( 2 )
Javascript
( 1 )
lisp
( 4 )
LPCXpresso
( 1 )
mac
( 53 )
Markdown
( 4 )
msp430
( 1 )
NXP
( 1 )
Parallels Desktop
( 1 )
PIC
( 3 )
python
( 19 )
Raspberry Pi
( 9 )
ruby
( 1 )
Safari
( 2 )
shell script
( 4 )
Sublime Text
( 1 )
windows
( 7 )
xcode
( 8 )
xyzzy
( 60 )
おぼえがき
( 69 )
まとめ
( 6 )
メール
( 2 )
よもやま
( 19 )
工作
( 23 )
電験
( 4 )
本日の探索結果
( 2 )
Blog Archive
▼
2015
( 3 )
▼
02
( 1 )
C99 サンプルコード
►
01
( 2 )
►
2014
( 17 )
►
12
( 1 )
►
07
( 3 )
►
06
( 3 )
►
04
( 2 )
►
03
( 4 )
►
01
( 4 )
►
2013
( 135 )
►
12
( 5 )
►
10
( 6 )
►
09
( 7 )
►
08
( 10 )
►
07
( 24 )
►
06
( 15 )
►
05
( 15 )
►
04
( 17 )
►
03
( 13 )
►
02
( 17 )
►
01
( 6 )
►
2012
( 11 )
►
10
( 5 )
►
07
( 1 )
►
02
( 2 )
►
01
( 3 )
►
2011
( 86 )
►
12
( 2 )
►
11
( 2 )
►
10
( 1 )
►
07
( 2 )
►
06
( 3 )
►
05
( 20 )
►
04
( 49 )
►
03
( 7 )
►
2009
( 4 )
►
03
( 1 )
►
01
( 3 )
►
2008
( 8 )
►
12
( 8 )
STAT
Ads
Amazon.co.jp ウィジェット
Powered by
Blogger
.