1

ソースコード:

suffix(Suffix, List) ->
    Delta = length(List) - length(Suffix),
    Delta >= 0 andalso nthtail(Delta, List) =:= Suffix.

以下のように書き換えてみてはいかがでしょうか。

suffix(Suffix, List) ->
    prefix(reverse(Suffix), reverse(List)).

Delta >=0 の場合、最初のものは 4 回トラバースし、2 つ目は 3 回トラバースしますが、正しいですか?

4

2 に答える 2

-1

それは正しくないと思います。私の知る限り、長さは結果を取得するためにリストをトラバースする必要のない組み込み関数であり (これがガード テストで許可されている理由です)、andalso は一種のショートカットです。最初の項が false の場合、2 番目の項は評価されず、直接 false が返されます。

于 2013-11-08T10:18:25.400 に答える