VBA

place_fill 関数の追加(VBAHaskell)

VBA

VBAHaskellにplace_fill という関数を追加して Haskell_2_stdFun.bas モジュールに置いた。 1次元配列内の指定した複数の位置に関数もしくは定数値を適用して、その場所に値を埋めるものだ。 埋めたあと配列そのものをmoveして返す。 ' 配列の特定位置に関数…

Collectionのソート

VBA

t-homさんの記事 thom.hateblo.jp に言及されていた以下の記事にコメントを書きました。 kantoku.hatenablog.com 「コレクションのソートが面白そうなので考えてみたい。」という趣旨のコメントで、一応作ってはみたのですが、Collectionを使ったことがなか…

SQL Server メモ

VBA

SQL Server Express に日経平均株価のヒストリカルデータテーブルをCREATEして、データをINSERTしたときのメモ。 VBAHaskellとvb_ODBC.clsを使用。 1.データの準備 日経平均株価 日足 時系列データ CSVダウンロードから各年のCSVファイルをダウンロードして…

VBAHaskellの改修まとめ

VBA

最近VBAHaskellにいくつか変更をしたのでまとめの記事を書きます。 VBAHaskell全関数リファレンス → VBAHaskell_reference 1. API関数self_zipWithを追加しました 次のようなシグネチャの関数をHaskell_0_declare.basの一番下に追加しました。 ' 1次元配列の…

clone ⇒ swap ⇒ edit ⇒ swap

VBA

VBAHaskellのC++側APIにふたつの関数を追加した。VBAのクラスインスタンスを操作する時のイディオムである swap と clone を実装するのに使う。 (今回もHaskell的な要素はまったくありません。) 以下ではswap は自身の属性と他のオブジェクトの属性をまる…

VBAHaskellリファレンス

VBA

VBAHaskellの関数リファレンスページを作成した。 作り方がよくわからないので、Excelをそのまま htm ファイルにしただけ。 http://home.b07.itscom.net/m-yamada/vh_Manual/VBAHaskell_reference.htm

VBAHaskell ユーティリティを使ってみる

VBA

先日の記事VBAHaskell ユーティリティ群で書いたユーリティティモジュールは、その後いろいろ関数を追加し、記事にも反映した。 サンプルとして、このところ動きの激しい株価データにごく簡単なデータ処理をしてみよう。 まずYahoo!ファイナンスのページから…

VBAHaskell ユーティリティ群

VBA

