2015-04-01から1ヶ月間の記事一覧

VBAHaskellの紹介 その10 (ループの性能が上がらない)

VBA

前回書いたループ性能を改善するためにAPIにそのための関数を追加し、ついでにリファクタリングしてみた。VBAHaskellの紹介 その9 (明示的なループの性能がいまいち) 終了判定されるまで変換関数を繰り返し適用する次のような関数をAPIに追加して、250msか…

VBAHaskellの紹介 その9 (明示的なループの性能がいまいち)

VBA

ここでの「明示的なループ」とはVBAコード中のループのことで、VBAHaskellの関数適用関数である applyFun 等を繰り返し呼び出したときの性能が良くない。mapFやfoldlなどのリスト処理関数でもループ処理はしているが、それはdllの中で行われているのでこの話…

比較関数の自然な例

VBA

ソートで使用する比較関数のうまい例がみつからない。 列 { Xn } をソートするのに、関数 f でマップした f(Xn) の大小関係で比較することは良くあり、そのときの比較関数は [ ] ( auto a, auto b) { return f(a) < f(b); } という内容のものになるだろう。 …

VBAHaskellの紹介 その8 (ソート関連)

VBA

ソート関連は別にHaskellぽくない。特徴と言えるのは任意の比較関数が使えることくらいだ。 関数は8つ、Subがひとつある。 sortIndex 昇順ソート後のインデックス配列sortIndex_pred 任意の比較関数によるソート後のインデックス配列 permutate (Sub) 配列…

VBAHaskellの紹介 その7 (bind1stとbind2nd)

VBA

VBAHaskellにbind1stとbind2ndを追加した。C++の<functional>にあるのとだいたい同じだが、VBAHaskellにおいては関数は初めから何らかの形で束縛されているので、あまり使う場面はないと思う。意味的には引数の"再"束縛なので rebind と名付けるべきなのかもしれない。プ</functional>…

VBAHaskellの紹介 その6 (foldl)

VBA

VBAHaskellで実装しているfoldlは本物のHaskellと同様に、「2引数関数」、「初期値」、「対象リスト」の3つの引数を取る左畳み込み関数だ。VBAでラップはしておらず、Haskell_0_declareモジュールに宣言しているC++ API *1 をそのまま使う。 Declare Functio…

VBAHaskellの紹介 その5 (関数のシグネチャ)

VBA

VBAHaskellはVBAの関数を合成して独立したオブジェクトにしたり、Haskell的なリスト処理をするライブラリだが、それが可能なVBA関数のシグネチャは実質的に1種類しかない。 Function myFunction(ByRef a As Variant, ByRef b As Variant) As Variant または …

VBAHaskellの紹介 その4 (Find)

VBA

きょう、いわゆる検索関数 "find_pred" を追加した。Haskell_1_Coreモジュールに入れている。 Function find_pred(ByRef pred As Variant, ByRef vec As Variant) As Variant 対象配列の中から条件に合致する値を探す関数で、第1引数のpredは検索における条…

VBAHaskellの紹介 その3 (FizzBuzz)

VBA

2015-07-10前のよりずっとわかりやすいFizzBuzzができたので書く。というより下の記事を書いたときは寝ぼけていたとしか思えない。 ' 分かりやすいFizzBuzz fun3 = p_if_else(, Array(p_mod(, 3), placeholder, "Fizz")) fun5 = p_if_else(, Array(p_mod(, 5…

VBAHaskellの紹介 その2 (合成関数)

VBA

続いて関数合成について。 VBAでももちろん関数を合成して計算することはできるが、関数型言語のように合成関数自体を変数に入れたり関数から出力したりすることはできない。 例えばLog(0.1 + Abs(x-5))という計算を多数のxに対して行う場合、普通はこの式を…

VBAHaskellの紹介 その1 (最初はmapF)

VBA

VBAHaskellはHaskellを真似たVBAのライブラリである。 リスト処理系の関数や関数合成などの機能によって退屈な繰り返し処理を減らし、VBAをより面白くするのが目的だ。 その中でもmapFはコアとなる関数で、リンクしたgithubにあるHaskell_1_Coreモジュールの…

HaskellVBAの関数呼び出しの構造を変えた

VBA

関数合成がかなり自然な形に書けるようになったぞ! mYmd/VBAgithub.com

使い方のまとめ

VBA

自分もVBAHaskellの使い方解説を少しずつやっていこう。 とりあえず明日からだ。

HaskellVBA

VBA

モジュール構成を整理し、名称を大幅に変更した。unfoldrはいまいちパッとしないので、代わりに以下の4つの関数を追加した。 repeat_while : 述語による条件が満たされる間繰り返し関数適用 repeat_while_not : 述語による条件が満たされない間繰り返し関…

VBA での関数型プログラミング

VBA

昨日のことだが、VBA で関数型プログラミングを試みている人々がいることが分かったのでフォローしてみた。 F#がベースのようだが、F#は全然知らないので今はなんとも評価できない。