Saya sedang mengerjakan latihan latihan dan tidak tahu mengapa saya mendapatkan kesalahan berikut:
(CompileError) anagram.exs:19: cannot invoke remote function String.codepoints/1 inside match
(stdlib) lists.erl:1353: :lists.mapfoldl/3
(stdlib) lists.erl:1353: :lists.mapfoldl/3
Saya kira saya tidak memahami pencocokan pola sebaik yang saya kira karena saya tidak begitu mengerti bagaimana saya mencoba memanggil fungsi jarak jauh di dalam kecocokan. Berikut adalah beberapa contoh rangkaian pengujian untuk konteks:
defmodule AnagramTest do
use ExUnit.Case
test "no matches" do
matches = Anagram.match "diaper", ["hello", "world", "zombies", "pants"]
assert matches == []
end
test "detect simple anagram" do
matches = Anagram.match "ant", ["tan", "stand", "at"]
assert matches == ["tan"]
end
Ini kode saya:
defmodule Anagram do
@doc """
Returns all candidates that are anagrams of, but not equal to, 'base'.
"""
@spec match(String.t, [String.t]) :: [String.t]
def match(base, candidates) do
base
|> String.codepoints
|> Enum.sort
|> scan_for_matches(candidates)
end
defp scan_for_matches(base, candidates) do
Enum.scan candidates, [], &(if analyze(&1, base), do: &2 ++ &1)
end
defp analyze(candidate, base) do
candidate
|> String.codepoints
|> Enum.sort
|> match?(base)
end
defp match?(candidate, base) do
candidate == base
end
end
Bukankah saya hanya meneruskan variabel ke fungsi analyze/2
sehingga pada akhirnya mengembalikan boolean
? Saya menghargai wawasan apa pun.
match?/2
, saya belum mencoba menemukan kesalahan lain dalam kode tetapi akan dikompilasi jika saya mengubah fungsi itu ke fungsi lain. Pasti sesuatu yang dilindungi undang-undang. - person NoDisplayName   schedule 21.02.2016