Send Beginners mailing list submissions to
        [email protected]

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
        [email protected]

You can reach the person managing the list at
        [email protected]

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


Today's Topics:

   1. Re:  recursion problem. (Karl Voelker)
   2.  sum problem (Roelof Wobben)
   3. Re:  sum problem (yi lu)
   4. Re:  sum problem (Roelof Wobben)
   5.  any feedback on this solution (Roelof Wobben)
   6. Re:  any feedback on this solution (Kees Bleijenberg)
   7. Re:  any feedback on this solution (Roelof Wobben)


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

Message: 1
Date: Fri, 06 Feb 2015 20:59:36 -0800
From: Karl Voelker <[email protected]>
To: [email protected]
Subject: Re: [Haskell-beginners] recursion problem.
Message-ID:
        <1423285176.1254095.224241757.68c01...@webmail.messagingengine.com>
Content-Type: text/plain

On Fri, Feb 6, 2015, at 01:25 AM, Roelof Wobben wrote:
> but now when I do toDigits 0 , I see [] as output where I was expected
> [0]

In our written notation, "0" is a special case: it's the only integer
written with a leading zero. So don't be too surprised if your code
requires a special case for it.

-Karl


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

Message: 2
Date: Sat, 07 Feb 2015 09:53:34 +0100
From: Roelof Wobben <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Subject: [Haskell-beginners] sum problem
Message-ID: <[email protected]>
Content-Type: text/plain; charset=windows-1252; format=flowed

Hello,

The exercises of CIS 194 are really hard.

Now I have to sum all the numbers in a array with a catch
If a number is greater then 10 it has to be dived in single numbers.

so [ 1 , 12, 3] will be [ 1, 1,2,3] and then sum up.

So far I have this :

-- | sum all the digits of a array
sumDigits :: [Integer] -> Integer
sumDigits n
    | n == 0 = acc
    | n < 10 = acc + n
    | otherwise = sumDigits acc + n `mod` 10 + n `rem` 10


But now I see a message that acc is not known which is not wierd.

But when I do sumDigits n acc I see a message that sumDigits has only 1 
parameter where I give it to,

When I only had to sum up i is easy , I could use map [+] xs

Anyone  who can give a me tip without giving the answer otherwise I do 
not learn anything.

Roelof



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

Message: 3
Date: Sat, 7 Feb 2015 17:01:48 +0800
From: yi lu <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] sum problem
Message-ID:
        <CAKcmqqyMAnsv8sORoDk_JzD=dzmuorc-eypan4joywqzsnm...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"

Do not try to `sum` all at first. See how you can deal with one integer.

On Sat, Feb 7, 2015 at 4:53 PM, Roelof Wobben <[email protected]> wrote:

> Hello,
>
> The exercises of CIS 194 are really hard.
>
> Now I have to sum all the numbers in a array with a catch
> If a number is greater then 10 it has to be dived in single numbers.
>
> so [ 1 , 12, 3] will be [ 1, 1,2,3] and then sum up.
>
> So far I have this :
>
> -- | sum all the digits of a array
> sumDigits :: [Integer] -> Integer
> sumDigits n
>    | n == 0 = acc
>    | n < 10 = acc + n
>    | otherwise = sumDigits acc + n `mod` 10 + n `rem` 10
>
>
> But now I see a message that acc is not known which is not wierd.
>
> But when I do sumDigits n acc I see a message that sumDigits has only 1
> parameter where I give it to,
>
> When I only had to sum up i is easy , I could use map [+] xs
>
> Anyone  who can give a me tip without giving the answer otherwise I do not
> learn anything.
>
> Roelof
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20150207/003d8fe5/attachment-0001.html>

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

Message: 4
Date: Sat, 07 Feb 2015 10:05:16 +0100
From: Roelof Wobben <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] sum problem
Message-ID: <[email protected]>
Content-Type: text/plain; charset="us-ascii"

