[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...

Thanks again for your post,

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

Sent from my iPad

> 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
> 




More information about the erlang-questions mailing list