2015-01-01から1年間の記事一覧

数学関数を入れ始める

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>…

P0051: C++ generic overload function

C++

江添氏のブログに「C++標準化委員会の文書: P0050R0-P0059R0」という記事が掲載されていて、その中にオーバーロード解決のためのoverload関数テンプレートの提案が含まれている。 本の虫: C++標準化委員会の文書: P0050R0-P0059R0 オーバーロード関数を生成…

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++14ラムダでの< > テンプレート?

C++

さきほどqiitaに書いた記事、 qiita.com でC++のラムダ式に言及したのだが、よくわからなくなった。 まず、 []<typename T>(T const& a, std::vector<std::vector<T>> const& b){ auto tmp = b; for ( auto& i : tmp ) i.insert(i.begin(), a); tmp.insert(tmp.begin(), std::vector<T>{1, </t></std::vector<t></typename>…

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 正の整数のリストを与えられたとき、数を並び替えて可能な最大数を返す関数を記…

比較関数の自然な例(2)

VBA

昨日の VBAHaskellの紹介 その12 では、5つある問題のうち5番目だけを対象にした。今考えると、元記事 「1時間以内に解けなければプログラマ失格となってしまう5つの問題が話題に」 にある問題4 問題4 正の整数のリストを与えられたとき、数を並び替えて可能…

constexprカウンタ

C++

きのうtwitter上で紹介されていた、いわゆるconstexprカウンタのコード。 &lt;a href="http://melpon.org/wandbox/permlink/Ddng0P1vvVkBTUlt" data-mce-href="http://melpon.org/wandbox/permlink/Ddng0P1vvVkBTUlt"&gt;[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ&lt;/…

VBAHaskellの紹介 その12 (1時間以内に解けなければプログラマ失格がなんたら)

VBA

今日、表題の記事が話題になっていた。1時間以内に解けなければプログラマ失格となってしまう5つの問題が話題に5問あるうち、最後の「問題5」をVBAHaskellでやってみようと思った。 問題5 1,2,…,9の数字をこの順序で、”+”、”-“、またはななにもせず結果が100…

VBAHaskellの紹介 その11 (木構造)

VBA

やっと「すごいHaskellたのしく学ぼう!」の7章まで進んだところ、139ページから始まる二分木の解説の中で、「リストを1要素ずつ辿って値を返す操作はたいがい畳み込みで実装できる」という表現に感銘を受けた。 let nums = [8,6,4,1,7,3,5] let numsTree =…

VBAHaskellでのNull除外

VBA

配列の中のNullを別の値に変換して計算(ここでは乗算)するという単純な事例だが、2通り。 1. いったん Null を 1 に変換した配列を作る。そのあとその配列に対する掛け算をする。内側にある mapF(p_replaceNull(, 1), arr) によって新しい配列が作られてい…

VBAHaskellでのコラッツ数列

VBA

コラッツの問題 - Wikipedia 「任意の正の整数 n をとり、 ・ n が偶数の場合、n を 2 で割る ・ n が奇数の場合、n に 3 をかけて 1 を足すという操作を繰り返すと、どうなるか」 素直にファンクタを作れる。(長いけど)collatz = p_if_else(, Array(p_mod…