An HTML attachment was scrubbed...
URL: 
<http://www.haskell.org/pipermail/beginners/attachments/20150207/8db36552/attachment-0001.html>

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

Message: 5
Date: Sat, 07 Feb 2015 10:37:08 +0100
From: Roelof Wobben <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Subject: [Haskell-beginners] any feedback on this solution
Message-ID: <[email protected]>
Content-Type: text/plain; charset=windows-1252; format=flowed

Hello,

I finally solved exercise 1 where I had to write a programm which checks 
if a creditcard number is valid.

I solved it this way :

toDigits :: Integer -> [Integer]
toDigits n
    | n < 0 = []
    | n < 10 = [n]
    | otherwise =  toDigits (n `div` 10) ++ [n `mod` 10]

-- | convert a number to a reversed array where a negative number will 
be a empty array
toDigitsRev :: Integer -> [Integer]
toDigitsRev 0 = [0]
toDigitsRev n
    | n < 0 = []
    | n < 10 = [n]
    | otherwise = n `mod` 10 : toDigitsRev (n `div` 10)

  -- | Doubles every second number from the right.
doubleEveryOther :: [Integer] -> [Integer]
doubleEveryOther []         = []
doubleEveryOther (x:[])     = [x]
doubleEveryOther (x:(y:zs))
    | length (x:(y:zs)) `mod` 2 /= 0 = [x] ++ (y * 2) : doubleEveryOther zs
    | otherwise = [x *2]  ++ y : doubleEveryOther zs


-- | sum all the digits of a array
sumDigits :: [Integer] -> Integer
sumDigits []  = 0
sumDigits (x:zs)
    | x < 10     = x + sumDigits zs
    | otherwise  = x `mod` 10 + x `div` 10 + sumDigits zs


-- | validate a number by looking if a number can be divided by 10
validate :: Integer -> Bool
validate n = sumDigits(doubleEveryOther(toDigits(n))) `mod` 10 == 0


-- | The main entry point.
main :: IO ()
main = do
     print $ validate  4012888888881881

Any remarks about this solution.

I know there are higher function solutions but that part is not 
descrived in chapter 1 .

Roelof



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

Message: 6
Date: Sat, 7 Feb 2015 10:56:11 +0100
From: "Kees Bleijenberg" <[email protected]>
To: "'The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell'" <[email protected]>
Subject: Re: [Haskell-beginners] any feedback on this solution
Message-ID: <[email protected]>
Content-Type: text/plain;       charset="us-ascii"

Roelof,

Maybe it's better to reuse toDigits in sumDigits. 

Kees

-----Oorspronkelijk bericht-----
Van: Beginners [mailto:[email protected]] Namens Roelof Wobben
Verzonden: zaterdag 7 februari 2015 10:37
Aan: The Haskell-Beginners Mailing List - Discussion of primarily
beginner-level topics related to Haskell
Onderwerp: [Haskell-beginners] any feedback on this solution

Hello,

I finally solved exercise 1 where I had to write a programm which checks 
if a creditcard number is valid.

I solved it this way :

toDigits :: Integer -> [Integer]
toDigits n
    | n < 0 = []
    | n < 10 = [n]
    | otherwise =  toDigits (n `div` 10) ++ [n `mod` 10]

-- | convert a number to a reversed array where a negative number will 
be a empty array
toDigitsRev :: Integer -> [Integer]
toDigitsRev 0 = [0]
toDigitsRev n
    | n < 0 = []
    | n < 10 = [n]
    | otherwise = n `mod` 10 : toDigitsRev (n `div` 10)

  -- | Doubles every second number from the right.
doubleEveryOther :: [Integer] -> [Integer]
doubleEveryOther []         = []
doubleEveryOther (x:[])     = [x]
doubleEveryOther (x:(y:zs))
    | length (x:(y:zs)) `mod` 2 /= 0 = [x] ++ (y * 2) : doubleEveryOther zs
    | otherwise = [x *2]  ++ y : doubleEveryOther zs


