Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-12-08

LAMBDA代替記法全部のせ

| 23:44 | LAMBDA代替記法全部のせ - わだばLisperになる を含むブックマーク はてなブックマーク - LAMBDA代替記法全部のせ - わだばLisperになる

最近の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に落ち着くような気はしています。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20101208