【Erlang】シェルで再帰関数定義ができない!? | さすらいびとの徒然漂流記

さすらいびとの徒然漂流記

ふらふら漂流するさすらいびとのように,色々な話題についてお気楽極楽,徒然なるままに…

ちょっとしたことからなんだけど,

お手軽にErlangのシェルで

リストの要素の和をとる関数を

書いて試そうとしたんだけど,

やり方がまったくわからない.


ファイルで関数定義する方法は

腐るほどあるんだけど,

シェルで再帰を書く方法が

簡単に見つけられなかった…


本当はこんな感じで書きたかったんだけど…


1> Sum = fun([H|T]) -> H + Sum(T);
            ([])    -> 0
         end.

するとこんなエラーになる:


* 1: variable 'Sum' is unbound


まあ,当然だわな.

ちなみに2つ目の Sum -> fun に変えても,


* 1: syntax error before: ';'


って怒られてダメ.


で,あきらめかけてたんだけど,

いろいろ探し回ってやっと方法が判明.

1> Sum = fun([H|T]) ->
           F = fun(G, [X|Y]) -> X + G(G, Y);
                  (G, [])    -> 0
           end,
           F(F, [H|T])
         end.

これでOK!って,何じゃこりゃ.


シェルだけでプログラムの動作確認は

できないってことか…


普通に再帰で書きたいよ~.