先日の記事でVBAHaskellに数学関数を入れ始めたが、案の定その後が続かず放置状態になっている。とりあえず気にせずにユーティリティ関数群を追加する事にした。既存の関数のシンタックス・シュガーや特定の集計作業を便利にするための関数の寄せ集めだ。(…

数学関数を入れ始める

VBA

VBAHaskellには数学関数がまだない。四則演算、指数関数、対数関数、多項式、min、max 程度が Haskell_2_stdFun にあるのと、乱数生成機が misc_random にあるだけだ。 とりあえず数学関数を少しずつ書いていくためのbasファイルを追加した。 VBA/misc_math.…

mbind(std::bindのメタ関数版)

VBA

std::bind は<functional>ヘッダにあるC++11の標準ライブラリで、関数やラムダ式など operator() で呼び出すことが可能なオブジェクト(Callable)に対し、引数を部分的に束縛(bind)するものだ。「呼び出し」とは実行時の関数呼び出しのことであり、引数は値である。 ここ</functional>…

VBAHaskellでのコラッツ数列(その2)

VBA

以前この記事で コラッツの問題 - Wikipedia にある数列をVBAHaskellで生成するというのをやってみた。 mmyymmdd.hatenablog.com 今回は、多倍長整数を使ってもっと多くの初期値で試してみた。 このついでに以下の3つのモジュールに変更をしたので、その気が…

アッカーマン操作

VBA

今読んでいる本 『コンピュータは数学者になれるのか? 数学基礎論から証明とプログラムの理論へ (照井一成)』の155ページに アッカーマン操作 というものが登場した。Ackermann関数の数列版みたいなものである。 非負整数の有限列<...>に対して次のような…

2つの表を比較する

VBA

また人様のネタを頂戴する。 整数からなる列がふたつあり、それぞれ 表A、表B とする。それぞれ片側にしかない数字を抽出しようというものだ。 vbaHaskellで短く書くとこうなる。ただし値ではなく、ある/ないの結果を 1 / 0 で表示した。 ab = unZip(mapF(p…

3つの引数を持つ関数

VBA

VBAHaskellで3つ以上の引数を持つ関数をファンクタ化したい。 APIのレベルでそれをサポートする気は今のところないので、VBA側で簡易的な対応をした。 Haskell_1_Core.bas にそれをサポートする関数 make_funPointer_with_3_parameters を追加した。 'ユーザ…

変数への代入

VBA

VBAで、変数に値を代入してそれを直接別の関数に渡したい。 しかし通常の = による代入を使おうとしたら下記の「方法1」ではダメで、「方法2」のように2行に分ける必要がある。 ' 「方法1」 ? UBound(x = Array(1,2,3)) ' NG、xへの代入ではなく等値比較…

C - 友達の友達(AtCoder Beginner Contest 過去問)

VBA

AtCoder Beginner Contest の過去問題(016 2014/12/06 21:05:00 ~ 2014/12/06 23:05:00)をVBAHaskellでやってみた。 C: 友達の友達 - AtCoder Beginner Contest 016 | AtCoder 問題文 高橋くんはSNSの管理者をしています。このSNSではユーザ同士が友達と…

if_else

VBA

以前qiitaに書いたVBAHaskellにおけるFizzBuzz実装の紹介記事で if_else 関数を使った。 qiita.com ここで if_else 関数自体の説明を書く。 if_else およびこれを関数化した p_if_else はHaskell_2_stdFunモジュールにある。 形式 Function if_else(ByRef va…

ジャグ配列をフラットな配列に展開

VBA

コーへーさんのブログからネタを拝借させていただく。 callmekohei.hatenablog.com すでにthomさんもこのネタで記事を書いているので、VBAHaskellを使って少し違う方向性でやってみたい。 目標 ジャグ配列、たとえば Array(1, Array(2, Array(3, Array(4, Ar…

VBA

t-homさんが直近の記事でByRef As Variantで受けたときにアドレスが変わる事象について仮説を書いている。 thom.hateblo.jp 型一致参照であるShowPtr関数とVariant参照であるShowPtr2関数を作って比較し ShowPtr2でVarPtr(IntArg)としたときは、Variant変数…

ByRef As Variant とは?

VBA

(自分用メモ) VBAでByRef x As Longと宣言された仮引数にLong型以外の実引数を渡すと、「ByRef引数の型が一致しません。」というエラーになる。しかしByRef x As Variantという宣言だったら Variant型以外の実引数、たとえばLong型でも渡すことができる。V…

紹介記事の補足

VBA

t-homさんがVBAHaskellの紹介記事を書いてくれた。 thom.hateblo.jp こんなことは僕の人生初なので、とてもうれしい。 ところでそこにapplyFun2by2関数が取り上げられていて少し驚いた。マイナーな関数だと思っていたからだ。t-homさんにはQiitaでも「before…

VBAHaskellで順列の数え上げ

VBA

n 個の元から k-個を選んで得られる順列の総数は下の式で計算できる。 VBAの適当な配列から、このすべての並びを列挙する関数 nPk をVBAHaskellで書いてみる。 (CallMeKohei さんのつぶやきからネタをパクりましたm(_ _ )m) 関数 nPk に任意の配列と取り出…

最近Qiitaに書いた記事へのリンク

VBA

2015/7/25 最近Qiitaに書いた記事へのリンク VBAHaskellの紹介 その22(イテレータ) - Qiitaqiita.com VBAHaskellの紹介 その21(多倍長整数 bigInt) - Qiitaqiita.com

最近Qiitaに書いた記事へのリンク

VBA

最近Qiitaに書いた記事へのリンク <a href="http://qiita.com/mmYYmmdd/items/cc7515e18338ef0fc765" data-mce-href="http://qiita.com/mmYYmmdd/items/cc7515e18338ef0fc765">VBAHaskellの紹介 その20(有理数の計算) - Qiita</a>qiita.com

VBA 配列でつくったテーブルにSQLっぽいことしてみる(パクリ)

VBA

CallMeKoheiさんのブログ記事「VBA 配列でつくったテーブルにSQLっぽいことしてみる(その2)」をパクってみるという、はなし。 arr = Array(Array(Array("品番", "a"), Array("品名", "apple"), Array("価格", 100#)), _ Array(Array("品番", "b"), Array("…

VBA

前回記事 VBAHaskellの紹介 その15(引数の部分文字列のリストを取り出す) で、問題を解くためのアドホックな関数を定義して使ったことを不満点としてあげた。 VBAHaskellで実装している関数合成はスコープがフラットで、すべてのプレースホルダに実引数を…

VBAHaskellの紹介 その15(引数の部分文字列のリストを取り出す)

VBA

「関数プログラミング実践入門」に記載されている問題についての解説記事を別のところで見かけた。解説が面白かったし、VBAHaskellで実装を試みるのに手頃だったのでやってみたが、あまりいい結果にはならず課題が残った。 segments という関数で、引数に文…

VBAHaskellの紹介 その14(変数のムーブ)

VBA

Haskellと全く関係ない話題だが、VBAHaskellでは効率上の理由からVariant変数のムーブ・セマンティクスを実装して利用している。APIにある moveVariant 関数だ。*1効率とは、関数で配列を返す時に発生するローカル変数のコピーなどのことである。 ' 0 から n…

ネストした関数を可視化するユーティリティ

VBA

2015/4/16の記事 VBAHaskellの紹介その7(bind1stとbind2nd) で記述に誤りがあった。bind1stとbind2ndの中身がどうなっているかの説明で、bind1stで上書きされない変数を上書きされると間違えていたのだ。VBAHaskellの関数は配列なので直接見えないし、ネス…

VBAHaskellの紹介 その13 (プレースホルダの追加: _1 と _2 )

VBA

VBAHaskellで2変数関数を合成するときの自由度を高めるために新しいプレースホルダ ph_1 と ph_2 を導入した。これの直接のきっかけは以下の問題 *1 を解くことだった。 問題4 正の整数のリストを与えられたとき、数を並び替えて可能な最大数を返す関数を記…