Maxima 練習 (5)

前回の目標であった、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) ) ) )
);