2011-10-20 67 views
1

我有以下功能:如何將功能放入模塊?

isSortedUp x y z = if x>y && y>z then True else False 

,我希望把它放到模塊UP。

這個功能我想投入模塊向下:

isSortedDown x y z = if x<y && y<z then True else False 

然後叫他們在主程序:

import System.Environment 
import Up 
import Down 
main = do 
    args<-getArgs 
    let a = args !! 0 
    let b = args !! 1 
    let c = args !! 2 
    if (isSortedUp a b c) || (isSortedDown a b c) then return (True) else return(False) 

如何把和調用這個函數?

新代碼 Main.hs

import System.Environment 
import Up 
import Down 
main = do 
    args<-getArgs 
    let a = args !! 0 
    let b = args !! 1 
    let c = args !! 2 
    if (isSortedUp a b c) || (isSortedDown a b c) then return(True) else return(False) 

Up.hs

module Up (isSortedUp) where 
isSortedUp x y z = if x>y && y>z then return(True) else return(False) 

Down.hs

module Down (isSortedDown) where 
isSortedDown x y z = if x<y && y<z then return(True) else return(False) 
+4

就像一個小小的批評:不要寫'如果P然後是真的其他假',只要寫'P'。同樣在monad中:「如果P返回True,否則返回False」就像'return P'一樣簡單。最後,請注意'isSortedDown a b c = isSortedUp c b a'。 – Lambdageek

回答

3

模塊哈斯克爾是由文件破碎。所以,給isSortedDown在它自己的模塊Down,你會創建一個新的文件Down.hs並把它裏面的內容與module聲明:

module Down (isSortedDown) where 

isSortedDown x y z = if x<y && y<z then True else False 

然後,提供您的Main模塊可以訪問這個模塊(在同目錄),它應該導入並且可以訪問。

有關哈斯克爾模塊的更多信息,請閱讀:

+0

我找不到'Down'模塊,但task1.hs與Down.hi和Up.hi位於同一目錄 –

+0

由於您單擊了複選標記,表示此問題已被回答。如果您仍然遇到麻煩,您可能需要詢問#haskell IRC頻道,或者可能會創建一個新的SO問題。 – MatrixFrog

+0

@АртёмЦарионов:模塊'Foo'應該在'Foo.hs'中。 – ivanm

1

注意你可以簡單地寫:

isSortedDown x y z = x<y && y<z