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

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カウンタのコード。 <a href="http://melpon.org/wandbox/permlink/Ddng0P1vvVkBTUlt" data-mce-href="http://melpon.org/wandbox/permlink/Ddng0P1vvVkBTUlt">[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ</…

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…