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

Haskellで惨敗

Haskellで組み合わせ探索を書いたら途中で分けわからんくなった
なんか出来てる気がするが超遅い、かといって早くする方法がさっぱりわからなかったりする

手続き型言語でやり直したらすぐ出来た(・ω・;)


でも悔しいのでVBでfoldlとfoldrを書いてみた
キモーイ、たぶんVBじゃぁ使わないな

'<Extension>
Public Shared Function FoldLeft(Of T, R)(xs As IEnumerable(Of T), f As Func(Of R, T, R), acc As R) As R

    Dim xxs = xs.GetEnumerator
    Do While xxs.MoveNext

        Dim v = xxs.Current
        acc = f(acc, v)
    Loop
    Return acc
End Function

'<Extension>
Public Shared Function FoldRight(Of T, R)(xs As IEnumerable(Of T), f As Func(Of R, T, R), acc As R) As R

    Dim xf As Func(Of IEnumerator(Of T), R) =
        Function(a As IEnumerator(Of T)) As R

            If a.MoveNext Then

                Dim v = a.Current
                Return f(xf(a), v)
            Else
                Return acc
            End If
        End Function
    Return xf(xs.GetEnumerator)
End Function