Page 1 of 1

Haskell newbie question

Posted: Fri Jul 01, 2005 1:24 pm
by Anonymous
I've just started learning Haskell and I have two questions. First of all, what if I want to do two things in a function? (like first I want to print something, then I would like to do a function call). I want to make a simple recursive "for-loop" like this


myfunc nbr =
putStr "This is " ++ nbr;
if nbr < 10
then myfunc(nbr+1)
else return

somethings like that, but the code above isnt working. In C it would be something like

void function(int nbr) {
cout<<"This is" << nbr;
if(nbr < 10)
function(nbr+1);
else
return;
}

my second question is, what if I dont want a function to return something? Mabye I have a function that should print something if I pass a certain argument. Since I need an else-statement, what should I put there in order to do "nothing"?

Archived topic from Iceteks, old topic ID:3451, old post ID:27888

Haskell newbie question

Posted: Sat Jul 02, 2005 3:44 pm
by wtd
For the first question, this should work.

Code: Select all

import IO

myfunc nbr =
  do
    putStr ("This is " ++ show nbr)
    hFlush stdout
    if nbr < 10 then myfunc (nbr + 1)
    else return ()[code]

However, Haskell already makes this pretty easy.  You could simply write:

[code]mapM_ (
br -> do { putStr ("This is " ++ show nbr); hFlush stdout }) [0..9][code]

:)

As for your second question... the closest thing to nothing in Haskell is ().

However, it sounds more like you're thinking of the Maybe data type.  Let's consider a fairly simple example.  You want to find the position of an element in a list.

First, we know that nothing we could possibly be located anywhere in an empty list.  So the item and the counter don't even matter.

[code]findPos _ _ [] = Nothing[code]

But it might be in a non-empty list.

[code]findPos item counter (x:xs) =
  if x == item then 
    Just counter
  else
    findPos item (counter + 1) xs[code]

Here we used the Just constructor for the Maybe data type, whereas we had used the Nothing constructor previously.

Now if I were to run:

[code]findPos 4 0 [1,2,3,4,5][code]

I would get in return:

[code]Just 3[code]

But if I run:

[code]findPos 7 0 [1,2,3,4,5][code]

I get:

[code]Nothing[code]

I can use pattern matching to discern this at run-time.

[code]case findPos n 0 [1..9] of
  Nothing -> putStrLn (show n ++ " wasn't found.")
  Just pos -> putStrLn (show n ++ " found at index " ++ show pos)[code] 

[color=#888888][size=85]Archived topic from Iceteks,  old topic ID:3451, old post ID:27898[/size][/color]

Haskell newbie question

Posted: Sun Jul 03, 2005 8:35 am
by Anonymous
Thank you :) I have another question and I cant understand why it doesnt work. I wanna calculate x^n by using:


x^0 = 1
x^n = (x^(n/2))^2 if n is even
x^n = x * (x^(n/2))^2 if n is odd

I use this code

Code: Select all

pow (x,0) = 1  
pow (x, n) = 
	if rem n 2 == 0
  then (pow (x, n/2))^2
  else x * (pow (x, n/2))^2
[code]
but when trying it by typing pow (2,4) or something, I get an error 

[color=#888888][size=85]Archived topic from Iceteks,  old topic ID:3451, old post ID:27913[/size][/color]

Haskell newbie question

Posted: Mon Jul 04, 2005 10:22 pm
by wtd
Using "div", which does integer math... (div 3 2 == 1, for instance)

Code: Select all

pow _ 0 = 1 
pow x 1 = x 
pow x n =
 if rem n 2 == 0
  then pow x (div n 2) ^ 2
  else x * pow x (div n 2) ^ 2[code]

Oh, and you'll notice that I used a new definition of "pow" for an exponent of 1.  :)
 

[color=#888888][size=85]Archived topic from Iceteks,  old topic ID:3451, old post ID:27940[/size][/color]

Haskell newbie question

Posted: Sat Jul 23, 2005 12:23 pm
by Anonymous
Okay I'm new here and I'm also new to functional programming.But my problem isn't with the actual programming.I'm reading that evry helpful Haskell tutorial but when I'm in Hugs and I want to load a module and I do this :

:load main

this appears :


ERROR "main.hs":1 - Syntax error in input (unexpected backslash (lambda) )

The truth is I never even used the command prompt before but it doens't look liekt hat's the problem.

Archived topic from Iceteks, old topic ID:3451, old post ID:28483

Haskell newbie question

Posted: Sat Jul 23, 2005 3:04 pm
by wtd
Endow wrote: Okay I'm new here and I'm also new to functional programming.But my problem isn't with the actual programming.I'm reading that evry helpful Haskell tutorial but when I'm in Hugs and I want to load a module and I do this :

:load main

this appears :


ERROR "main.hs":1 - Syntax error in input (unexpected backslash (lambda) )

The truth is I never even used the command prompt before but it doens't look liekt hat's the problem.
What's the first line of main.hs?

Archived topic from Iceteks, old topic ID:3451, old post ID:28486

Haskell newbie question

Posted: Sat Jul 23, 2005 9:34 pm
by Anonymous
module Main where


Just like in the tutorial :)

Archived topic from Iceteks, old topic ID:3451, old post ID:28487

Haskell newbie question

Posted: Sat Jul 23, 2005 11:09 pm
by wtd
Module "Main" should be in "Main.hs". If I indicated otherwise in the turorial, then I apologize.

Archived topic from Iceteks, old topic ID:3451, old post ID:28488

Haskell newbie question

Posted: Sun Jul 24, 2005 10:19 am
by Anonymous
Ah yes but it doens't have anything to do with the capitalized M.I checked.I still get the same error message.

Archived topic from Iceteks, old topic ID:3451, old post ID:28659

Haskell newbie question

Posted: Sun Jul 24, 2005 5:43 pm
by wtd
Odd.

On my Linux box:

Code: Select all

$ cat > Main.hs
module Main where

main = putStrLn "Hello world"
$ hugs
__   __ __  __  ____   ___      _________________________________________
||   || ||  || ||  || ||__      Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__||  __||     Copyright (c) 1994-2003
||---||         ___||           World Wide Web: http://haskell.org/hugs
||   ||                         Report bugs to: hugs-bugs@haskell.org
||   || Version: November 2003  _________________________________________

Haskell 98 mode: Restart with command line option -98 to enable extensions

Type :? for help
Prelude> :load Main
Main> main
Hello world

Main> :q
[Leaving Hugs]
$[code] 

[color=#888888][size=85]Archived topic from Iceteks,  old topic ID:3451, old post ID:28664[/size][/color]

Haskell newbie question

Posted: Mon Jul 25, 2005 9:43 am
by Anonymous
The worst part is that WinHugs isn't working alright for me.

Archived topic from Iceteks, old topic ID:3451, old post ID:28675

Haskell newbie question

Posted: Mon Jul 25, 2005 4:25 pm
by wtd
You should try GHCi.

http://haskell.org/ghc/

Archived topic from Iceteks, old topic ID:3451, old post ID:28678

Haskell newbie question

Posted: Mon Jul 25, 2005 7:36 pm
by Anonymous
"i"?

I think I already have GHC correctly installed.

Archived topic from Iceteks, old topic ID:3451, old post ID:28679

Haskell newbie question

Posted: Tue Jul 26, 2005 12:21 am
by wtd
GHCi is the interactive version of GHC. Quite like Hugs, but in my opinion, better.

Archived topic from Iceteks, old topic ID:3451, old post ID:28680