# [erlang-questions] List comprehension puzzler

lloyd <>
Tue Sep 20 15:44:30 CEST 2016

```'Lo again Hernando,

Shortly after I responded to your post I realized that you might be interested in the problem that led to my list comprehension puzzler question:

I'm working on a web application that requires users to enter International Standard Book Numbers (ISBNs). Thus I need a function to validate the format of user input.

ISBNS are either 10 or 13-digits. The standard specifies a check-sum algorithm, but that seemed too complicated for my purposes. So, after struggling with the list comprehension puzzler and Dan Gudmundsson's helpful input, I came up with this:

isbn_format_valid(ISBN) ->
D = fun(I) -> (I >= \$0) and (I =< 9) end,
NotIntegers = [I || I <- ISBN, D(I) == true],
Flag1 = NotIntegers == [],
Flag2 = (length(ISBN) == 13) or (length(ISBN) == 10),
Flag1 and Flag2.

As you can see, our minds ran down the same track.

There may be a faster, more elegant, way to solve the problem, but this seems to do the job. Now if I can only figure out how to use the Library of Congress API to retrieve book data...

Lloyd

-----Original Message-----
From: "Lloyd R. Prentice" <>
Sent: Tuesday, September 20, 2016 12:41am
To: "Hernando Gisinger" <>
Cc: "" <>
Subject: Re: [erlang-questions] List comprehension puzzler

_______________________________________________
erlang-questions mailing list

http://erlang.org/mailman/listinfo/erlang-questions
Hi Hernando,

I came up with almost the exact same code after Dan Gudmunsson pointed out the error  of my ways.

Many thanks for the solution.

Best wishes,

Lloyd

> On Sep 19, 2016, at 11:01 PM, Hernando Gisinger <> wrote:
>
> Hello
>
> 1> IsDigit = fun(C) -> C >= \$0 andalso C =< \$9 end.
> #Fun<erl_eval.6.52032458>
> 2> S = "123a456".
> "123a456"
> 3> [IsDigit(I) || I <- S].
> [true,true,true,false,true,true,true]
>
>
> 2016-09-18 13:56 GMT-03:00 <>:
>> Hello,
>>
>> Now this I would not expect:
>>
>> 4> S = "123a456".
>> "123a456"
>>
>> 5> is_integer(S).
>> false
>>
>> 6> [is_integer(I) || I <- S].
>> [true,true,true,true,true,true,true]
>>
>> Please tell me what I don't understand.
>>
>> Many thanks,
>>
>> LRP
>>
>>
>> *********************************************
>> My books:
>>
>> THE GOSPEL OF ASHES
>> http://thegospelofashes.com
>>
>> Strength is not enough. Do they have the courage
>> and the cunning? Can they survive long enough to
>> save the lives of millions?
>>
>> FREEIN' PANCHO
>> http://freeinpancho.com
>>
>> A community of misfits help a troubled boy find his way
>>
>> AYA TAKEO
>> http://ayatakeo.com
>>
>> Star-crossed love, war and power in an alternative
>> universe
>>
>> Available through Amazon or by request from your
>> favorite bookstore
>>
>>
>> **********************************************
>>
>> _______________________________________________
>> erlang-questions mailing list
>>
>> http://erlang.org/mailman/listinfo/erlang-questions
>

```