LAMBDA代替記法全部のせ — #:g1

Posted 2010-12-08 14:44:00 GMT

最近のLISP方言では、(lambda (x) (list x))が、[list _]と書けたり、#(list %)と書けたりしますが、便利だなと思いつつもlambdaのままで日々を過しております。
でも、ささッと書くには記法が簡単な方が便利なのは確かです。
代替記法は色々ありどれにしたら良いのか迷う程ですが、考えるのも面倒なので普段使うパッケージにとにかく全部入れていつでも使えるようにしてみることにしました。
ちょっと探してみただけでも、CLのライブラリには、
- Arnesiの#L記法
- cl-op
- curly
- f-underscore
- metatilities
等があるようです。

;; 導入方法
;; ARNESI:ENABLE-SHARP-L-SYNTAX
(IT.BESE.ARNESI:ENABLE-SHARP-L-SYNTAX)

;; cl-op ;; http://code.google.com/p/cl-op/ (import 'cl-op:op)

;; curly ;; http://www.cliki.net/curly (curly:enable-curly-syntax)

;; gauche ;; http://blog.practical-scheme.net/gauche/20100428-shorter-names ;; 自作しましょう

(import 'metatilities::\\)

;; f-underscore (use-package :f-underscore)

;; 普通のLAMBDA
(mapcar (lambda (x) (parse-integer (string x)))
        '("1" "2" "3" "4"))

;; 関数合成な感じ (mapcar (compose #'parse-integer #'string) '("1" "2" "3" "4"))

;; Arnesi L# (mapcar #L(parse-integer (string !1)) '("1" "2" "3" "4"))

;; f-underscore (mapcar (f_ (parse-integer (string _))) '("1" "2" "3" "4"))

;; metatilities::\\ (mapcar (\\ x = parse-integer (string x)) '("1" "2" "3" "4"))

;; Gauche (mapcar (^x (parse-integer (string x))) '("1" "2" "3" "4"))

;; Arc (mapcar (fn (x) (parse-integer (string x))) '("1" "2" "3" "4"))

;; curly (mapcar {parse-integer string} '("1" "2" "3" "4"))

;; Gaucheの$ (mapcar ($ parse-integer $ string $) '("1" "2" "3" "4"))

ちょっと込み入ったもの
(mapcar (lambda (x) (parse-integer (string x) :radix 16))
        '(a b c d e))

;; f-underscore (mapcar (f_ (parse-integer (string _) :radix 16)) '(a b c d e))

;; metatilities::\\ (mapcar (\\ x = parse-integer (string x) :radix 16) '(a b c d e)) ;=> (10 11 12 13 14)

とりあえず、比較して一覧に纒めるのも疲れる位、様々な試みがあることは分かりました。
なんとなく、常用するならf-underscoreに落ち着くような気はしています。

comments powered by Disqus