@tailrec
def unfoldr
_foldl
[A, B, C
](f
: A
=> Option
[(A, B
)])(a
: A
)(g
: B
=> C
=> C
)(c
: C
): C
= f
(a
) match { case Some
((a, b
)) => unfoldr
_foldl
(f
)(a
)(g
)(g
(b
)(c
)) }
def main
(args
: Array
[String
]) { val a
= unfoldr
_foldl
[Int,String,Int
](i
=> List
("1",
"2",
"3",
"end")(i
) match { })(0)(a => b => a.toInt + b)(0)
println(a)
}
}
b2JqZWN0IE1haW4gewogIGltcG9ydCBzY2FsYS5hbm5vdGF0aW9uLl8KICBAdGFpbHJlYwogIGRlZiB1bmZvbGRyX2ZvbGRsW0EsIEIsIENdKGY6IEEgPT4gT3B0aW9uWyhBLCBCKV0pKGE6IEEpKGc6IEIgPT4gQyA9PiBDKShjOiBDKTogQyA9IGYoYSkgbWF0Y2ggewogICAgIGNhc2UgTm9uZSA9PiBjCiAgICAgY2FzZSBTb21lKChhLCBiKSkgPT4gdW5mb2xkcl9mb2xkbChmKShhKShnKShnKGIpKGMpKQogIH0KICBkZWYgbWFpbihhcmdzOiBBcnJheVtTdHJpbmddKSB7CiAgICB2YWwgYSA9IHVuZm9sZHJfZm9sZGxbSW50LFN0cmluZyxJbnRdKGkgPT4gTGlzdCgiMSIsICIyIiwgIjMiLCAiZW5kIikoaSkgbWF0Y2ggewogICAgICBjYXNlICJlbmQiID0+IE5vbmUKICAgICAgY2FzZSBzID0+IFNvbWUoaSArIDEsIHMpCiAgICB9KSgwKShhID0+IGIgPT4gYS50b0ludCArIGIpKDApCiAgICBwcmludGxuKGEpCiAgfQp9Cgo=