[erlang-questions] What is allowed in a pattern in terms of string concatenation?

Reynaldo Baquerizo reynaldomic@REDACTED
Mon Jun 27 18:12:39 CEST 2011


On Mon, 27 Jun 2011 11:52:44 -0400
Daniel Dormont <dan@REDACTED> wrote:

> Suppose I want to test that a certain string String1 ends with a
> certain other string String2. The best I could come up with is:
> 
> case string:substr(lists:reverse(String1), 1, length(String2)) of
> 	String2 -> ok;
> 	_ -> not_ok
> end
> 
> I was thinking there must be a better way, but various attempts along
> the lines of case String1 of
> 		_ ++ String2 -> ok;
> 
> all returned "illegal pattern" errors. I couldn't find a clear
> explanation online of when exactly ++ is allowed in a pattern and
> when it's not, so I'm a bit stumped. Is there a better way?

I can think of one using pattern matching,

is_substring(Substr, Substr) ->
    true;
is_substring(String, Substr) ->
    [_|T] = String,
    p5(T, Substr).

you'd have to wrap it in a try ... catch for badmatch

--
Reynaldo



More information about the erlang-questions mailing list