by shigemk2

当面は技術的なことしか書かない

2012-04-24から1日間の記事一覧

loop3

;; 事前処理 ;; バッファの各行を文字列のリストで返す (save-excursion (loop initially (goto-char (point-min)) until (eobp) collect (thing-at-point 'line) do (forward-line 1))) ;; ループの最後まで処理したあと、返り値を指定するには、finally re…

エコーエリア

1.3 Emacsの画面 エコーエリアとは、ミニバッファと同義である。Emacsの画面の最も下に位置している部分がエコーエリアと呼び、Emacsからのメッセージや問い合わせを表示する。 また、エコーエリアはミニバッファとも呼ばれ,コマンドやコマンド引数などのユ…

loop2

(loop for x in '(1 2 3) collect (list x (* x x))) ; => ((1 1) (2 4) (3 9)) (loop for x in '(1 2 3) append (list x (* x x))) ; => (1 1 2 4 3 9) ;; 1から10までの総和を得る (loop for i from 1 to 10 sum i) ; => 55 ;; 1から10までの二乗和を得る …

loop1

;; 1-5のリストを得る (loop for i from 1 to 5 collect i) ; => (1 2 3 4 5) ;; 1-5の二乗のリストを得る (loop for i from 1 to 5 collect (* i i)) ; => (1 4 9 16 25) ;; リストの各要素をエコーエリアに表示する (loop for x in '(3 9 6) do (princ x))…

構造体

Common Lispなので、 setqじゃだめですね。 構造体を定義する 構造体のインスタンスを作成する 構造体のメンバにアクセスする (defstruct person name age (sex 'unknown)) ; sexのデフォはunknown (setq tom (make-person :name "Tom" :age 10 :sex 'male))…

ブロック

;; 最後まで実行される例 (block block1 (setq a 1) (1+ a)) ; => 2 ;; 脱出 (block block2 (setq a 1) (return-from block2 (+ a 5)) ; => "Not reached!") ; => 6 (defun* block-test () 1 (return-from block-test 2) ;関数名をブロック名に指定して脱出 …

値による場合分け

caseとかtypetestとか使うといいんだよねー (defun case-test (value) (case value (1 "one") ((2 3) "two or three") ((t) "true") (t "other"))) (case-test 1) ; => "one" (case-test 3) ; => "two or three" (case-test t) ; => "true" (case-test 9) ; …

一時的な関数再定義

fletを使う (defun f (x) (* x 2)) (defun g (x) (f x)) (defun i (x) (h x)) (f 9) ; => 18 (g 9) ; => 18 (flet ((f (x) (1+ x)) (h (x) (* 10 x))) (f 9) ; => 10 ;; gの内部でfを呼ぶ (g 9) ; => 10 ;; iの内部でhを呼ぶ (ignore-errors (i 4)) ; => 40 …

レキシカルスコープを使う

elispでレキシカルスコープを使うにはlexical-letを使う。 (defun f1 (func) (let ((v 'internal)) (funcall func))) (lexical-let ((v 'external)) (f1 (lambda () v))) ; => external (defun f2 (func v) (funcall func v)) (let ((v 'external)) (f2 (lam…

ダイナミックスコープとレキシカルスコープ

実行するまで分からない動的なスコープを ダイナミックスコープという。字面を見てスコープが分かるスコープをレキスカルスコープという。Emacs Lispはダイナミックスコープであり、 Common Lispはレキシカルスコープという。下記はダイナミックスコープの例…

組み込みコマンドをwhich

たとえばechoなんかは組み込みのコマンドですね。 で、 $ which echo としても echo: shell built-in command が返ってくるだけ。 これの場所を知りたいときは、 $ which -a echo とすればいいです。すると、 echo: shell built-in command /bin/echo と返っ…

引数 $1 と $@ と $*

見ていただけたらいいよ。 #! /bin/sh hoge() { echo $1 } PARAMS="Mon Tue Wed Thu Fri Sat Sun" hoge $PARAMS hoge() { echo $@ } PARAMS="Mon Tue Wed Thu Fri Sat Sun" hoge $PARAMS hoge() { echo $* } PARAMS="Mon Tue Wed Thu Fri Sat Sun" hoge $PAR…