Maxima 練習 (4)

練習 (3) を解くには FoldList 関数があったほうがいいですが、どうも Maxima にはなさそうです(探し方が足りないのかもしれませんが)。

そこで、練習 (3) はいったん飛ばして、FoldList を自前で定義することを考えていきます。いきなり FoldList を考えてもいいですが、まずは Fold 関数を考えることにします。

引数 func, var0, [var1, var2, var3, ..., varN ] が与えられたときに、次を返す関数を作れ。

func(...(func(func(func(var0,var1),var2),var3),...),varN)


こういうのは再帰で定義するのが良さそうです。

定義する関数を my_fold として・・・

  • list が空なら、var0 を返して終了。
  • そうでなければ、my_fold( func, func(var0, var1), [var2, var3, ... ] ) を呼ぶ。
my_fold( func, var0, list ) := block(
	if( list = [] )
	then
		return( var0 )
	else
		my_fold( func, func( var0, first(list) ), rest(list) )
);