map, fold, filter on Vim Script

Vim ScriptでmapとかしようとあがくVimmerたち
4
ドッグ @Linda_pp

Vim script に fold 欲しい(自作定義じゃなくて,Vim 側で C で書かれた高速なのが欲しい)

2012-11-15 09:21:20
ドッグ @Linda_pp

@manga_osyo ああでも冷静に考えてみると,fold はアキュムレータの記述方法を考えないと駄目ですね… map とか filter が取るのは1引数関数なので v:val だけで問題無いですが…

2012-11-15 09:24:45
おしょー@実際モチベーションがない @manga_osyo

@Linda_pp v:key あたりを使えばいいんじゃないですかね(棒。vital.vim だと v:memo と v:val で、reti.vim だと a:1 と a:2 ですね。

2012-11-15 09:28:03
ドッグ @Linda_pp

@manga_osyo 名前的にそれはやばそうですね… v:acc が個人的には良いと思ってます(ばらばら)

2012-11-15 09:28:47
おしょー@実際モチベーションがない @manga_osyo

@Linda_pp まぁ filter とかにリスト渡すと v:key にはインデックス番号とか張っていますし‥。 http://t.co/ZqULBJ4P

2012-11-15 09:30:01
おしょー@実際モチベーションがない @manga_osyo

組込み関数に fold は欲しいけど、Vim script で書いた場合と速度がどれぐらい変わるのかな。

2012-11-15 09:30:35
ドッグ @Linda_pp

@mattn_jp 関数型で良く見る fold 関数で,例えば 10 の階乗なら fold( range(2,10), 1, 'v:acc * v:val' ) みたいに書けると嬉しいなと思います(v:acc はアキュムレータ).こういう処理はいつもループで書く羽目になるので…

2012-11-15 09:31:14
おしょー@実際モチベーションがない @manga_osyo

v:acc や v:memo みたいに名前つけるんじゃなくて単に a:1 a:2 みたいな引数番号でもいいとは思っている。

2012-11-15 09:31:54
ドッグ @Linda_pp

@manga_osyo あー確かに.しかしそれは一般的な filter の仕様ではなくて Vim script 独自のものですし,微妙な気もします.

2012-11-15 09:32:22
ドッグ @Linda_pp

@manga_osyo 単純な演算子ならそれでいけますが,処理が複雑になると厳しそうですね…

2012-11-15 09:33:55
mattn @mattn_jp

vim の printf() 書式に %S が追加された。これで例えば :echo printf("-%5S-", "あ") とすると "- あ-" が表示される。ちなみに %5s だとバイト幅扱いになるので期待通りにはならない。

2012-11-15 09:34:26
mattn @mattn_jp

@Linda_pp あー、そっちのfoldすね。

2012-11-15 09:34:57
ドッグ @Linda_pp

@mattn_jp ですです.ソースの折り畳みではないです.

2012-11-15 09:35:20
おしょー@実際モチベーションがない @manga_osyo

@Linda_pp あとは filter と map でがんば… _人人人人人人人_ > 破壊的変更 <  ̄^Y^Y^Y^Y^Y^ ̄

2012-11-15 09:36:49
おしょー@実際モチベーションがない @manga_osyo

ふと Vim script で for 文書くことが少ないと思った。map とか使う事が多い。

2012-11-15 09:37:28
mattn @mattn_jp

range() とか eval() でなんとかなりそうなイメージ > fold()

2012-11-15 09:37:35
mattn @mattn_jp

@manga_osyo デフォで lambda が欲しい

2012-11-15 09:38:50
ドッグ @Linda_pp

最初に空の辞書用意して,そこにループで順次 extend() していくときのかなしみ

2012-11-15 09:39:39
ドッグ @Linda_pp

まあ,欲しいなら書いてパッチ送れというのが筋なのか…

2012-11-15 09:40:04