У меня нелегальное охранное выражение '
В erlang вы не можете вызывать какую-либо функцию в охране, например, строка: ул (). Erlang разрешает использовать только очень ограниченный набор вызовов функций для защиты. См. Раздел 8.25 Защитные последовательности .
Однако вы можете использовать оператор case внутри тела функции для выполнения вызова функции, который недопустим в Guard, а затем проверить возвращаемое значение:
-module(my).
-compile(export_all).
func(N, Str, Pattern) when N rem 2 == 0 ->
case string:str(Str, Pattern) of
0 -> io:format("The string '~s' does not contain the pattern '~s'.~n",
[Str, Pattern]);
Index -> io:format("'~s' contains the pattern '~s' at index ~w.~n",
[Str, Pattern, Index])
end.
В оболочке:
29> c(my).
my.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,my}
30> my:func(4, "HelloWorld", "cat").
The string 'HelloWorld' does not contain the pattern 'cat'.
ok
31> my:func(4, "HelloWorld", "World").
'HelloWorld' contains the pattern 'World' at index 6.
ok