[erlang-questions] guards

Johnny Billquist bqt@REDACTED
Sat Jul 25 11:03:41 CEST 2009


Dave Pawson wrote:
> 2009/7/25 Hynek Vychodil <vychodil.hynek@REDACTED>:
>>
>> On Sat, Jul 25, 2009 at 4:50 AM, Dave Pawson <dave.pawson@REDACTED> wrote:
>>> filterHelper(Lst,Int,Result) when ((length(Lst) == 1) and
>>> (lists:nth(1,Lst) =< Int)) ->
>>>    [lists:nth(1,Lst) | Result];
>> It is little bit overcomplicated version of
>>
>> filterHelper([X], Int, Result) when X =< Int -> [X|Result];
> 
> Mmm. Thanks... I think :-)
> (I'm trying to learn!)
> 
> Does that check for a list length of 1?

A pattern of [X] can only match a list with one element.
If the list have two elements, you'd have to write [X,Y] to match, and 
so on...
If you want to match a list of unknown length, where you want to look at 
the first element, you should write [X|Y]. Y will then be the list with 
all the remaining elements after the first, which is bound to X.
Check the first two elements by [X,Y|Z], and so on...

And of course, to match a list with no elements, you write []. :-)

	Johnny

-- 
Johnny Billquist                  || "I'm on a bus
                                   ||  on a psychedelic trip
email: bqt@REDACTED             ||  Reading murder books
pdp is alive!                     ||  tryin' to stay hip" - B. Idol


More information about the erlang-questions mailing list