前回の目標であった、FoldList 関数を定義します。
引数 func, var0, [ var1, var2, var3, ..., varN ] が与えられたときに、次のリストを返す関数を作れ。ただし、my_fold は練習 (4) で定義した関数とする。
[ var0, my_fold( func, var0, [ var1 ] ), my_fold( func, var0, [ var1, var2 ] ), ..., my_fold( func, var0, [ var1, var2, ..., varN ] ) ]
前回と同様、再帰で定義します。
my_foldlist( func, var0, list ) := block( if( list = [] ) then return( [ var0 ] ) else return( append( [ var0 ], my_foldlist( func, func( var0, first(list) ), rest(list) ) ) ) );