読者です 読者をやめる 読者になる 読者になる

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(略

 

 

*1:クロージャ」の使い方が正しいのかいまいち自信がないまま書いています。