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])
...しかし明らかに、Show は関数をどうするかを知りません。
No instance for (Show (Double -> Double -> Double))
arising from a use of `show'
Possible fix:
add an instance declaration for (Show (Double -> Double -> Double))
どうすればこれを回避できますか? 印刷できる独自の関数を作成するには、型とデータのコンストラクターをいじる必要がありますか、それとももっと簡単な方法がありますか?