【发布时间】:2018-11-23 16:33:48
【问题描述】:
在Curry tutorial (pdf) 的第 3.5.6 节中,建议我们使用默认规则“在搜索失败后重新获得控制权”。给出了以下示例。 (为了清楚起见,我添加了一个类型签名并对输入进行了柯里化。)
lookup :: k -> [(k,v)] -> Maybe v
lookup key (_++[(key,value)]++_ ) = Just value
lookup’default _ _ = Nothing
除非我用' 替换’,否则我无法编译它。一旦我这样做,它的行为是这样的:
test> test.lookup 1 [(2,3)]
*** No value found!
问题 1:默认声明的用途是什么?
为什么需要指定特定子句是默认子句?一旦其他方法失败,它不会以某种方式到达吗?
问题2:怎么写?应该写吗?
如果我删除字符串 'default:
lookup :: k -> [(k,v)] -> Maybe v
lookup key (_++[(key,value)]++_ ) = Just value
lookup _ _ = Nothing
它的行为符合预期:
test> test.lookup 1 [(2,3)]
Nothing
test>
自编写教程以来,'default 语法是否发生了变化?是否已完全删除?
【问题讨论】: