Haskell-绑定函数定义参数

时间:2019-12-20 22:12:44

标签: haskell functional-programming

我试图在Haskell中编写一个测试函数,以使定义和返回函数以保持状态的想法变得混乱。这是我的尝试:

<table>
  <tr>
    <td onclick="toggle_visibility(this)">JOBID 5</td>
    <td>Billing Ticket</td>
    <td>Billing Status</td>
    <td>Job Date</td>
    <td>Drilling Contractor</td>
    <td>Job Type</td>
    <td>Lease Name</td>
    <td>Job Status</td>
  </tr>
  <tr>
    <td onclick="toggle_visibility(this)">JOBID 6</td>
    <td>Billing Ticket</td>
    <td>Billing Status</td>
    <td>Job Date</td>
    <td>Drilling Contractor</td>
    <td>Job Type</td>
    <td>Lease Name</td>
    <td>Job Status</td>
  </tr>
  <tr>
    <td onclick="toggle_visibility(this)">JOBID 7</td>
    <td>Billing Ticket</td>
    <td>Billing Status</td>
    <td>Job Date</td>
    <td>Drilling Contractor</td>
    <td>Job Type</td>
    <td>Lease Name</td>
    <td>Job Status</td>
  </tr>
</table>

<button id="toggleAll" onclick="toggleAll(this)">Hide All</button>

我的问题是,我希望将fib x = aux x results where results 0 = 1 results 1 = 1 results _ = -1 aux y res = ((res' y) , res') where res' = if res y /= -1 then res else newres2 where (num,newres) = aux (y-1) res (num2,_) = aux (y-2) newres newres2 y = num + num2 newres2 k = newres k 定义中的y参数绑定到newres2定义处的y。我希望我的新定义在此处具有确切的值aux,并在运行时定义该值时将模式匹配为其特定值。有可能吗?

1 个答案:

答案 0 :(得分:5)

您不能仅在数据构造函数上对变量进行模式匹配。

但是您可以进行比较:

newres2 k 
    | k == y    = num + num2
    | otherwise = newres k

当然,这将要求y的类型具有一个Eq实例,因为这是==运算符的定义位置,但是事实已经如此,因为您正在使用在同一类中定义的/=运算符。