2011-10-19 23 views
2

我需要重新制作這個函數與高階函數。我不知道如何改變lookupTitle,但其他我已經改變。但是我在bookAuthors上發生了錯誤。字符錯誤在charcter 美國

type Title = String 
type Author = String 
data Product = Book Title Author 
        | Video Author 
        | CD Title Integer Author 
        deriving (Eq,Show) 

getTitle (Book title _) = title 
getTitle (Video title ) = title 
getTitle (CD title _ _) = title 

getTitles l = map (\x->getTitle x) l 
lookupTitle _ [] = Nothing 
lookupTitle x (y:ys) | getTitle y == x = Just y 
        | otherwise  = lookupTitle x ys 

lookupTitles a b = map (\x->lookupTitle x b) a 

bookAuthors l = filter author l 
         where author (Book _ _) = True 
            author _ = False 

爲什麼?

+0

您應該提供更多的上下文。你想要做什麼,你期望得到什麼結果,你得到的錯誤是什麼? –

+0

正如Mikhail Glushenkov指出的那樣,您的問題是縮進,請看下面的鏈接,瞭解縮放在Haskell中的工作原理:http://en.wikibooks.org/wiki/Haskell/Indentation – HaskellElephant

回答

2

看起來像一個縮進問題。 This編譯沒有錯誤。

+1

是的。看起來'bookAuthors'縮進了一個額外的空間。我強烈建議您使用等寬字體的編輯器,特別是對於像Haskell這樣的語言來說,空白字體非常重要。 – MatrixFrog

+0

我使用GHC和記事本。 HUGS也不會編譯它。即使在bookAuthors之前沒有空間。 我從答案複製了代碼,它開始工作! –

+0

@АртёмЦарионов:你應該嘗試任何其他文本編輯器的記事本。這只是不打算用於編程。如果您習慣於記事本,那麼請參閱以下適用於Windows上Haskell的編輯器鏈接,然後我建議您嘗試使用記事本++:http://www.haskell.org/haskellwiki/Windows。 – HaskellElephant