Send Beginners mailing list submissions to
        beginners@haskell.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://www.haskell.org/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
        beginners-requ...@haskell.org

You can reach the person managing the list at
        beginners-ow...@haskell.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1. Re:  How to convert a float or double number into a string?
      (Stephen Tetley)
   2. Re:  recursive and non recursive functions (Brent Yorgey)
   3. Re:  How to convert a float or double number into a string?
      (Oscar Benjamin)
   4. Re:  using the joker "_" on a constructor (TP)


----------------------------------------------------------------------

Message: 1
Date: Wed, 18 Sep 2013 17:47:00 +0100
From: Stephen Tetley <stephen.tet...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] How to convert a float or double
        number into a string?
Message-ID:
        <CAB2TPRDNRywcdJUCRE9xGRrtDUhdS-WJnxBMmfb3gfe5=2e...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"

It you don't mind truncation from the outset there is Data.Fixed.


On 18 September 2013 17:16, David McBride <toa...@gmail.com> wrote:

> Show is not truncating anything.  Show never had those digits to read from
> in the first place.  The problem is that once you convert to floats or
> doubles, the number will be truncated.  They do not have infinite
> precision.  You cannot pass a literal float and have it go to infinite
> precision.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20130918/76b1c250/attachment-0001.html>

------------------------------

Message: 2
Date: Wed, 18 Sep 2013 15:31:59 -0400
From: Brent Yorgey <byor...@seas.upenn.edu>
To: beginners@haskell.org
Subject: Re: [Haskell-beginners] recursive and non recursive functions
Message-ID: <20130918193159.ga24...@seas.upenn.edu>
Content-Type: text/plain; charset=utf-8

On Wed, Sep 18, 2013 at 12:41:54AM -0600, Dan Lior wrote:
> The following snippet is from a recent stack overflow post (by someone else). 
> 
> 
> 
> 7
> down vote
> accept
> I'd like to mention an important distinction:
> 
> cyclic' = [0,1] ++ cyclic'
> 
> cyclic'' = [0,1] ++ x
>     where x = cyclic''
> These two functions are recursive. But
> 
> cyclic = let x = 0 : y 
>              y = 1 : x
>          in x
> is not! It uses x internally, which is recursive, but the whole cyclic isn't. 
> This is also why they're different when compiled into the core language.
> 
> This has some important practical implications, namely that recursive 
> functions can't be inlined, but non-recursive can. 
> 
> Presumably, 
> 
> cyclic = let 
>               x = [0,1] ++ y
>               y = x
>              in x
> 
> is another "nonrecursive function".
> 
> I don't understand the distinction. I imagine that it is related to the 
> let?in clause, but I don't think that I understand that either. Can someone 
> try to clarify this ?
> 
> dan

The distinction is simply this: given a definition

  foo = ...

does foo show up in the ..., i.e. on the right-hand-side of its own
definition, or not?  If foo shows up in its own definition, it is
recursive.  If not, it is not recursive.  E.g. it is easy to see that in

  cyclic = let x = 0 : y 
               y = 1 : x
           in x

'cyclic' does not show up on the right-hand side of its own
definition.

-Brent


------------------------------

Message: 3
Date: Wed, 18 Sep 2013 23:46:27 +0100
From: Oscar Benjamin <oscar.j.benja...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] How to convert a float or double
        number into a string?
Message-ID:
        <CAHVvXxT6RT-QDHxoQf66YnYcYJCaxs92VKA-Ro3=x3rzo9t...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

On 18 September 2013 16:07, yi lu <zhiwudazhanjiang...@gmail.com> wrote:
> You are right! I hope to input a number, for example 123, and output its
> text "one hundred and twenty-three".
> So, for 1.23456789012345678901, I want the result is "one point two three
> four five six ...(something omitted)".

You should probably explain this at the beginning!

> I can define a funciton, say "toText", to preform this action.
> In ghci, I can use like this.
> Prelude>toText 123.45
> "one hundred and twenty-three point four five"
>
> However, in this function, I have to read this number as String(originally a
> number, now "123"), and make it to words(String) like "one two three".
> But for a float number, it will not work very well.
> Prelude>toText 1.23456789012345678901
> "(a truncated answer)"
>
> This confuses me!

I suspect you don't yet understand what a float really is:
http://en.wikipedia.org/wiki/Single-precision_floating-point_format

If you do understand what a single (or double) precision float is then
consider this: most values cannot be exactly represented by the float
type. When you ask Haskell to create a float with some value given as
a decimal string it will usually not return a float with the exact
value you asked for since this is often impossible. Instead it will
only promise to give you a "close" value.

For your problem I would just use string manipulation. Testing for
n<1000000 is just as easy as testing the length of a decimal string.
Conversion to float or Rational is usually only worthwhile if you're
intending to do some arithmetic which you're not. So your input is a
string your output should be a string and you're not doing arithmetic:
you may as well view this as a text processing problem and just write
functions that work with strings.


Oscar


------------------------------

Message: 4
Date: Thu, 19 Sep 2013 12:44:58 +0200
From: TP <paratribulati...@free.fr>
To: beginners@haskell.org
Subject: Re: [Haskell-beginners] using the joker "_" on a constructor
Message-ID: <a61rga-oib.ln1@rama.universe>
Content-Type: text/plain; charset="UTF-8"

Christian Maeder wrote:

> In order to avoid your duplicate code consider to define "Foo" as follows:
> 
>   data Foo = F FB Int
>   data FB = Foo | Bar
> 
>   f (F _ n) = even n

Thanks a lot. Your solution, also given by Kim-Ee Yeoh, is the one I prefer:
? the common features are factorized in the type;
? the values are deconstructed by pattern matching maybe in a clearer way;
? `_` is explicitly used, making clear in a blink of an eye that we have 
some common behavior over several types. 

TP



------------------------------

Subject: Digest Footer

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners


------------------------------

End of Beginners Digest, Vol 63, Issue 27
*****************************************

Reply via email to