文字列のリストをmergesortでソートしようとしています。私の問題は、文字列の最初の文字を比較する方法がわからないことです。
私の考えはこれでしたが、これは2つの問題につながります:
merge([],X) -> X;
merge(X,[]) -> X;
merge([X|XS],[Y|YS]) when check_swap(X,Y)-> [X] ++ merge(XS,[Y|YS]);
merge([X|XS],[Y|YS]) -> [Y] ++ merge([X|XS], YS).
sort([]) -> [];
sort([A|[]])-> [A];
sort (L) -> Len=length(L) div 2,
merge(sort(lists:sublist(L, Len)),sort(lists:nthtail(Len, L))).
%check if strings should be swaped or not
change_strings(StingA,StringB) when lists:nth(1,StingA)<lists:nth(1,StringB)->true;
....
問題は、when、case、または if の後に関数を呼び出せないことです。これを行うためのより良い方法は何ですか?
./textSort.erl:28: ローカル/インポートされた関数 check_swap/2 の呼び出しはガードで不正です
問題: さまざまな条件を AND と OR で組み合わせるにはどうすればよいですか。", ; or and orelse andalso" はいつ使用するのですか? また、他の言語のように () 順序でそれらを組み合わせるにはどうすればよいですか? より良い方法はありますか
change_strings(X,Y) when (A < B,B==3) ; (A < B,B==4) -> 真;
簡単に失敗しますように。erlang を始めたばかりです。