maxima入門

ラムダ式

ラムダ式とは他のプログラミング言語などにあるそれと同じく
関数のように扱える無名の関数式のことで匿名関数などとも呼ばれます。

ラムダ式の書式は次のとおりです。

ラムダ式の書式

lambda([ローカル変数リスト],処理本体)
次のように、ブロックを含む関数定義の式は ラムダ式として置き換えることが出来ます。

ラムダ式と関数定義

f(x,y) := block([],...) これは lambda([x,y],...) と同じ
簡単な例を見てみましょう。

ラムダ式の例

(%i1) lambda([i],i+1)(10); (%o1) 11
これは与えられた式に1を足すラムダ式です。 ラムダ式は関数のように扱えるので 直後に括弧をおいて関数呼び出しをしています。 ラムダ式を使うと、関数を定義せずに 関数を用いたのと同様な処理が可能となります。 これは、関数を引数にとる関数(高階関数)などと組み合わせると便利です。 高階関数の例としてmap関数があります。 map関数の書式は次のとおりです。

map関数の書式

map(1引数関数、リスト) map(2引数関数,リスト1,リスト2) ... map(n引数関数,リスト1,...,リストn)
map関数はリストの各要素を引数にとり、関数を適用して結果からなるリストを返します。 渡す関数には自分で定義した関数でも組み込み関数もラムダ式でも 使用することができます。 2引数以上の関数を渡すmap関数は、haskellなどではzipWithと呼ばれている関数に相当します。

map関数の使用例

(%i1) map(lambda([x],x+1),[1,2,3]); (%o1) [2,3,4] (%i2) map(lambda([x,y],x+10*y),[1,1,1],[2,3,4]); (%o2) [21,31,41] (%i3) map(sin,[0,%pi,%pi/2]); (%o3) [0,0,1] (%i4) map(atan2,[x,y,z],[a,b,c]); (%o4) [atan2(x,a),atan2(y,b),atan2(z,c)] (%i5) f(x):=x^3$map(f,[1,2,3]); (%o5) [1,8,27]
since 2014/03/23