1

私はErlangを学んでおり、本から演習を行っています:

「フォーマット [1,2,..,N-1,N].create(3) -> [1,2,3] のリストを返す関数を書きなさい。」

私は解決策を持っています:

create(N) ->   create(1, N).
create (M,M) ->  [M];
create(M,N) -> [M | create(M+1, N)].

何十回も試しましたが、ソリューションの 2 行目で何が起こっているのか理解できません。誰か説明してくれませんか?ありがとうございました。

編集。わかりました、それで私はそれを理解するための正しい軌道に乗っていると思います. 2 行目では、基本的に 1 が頭に、N が尾に移動する新しいリストが作成されます。はいの場合、3 行目の M は 2 行目で作成した新しいリストを表し、N は 1 行目の入力整数を表しますか? 再度、感謝します。

4

2 に答える 2

2

ソリューションの 2 行目は、単純に再帰関数の基本ケースです。

2 つの数値が同じ create(3, 3) の場合、再帰関数によって [3] のリストが返され、そこからリストが作成されます。

create(3) -> create(1, 3) -> [1 | 作成] 作成 (2, 3)] -> [2, | 作成 (3, 3)] -> [3] -> [2 | [3]] -> [1 | [2, 3]] -> [1, 2, 3]

于 2013-09-22T22:48:10.980 に答える
1
create (M,M) ->  [M];

これは単純に、M から M までのリストを作成することを意味し、このリストには M という数字が 1 つしかありません。

例えば、

create (1,1) 

リストは 1 で始まり 1 で終わるため、[1] が返されます。

于 2013-09-22T22:48:02.887 に答える