-- | sum all the digits of a array
sumDigits :: [Integer] -> Integer
sumDigits []  = 0
sumDigits (x:zs)
    | x < 10     = x + sumDigits zs
    | otherwise  = x `mod` 10 + x `div` 10 + sumDigits zs


-- | validate a number by looking if a number can be divided by 10
validate :: Integer -> Bool
validate n = sumDigits(doubleEveryOther(toDigits(n))) `mod` 10 == 0


-- | The main entry point.
main :: IO ()
main = do
     print $ validate  4012888888881881

Any remarks about this solution.

I know there are higher function solutions but that part is not 
descrived in chapter 1 .

Roelof

_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners


-----
No virus found in this message.
Checked by AVG - www.avg.com
Version: 2015.0.5646 / Virus Database: 4281/9071 - Release Date: 02/07/15



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

Message: 7
Date: Sat, 07 Feb 2015 11:01:55 +0100
From: Roelof Wobben <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] any feedback on this solution
Message-ID: <[email protected]>
Content-Type: text/plain; charset=windows-1252; format=flowed

Why,

They have opposite terms.

SumDigits takes a array and has a integer as output.
ToDigits takes a integer and puts  out a array.

Roelof


Kees Bleijenberg schreef op 7-2-2015 om 10:56:
> Roelof,
>
> Maybe it's better to reuse toDigits in sumDigits.
>
> Kees
>
> -----Oorspronkelijk bericht-----
> Van: Beginners [mailto:[email protected]] Namens Roelof Wobben
> Verzonden: zaterdag 7 februari 2015 10:37
> Aan: The Haskell-Beginners Mailing List - Discussion of primarily
> beginner-level topics related to Haskell
> Onderwerp: [Haskell-beginners] any feedback on this solution
>
> Hello,
>
> I finally solved exercise 1 where I had to write a programm which checks
> if a creditcard number is valid.
>
> I solved it this way :
>
> toDigits :: Integer -> [Integer]
> toDigits n
>      | n < 0 = []
>      | n < 10 = [n]
>      | otherwise =  toDigits (n `div` 10) ++ [n `mod` 10]
>
> -- | convert a number to a reversed array where a negative number will
> be a empty array
> toDigitsRev :: Integer -> [Integer]
> toDigitsRev 0 = [0]
> toDigitsRev n
>      | n < 0 = []
>      | n < 10 = [n]
>      | otherwise = n `mod` 10 : toDigitsRev (n `div` 10)
>
>    -- | Doubles every second number from the right.
> doubleEveryOther :: [Integer] -> [Integer]
> doubleEveryOther []         = []
> doubleEveryOther (x:[])     = [x]
> doubleEveryOther (x:(y:zs))
>      | length (x:(y:zs)) `mod` 2 /= 0 = [x] ++ (y * 2) : doubleEveryOther zs
>      | otherwise = [x *2]  ++ y : doubleEveryOther zs
>
>
> -- | sum all the digits of a array
> sumDigits :: [Integer] -> Integer
> sumDigits []  = 0
> sumDigits (x:zs)
>      | x < 10     = x + sumDigits zs
>      | otherwise  = x `mod` 10 + x `div` 10 + sumDigits zs
>
>
> -- | validate a number by looking if a number can be divided by 10
> validate :: Integer -> Bool
> validate n = sumDigits(doubleEveryOther(toDigits(n))) `mod` 10 == 0
>
>
> -- | The main entry point.
> main :: IO ()
> main = do
>       print $ validate  4012888888881881
>
> Any remarks about this solution.
>
> I know there are higher function solutions but that part is not
> descrived in chapter 1 .
>
> Roelof
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>
>
> -----
> No virus found in this message.
> Checked by AVG - www.avg.com
> Version: 2015.0.5646 / Virus Database: 4281/9071 - Release Date: 02/07/15
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>



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

Subject: Digest Footer

_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners


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

End of Beginners Digest, Vol 80, Issue 12
*****************************************

Reply via email to