読者です 読者をやめる 読者になる 読者になる

コラッツの問題

なんかErlangで書けって言われた気がする

-module(collatz).
-export([main/1]).

collatz([H|T]) when H /= 1 -> 
  case H rem 2 of
    0 -> collatz([H div 2, H | T]);
    1 -> collatz([3 * H + 1, H | T])
  end;
collatz(X) -> X.

main([X]) ->
  L = lists:reverse(collatz([list_to_integer(X)])),
  io:format("~p~n", [L]);
main(_) ->
  halt(1).
$ escript collatz.erl 11

できればリストの先頭じゃなくて最後尾の値でガードやパターンマッチを書きたいんですけど、良い方法無いんでしょうか?