作爲一個讓我熟悉Haskell的簡單練習,在Youtube上徘徊並陷入美國倒計時遊戲節目後,我想爲Numbers遊戲做一個解算器。如何顯示功能的名稱?
您會得到6個數字,需要將它們與(+) (-) (*) (/)
結合才能獲得給定的結果。
到目前爲止,我已經得到了什麼是很腦殘,
let operands = [75, 2, 6, 3, 8, 7] :: [Double]
let goal = 623 :: Double
let operations = [(+), (-), (*), (/)]
show (head [(a, x, b, y, c, z, d, t, e) |
a <- operands,
b <- filter (\ q -> q /= a) operands,
c <- filter (\ q -> q /= a && q /= b) operands,
d <- filter (\ q -> q /= a && q /= b && q /= c) operands,
e <- filter (\ q -> q /= a && q /= b && q /= c && q /= d) operands,
x <- operations,
y <- operations,
z <- operations,
t <- operations,
t (z (y (x a b) c) d) e == goal])
...但明顯顯示不知道該怎麼辦的功能。
No instance for (Show (Double -> Double -> Double))
arising from a use of `show'
Possible fix:
add an instance declaration for (Show (Double -> Double -> Double))
我該如何解決這個問題?我是否需要混淆類型和數據構造函數來創建我自己的可以打印的函數,還是有一些更簡單的方法呢?
'濾波器(\ q - > Q/=一個&& Q/= B && Q/= C && Q/= d)'可以寫成作爲'過濾器(\'notElem \'[a,b,c,d])' – sdcvvc
@sdcvvc這是我以前沒有意識到的反引號的用法。 – badp
作爲教學材料,你可以檢查這個視頻[博士Graham Hutton - 函數式編程基礎 - 倒計時問題](http://channel9.msdn。com/shows/Going + Deep/C9-Lectures-Dr-Graham-Hutton-Functional-Programming-Fundamentals-Chapter-11-of-13) – jedf