VBAHaskellでのNull除外
配列の中のNullを別の値に変換して計算(ここでは乗算)するという単純な事例だが、2通り。
1. いったん Null を 1 に変換した配列を作る。そのあとその配列に対する掛け算をする。内側にある mapF(p_replaceNull(, 1), arr) によって新しい配列が作られている。
arr = Array(1, 2, 3, Null, 5, 7, Null, 9)
? foldl1(p_mult, mapF(p_replaceNull(, 1), arr))
1890
2. 「Null を 1 に変換してから掛け算する」をひとつのクロージャとして定義する。*1下記の fn がそれである。
arr = Array(1, 2, 3, Null, 5, 7, Null, 9)
fn = p_mult(p_replaceNull(, 1), p_replaceNull(, 1))
? foldl1(fn, arr)
1890
replaceNull は下記の通り単純なもので、以前FizzBuzzを実装するのに使った。
Haskell_2_stdFunモジュールにあるライブラリ関数である。
'Nullを他の値に置換する
Function replaceNull(ByRef x As Variant, ByRef alt As Variant) As Variant
If IsNull(x) Then
replaceNull = alt
Else
replaceNull = x
End If
End Function
Function p_replaceNull(略