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-11-01

Seriesの関数名が長い

| 02:55 | Seriesの関数名が長い - わだばLisperになる を含むブックマーク はてなブックマーク - Seriesの関数名が長い - わだばLisperになる

Seriesを使ってみると分かるのですが、どうも微妙にSeriesの関数名は長いのです。

(collect-sum 
 (scan-range :from 1 :upto 10))
;⇒ 55

こんな感じに、Seriesを生成→collectでリストの形で収集という流れなのですが、これが色々とネストして行くと、少しの関数名の長さが蓄積していって微妙に冗長になるのです。

このあたりをどうにかできないかなあと思っていましたが、Seriesに先行するLetSというものの関数名が良い感じに短かいのでこれを踏襲してみたらどうだろうとLetSを探りつつ試してみました。

LetSだと上記は、

(Rsum (Erange 1 10))

になります。良い感じの短さ。

Rは、Reducer、Eは、Enumeratorの略の様ですが、ぱっと見た目でも分かり易い気がします。

ということで、エイリアスを定義してみたのですが、エイリアスを使うと

(COLLECT-SUM (EVECTOR #(1 2 3 4)))
Non-series to series data flow from:
(EVECTOR #(1 2 3 4))

のような警告が出ます。エイリアスでは何かが最適化できなくなるようなのですが、この辺りにもSeriesの黒魔術をみる気がします…。