抱歉,这可能与之前的问题类似,但我仍然有点困惑。以下是我使用的相同代码:
type Pig = String
type Lion = String
type Feed = [(Char,Char)]
type Visitors = [(Char,Char)]
type Costs = (Int,Int,Int)
data AnimalHome = Farm Pig Pig Pig Feed | Zoo Lion Lion Lion Feed Visitors
orders :: Char -> AnimalHome -> Costs -> Char
orders stuff (Farm p1 p2 p3 feed) (cost1,cost2,cost3) = some code here
但这次我想在成本不同的情况下执行不同的功能,即(1,3,9)执行不同的等式(0,0,16)等。
答案 0 :(得分:1)
您可以根据此案例调整相关问题的答案。请记住,3元组或三元组(即您的类型成本)只是另一种数据类型。如果Haskell中没有元组,你可以写:
data Triple a b c = Triple a b c
它的行为与3元组完全相同!唯一的区别是Hakell支持元组表达式和元组模式的更方便的语法。
现在对于一般的模式:简化一下,有一些基本的3种可能性来编写它们:
原来你已经在问题中写了正确的模式:
即。 (1,3,9)执行与(0,0,16)
不同的等式
因此
orders stuff (Farm p1 p2 p3 feed) (1,3,9) = some code here
orders stuff (Farm p1 p2 p3 feed) (0,0,16) = some other code here
如果我们能够理解模式匹配的具体问题,那么它可能会帮助我们。也就是说你为什么不能自己想出来,因为它感觉很自然,不是吗?
答案 1 :(得分:0)
如果你真的想要使用不同整数的不同函数,可以使用模式匹配
orders stuff (Farm p1 p2 p3 feed) (1,3,9) = -- one thing
orders stuff (Farm p1 p2 p3 feed) (0,0,16) = -- another thing
但我只对0
使用它,而不是其他值。你真正想要的是卫兵:
orders stuff (Farm p1 p2 p3 feed) (a,b,c)
| a == 0 && b == 0 = -- one thing
| a*b^2=c = -- another thing
| b < 0 = -- a third thing
并依次检查每个条件 - 只有第一个真实条件才能运行其代码。