我如何在Haskell中创建运算符? [英] How do I create an operator in Haskell?

查看:150
本文介绍了我如何在Haskell中创建运算符?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

制作一个三元逻辑表,我想为我称之为< => 的操作符创建自己的函数。

所以,例如,我想这样做,但这是不对的。什么是正确的做法?

 数据Ternary = T | F | M 
导出(Eq,Show,Ord)

=> = ::三元 - >三元 - >三元
< => T F = F
< => T T = T
< => T M = M
= F F = T
< => F T = F
< => F M = M
< => M F = M
< => M T = M
< => MM = T


解决方案

/ p>

 (< =>):: Ternary  - >三元 - > (=)TF = F 
(=)TT = T
(=)TM = M
(< => = =)F F = F
(=)FM = M
(=)MF = M $ b = b $ b(=>)MT = M
(=>)MM = T

这将它从中缀形式转换为前缀形式。或者,您可以在定义中使用中缀:

 (< =>):: 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


Making a ternary logic table, and I would like to make my own function for an operator that I'll call <=>.

So, for example, I want to do this, but that isn't right. what's the correct way to do this?

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

解决方案

Just add parentheses around your operator:

(<=>) :: 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

This turns it from infix form to prefix form. Alternatively, you can just use infix in the definition:

(<=>) :: 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

这篇关于我如何在Haskell中创建运算符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