1

シンボリック変数を評価する再帰関数を書きたいと思います。Pythonの例を次に示します。

x = ["x0",...]
y = ["y0",...]
def f(n):
    if n<=0:
        return x[0]
    t1 = x[n]
    t2 = y[n]
    r = f(n-1)
    return t1+t2+r

Mathematicaでそれを再実装するにはどうすればよいですか?

変数名を手動で作成してみました:

toFixedWidth[n_Integer, width_Integer] := \
StringJoin[PadLeft[Characters[ToString[n]], width, "0"]]
make_var[i_] := ToExpression[StringJoin["x", toFixedWidth[i, 2]]]
xtab := Table[{make_var[i]}, {i, 0, 10}]
xtab

しかし、それは機能しません:

{{make_var[0]}, {make_var[1]}, {make_var[2]}, {make_var[3]}, {
  make_var[4]}, {make_var[5]}, {make_var[6]}, {make_var[7]}, {
  make_var[8]}, {make_var[9]}, {make_var[10]}}

式がどのように展開されるか(例よりも複雑な関数の場合)を確認したいので、すべての変数をシンボリックにします。

4

1 に答える 1

3

アンダースコアはパターンマッチング用に予約されています(Blank)。makevar代わりに試してください:

toFixedWidth[n_Integer, width_Integer] := 
 StringJoin[PadLeft[Characters[ToString[n]], width, "0"]]
makevar[i_] := ToExpression[StringJoin["x", toFixedWidth[i, 2]]]
xtab := Table[{makevar[i]}, {i, 0, 10}]
xtab
{{x00}, {x01}, {x02}, {x03}, {x04}, {x05}, {x06}, {x07}, {x08}, {x09}, {x10}}

ちなみに:

Table[Unique["x"], {11}]
{x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11}
于 2012-07-01T13:00:25.513 に答える