Code Aquarium

minazoko's blog -*- 水底のブログ -*-

Emacs Lisp

(PowerShell)ダイナミックスコープなReduce

$1. 関数内再帰関数で Join-Paths 最初にちょっと寄り道。 前回エントリでは、引数を配列にして3つ以上のパス要素連結関数を書きました。 Join-Path 同様に可変長の引数にすることは出来ないでしょうか? できました。 function Join-Paths{ function rec (…

Emacs Lisp で as-> マクロ

Clojure1.5のas->マクロをelispで。 (defmacro as-> (expr name &rest forms) `(let* ((,name ,expr) ,@(mapcar '(lambda (f) `(,name ,f)) forms)) ,name)) 本家Clojureの実装はこんな感じ (defmacro as-> [expr name & forms] `(let [~name ~expr ~@(inter…

遅延リスト遊び - Emacsで学ぶLazyな世界(後編)

前編に引き続き、使うのはEmacs Lispです。 -*- 遅延リスト -*- ものすごく基本的なことを書きます。 二つのオブジェクトのペアを作る関数consがあります。このペアはドット対とも呼ばれますが、cdr部がnilの場合、真のリスト*1になります。またcdr部が真の…

遅延リスト遊び - Emacsで学ぶLazyな世界(前編)

(これは、Lisp Advent Calendar 2012の20日目の記事です。)長いので前後編に分けます。お暇な方はどうぞ。 -*- delayとforce -*- 正格評価の言語でもクロージャがあれば遅延評価を行うことができます。計算式をクロージャに包んでしまえば、クロージャが呼…

もう一度、関数の引数をlexical-letするマクロ

昨日の「関数の引数をlexical-letするマクロ」が中途半端だったので、拡張してみた。 組み込みdefunと, clモジュールのdefun*のそれぞれに対応したものを作成。ヘルプで見たときにdocstringの位置が明示されるように、引数の調整もしました。 (require 'cl) …

関数の引数をlexical-letするマクロ

◎続編を書きましたのでそちらもよろしく。Emacs Lispを書いていると関数の引数が動的スコープで困ることがある。で、書いてみたマクロ (require 'cl) (defmacro* defun% (name args &rest rest) (let* ((docstr (when (and rest (stringp (car rest))) (car …