2013-07-13 160 views
0

我需要一些幫助,以解決Haskell中的問題。Haskell任務 - 什麼是解決方案

我想創建一個函數,它需要三個參數 - 第一個參數是一個表示算術運算的字符,如'+', '-', '*', '/',後面兩個參數列表中的數字,這個函數應該返回一個數字列表這樣給出的參數

'-' [3,4,7] [-4,6,6] 

它將返回

[7,-2,1] 

,但我不知道如何開始。

另外,如何計算結果列表的最小元素?

+2

爲什麼結果列表中的第一個元素是'-1'而不是'7'('3 - (-4)')?還有什麼你的意思是結果需要最低?什麼最小?你的意思是你只是想返回列表的最小值而不是整個列表? – sepp2k

+0

對不起,我犯了一個錯誤..結果是[7,-2,1]。是的,我希望列表中的最小值,無論如何。我試了一下
func1 op l1 l2 = [a op b |一個< - l1,b <- l2]
但它不工作,我不知道如何解析字符串' - '運算符MINUS。 – user2579047

+0

謝謝,這就是我想要的,但在這裏我輸入( - )..是否可以使用' - ' – user2579047

回答

10

在功能

zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]

minimum :: Ord a => [a] -> a看看。

你應該可以用這些建立你想要的功能。

0

我不想直接告訴你答案,但這裏有一個提示:Control.Applicative導出功能<$><*>,類型ZipList,可一起使用,以你想要的工作。

+0

JFYI,這對初學者沒有幫助。 – luqui

+0

那麼它可能會有所幫助,如果它包含幾個這些函數如何工作的例子。但是,對於初學者來說,Control.Applicative文檔並不意味着什麼。 –

2

什麼:

f opStr x y = zipWith op x y where 
    op = case opStr of 
     '+' -> (+) 
     '-' -> (-) 
     '*' -> (*) 
     '/' -> (/) 

或者更短,可以替代由第一線;

f opStr = zipWith op where 
相關問題