トップ «前の日記(2013-03-25(Mon)) 最新 次の日記(2013-03-31(Sun))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2013-03-26(Tue) 晴れて涼しいが、花粉はおさまらない

EmacsLispのcarとcdr合わせ技

car と cdr 一つずつの組み合わせはあるようだけど、 それ以上は、手元環境では用意されてないかも。

(cadr '((1 2 3) (4 5 6) (7 8 9)))
(4 5 6)
(cdar '((1 2 3) (4 5 6) (7 8 9)))
(2 3)
(cddr '((1 2 3) (4 5 6) (7 8 9)))
((7 8 9))
(caar '((1 2 3) (4 5 6) (7 8 9)))
1
(caddr '((1 2 3) (4 5 6) (7 8 9)))
 
Debugger entered--Lisp error: (void-function caddr)
  (caddr (quote (... ... ...)))
  eval((caddr (quote (... ... ...))))
  eval-last-sexp-1(t)
  eval-last-sexp(t)
  eval-print-last-sexp()
  call-interactively(eval-print-last-sexp nil nil)

無ければ作れ。ということか。

(defun caddr (list)
  (car (cdr (cdr list))))
caddr
 
(caddr '((1 2 3) (4 5 6) (7 8 9)))
(7 8 9)

mapcar

for x in ... みたいなものか。
foreach はあまり使ったことなかったっけ。

(defun multi (n) (* n n))
(mapcar #'multi	'(1 2 3))
(1 4 9)

mapcar #'FUNC list は、 (mapcar (function FUNC) list) になるらしい。
ついでにもう一つ。

(mapcar
  (function car)
    '((*)
      (1 2 3) (4 5 6) (7 8 9)))
(* 1 4 7)
 
(eval (mapcar
  (function car)
    '((*)
      (1 2 3) (4 5 6) (7 8 9))))
28

clisp を立ち上げるのが面倒になってきて (面倒にならないカスタマイズが、まだできない)、 昨日も今日も、専らEmacsLisp。 (Common Lisp に似てるようだし)。

やっと頭からlambda式が出た

はじめてじゃないけど。

(mapcar	#'(lambda (n) (+ n n)) '(1 2 3))
(2 4 6)

さっきのmapcarを見ているうちに、使い捨ての関数を defun するのが 面倒な場合はどうすれば。と考えていると、ひとりでに lambda が出てきた。
Emacs Lisp もすんなり eval してくれた。

おまけ。
この場合、"#'" は必須でもないらしい。mapcar はscheme なら map。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。