2017-03-27 1 views
0

私の最初の質問はansweredだったので意味があります。ソート後にリストの長さを出力することはできましたが、もともと私はsort/0のためにio:format関数を使う方法を求めていました。しかし、私の次のフォローアップは、どのようにsort/1でそれを使うのでしょうか?私はそれを与えるためにそれを動作させることができましたが、再帰中にそれを与えているので、私は複数の行を間違って取得しています。私の質問は、io:フォーマットを行うには、クイックソートで終わったらどうすればいいのでしょうか(また、リストにはリピートがないようにしたい)ので、私は複数の行の代わりに1行だけを取得します以下?ここでクイックソートを実行した後にerlangがリストの長さを出力する - 第2部

は、私が持っているものだと取得しています:

-module(list). 
-export([sort/1]). 

sort([]) -> []; 


sort([First|Rest]) -> 

    io:format("~nThe length of the list is ~w~n", [length([First]++Rest)])), 


    sort([ X || X <- Rest, X < First]) ++ 
    [First] ++ 
    sort([ X || X <- Rest, X > First]). 

、出力を:

56> list:sort([2,2,2,3,3,3,1,1,8,6]). 

The length of the list is 10 

The length of the list is 2 

The length of the list is 5 

The length of the list is 2 

The length of the list is 1 
[1,2,3,6,8] 

ので、重複なしでソートされたリストが正しいですが、どのように私はIOに適合しない:フォーマット機能このように表示するには?

56> list:sort([2,2,2,3,3,3,1,1,8,6]). 

[1,2,3,6,8] 
The length of the list is 5 

答えて

3

私が間違っていない限り、あなたはそれがあるとしてio:format/2 inside再帰関数の使用を区別できるようにするつもりはありません。

印刷を再帰的な部分から分離することができます。

sort(L)-> 
    Result = quicksort(L), 
    io:format("~nThe length of the list is ~w~n", [length(Result)]), 
    Result. 

quicksort([]) -> []; 
quicksort([First|Rest]) -> 
    quicksort([ X || X <- Rest, X < First]) ++ 
    [First] ++ 
    quicksort([ X || X <- Rest, X > First]). 
+0

私の問題は、関数内の関数として考えていないことです。だからこれは理にかなっている。私のルーキーの質問にお返事いただきありがとうございます。 – chitown88

関連する問題