use*_*352 26 haskell haskell-platform haskelldb
制作一个三元逻辑表,我想为我将调用的运算符创建自己的函数<=>.
所以,例如,我想这样做,但那是不对的.这样做的正确方法是什么?
data Ternary = T | F | M
deriving (Eq, Show, Ord)
<=> :: Ternary -> Ternary -> Ternary
<=> T F = F
<=> T T = T
<=> T M = M
<=> F F = T
<=> F T = F
<=> F M = M
<=> M F = M
<=> M T = M
<=> M M = T
Run Code Online (Sandbox Code Playgroud)
Cla*_*bel 44
只需在运营商周围添加括号:
(<=>) :: Ternary -> Ternary -> Ternary
(<=>) T F = F
(<=>) T T = T
(<=>) T M = M
(<=>) F F = T
(<=>) F T = F
(<=>) F M = M
(<=>) M F = M
(<=>) M T = M
(<=>) M M = T
Run Code Online (Sandbox Code Playgroud)
这将它从中缀形式转换为前缀形式.或者,您可以在定义中使用中缀:
(<=>) :: Ternary -> Ternary -> Ternary
T <=> F = F
T <=> T = T
T <=> M = M
F <=> F = T
F <=> T = F
F <=> M = M
M <=> F = M
M <=> T = M
M <=> M = T
Run Code Online (Sandbox Code Playgroud)
ami*_*dfv 11
带符号的函数名与不带符号的函数名不同:
-- Works:
(<^>) :: Int -> Int -> Int
a <^> b = a + b
-- Doesn't work:
{-
<^> :: Int -> Int -> Int
<^> a b = a + b
-}
-- Works:
letters :: Int -> Int -> Int
letters a b = a + b
-- Doesn't work:
{-
(letters) :: Int -> Int -> Int
a letters b = a + b
-}
Run Code Online (Sandbox Code Playgroud)
但我保证--Haskell非常值得学习复杂的规则.