MovableTypeの変数タグでフィボナッチ数列

Posted by
ぴろり
Posted at
2008/02/19 21:52
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
MovableType カテゴリ

 MovableType4になってからテンプレートタグが大幅に強化されました。同時にテンプレート内で利用できる変数関係の操作も強化され、これによってテンプレートをプログラミング言語のように構造化して扱うことができるようになっています。
 今回、頭の体操も兼ねて MovableType のテンプレートタグだけを用いてフィボナッチ数を計算してみました。…実用性は多分ありません。

このエントリーをはてなブックマークに追加  

 フィボナッチ数のような数列の計算は、C言語の演習などでは再帰関数の例として良く目にするほど有名です。MovableType4になって追加された<MTSetVarTemplate>テンプレートタグを利用すると、テンプレートタグを関数のように扱うことができます。しかも、自分自身を呼び出すことで擬似的に再帰関数を実現できてしまうのでした。
 ただし、<MTSet/GetVar>で扱える変数がグローバル変数のみで、ローカル変数やレキシカル変数は存在しないため、変数の局所化ができません。そのため、記述方法がC言語の関数とは少し赴きが違ってきます。

<MTSetVar name="fib" index="1" value="1">
<MTSetVar name="fib" index="2" value="1">

<MTSetVarTemplate name="Fibonacci">
  <MTUnless name="fib" index="$fib_x">
    <MTSetVar name="fib_x" op="--">
    <MTSetVarBlock name="fib_1"><MTGetVar name="Fibonacci" regex_replace="/s+/",""></MTSetVarBlock>
    <MTSetVar name="fib_x" op="--">
    <MTSetVarBlock name="fib_2"><MTGetVar name="Fibonacci" regex_replace="/s+/",""></MTSetVarBlock>
    <MTSetVar name="fib_x" op="++">
    <MTSetVar name="fib_x" op="++">
    <MTSetVar name="fib" index="$fib_x" value="$fib_1">
    <MTSetVar name="fib" index="$fib_x" value="$fib_2" op="+">
  </MTUnless>
  <$MTGetVar name="fib" index="$fib_x"$>
</MTSetVarTemplate>

<MTSetVar name="fib_x" value="10">

fib(<$MTGetVar name="fib_x"$>) = <$MTGetVar name="Fibonacci" regex_replace="/s+/",""$>

 メモ化しているのでfib(100)程度であれば難なく計算できるようですが、あまりに大きな項を求めようとすると、サーバと心中することになるかもしれません。パフォーマンスは恐ろしく悪いでしょうね(笑)

このエントリーをはてなブックマークに追加  


この記事のアーカイブ

全ての記事 »
2008年
全てのカテゴリ »
MovableType
全てのタグ »
, ,

関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。