在 Curry 语言中指定默认规则:为什么以及如何?
Specifying default rules in the Curry language: Why and how?
在Curry tutorial (pdf)的3.5.6节中,建议我们使用默认规则"regain control after a failed search"。给出了以下示例。 (为清楚起见,我添加了类型签名并柯里化了输入。)
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:什么是默认声明?
为什么需要将特定子句指定为默认子句?一旦其他人都失败了,它会不会以一种或另一种方式到达?
问题二:怎么写的?到底应该写吗?
如果相反,我删除字符串 'default
:
lookup :: k -> [(k,v)] -> Maybe v
lookup key (_++[(key,value)]++_ ) = Just value
lookup _ _ = Nothing
它按预期运行:
test> test.lookup 1 [(2,3)]
Nothing
test>
自教程编写以来 'default
语法是否发生了变化?是否已完全删除?
这就是您要查找的代码。你的缺少允许默认规则的预处理器指令。并且使用了错误的引号字符。
-- Use default rules
{-# OPTIONS_CYMAKE -F --pgmF=currypp --optF=defaultrules #-}
lookup :: k -> [(k,v)] -> Maybe v
lookup key (_++[(key,value)]++_ ) = Just value
lookup'default _ _ = Nothing
test_positive = lookup 2 [(2,3)] == Just 3
test_negative = lookup 1 [(2,3)] == Nothing
默认规则有多种用途。在搜索失败后重新获得控制权是一个特别有用的方法,因为您无法通过相等检查表达式是否失败。
如果删除选项“-F”,则不会调用预处理器,这解释了该行为。
权限错误是因为不是所有的可能
Curry 程序的中间表示是预编译的
在 Ubuntu 包中。不幸的是,"default rule translator"
CurryPP 需要这些中间表示之一。
Ubuntu/Debian 软件包仅用于使用
咖喱核。对于扩展和更高级的工具,
我建议手动安装 PAKCS,例如,当前版本来自
https://www.informatik.uni-kiel.de/~pakcs/download.html
如果您已经有 Ubuntu,一个简单的 make
就足够了。
在Curry tutorial (pdf)的3.5.6节中,建议我们使用默认规则"regain control after a failed search"。给出了以下示例。 (为清楚起见,我添加了类型签名并柯里化了输入。)
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:什么是默认声明?
为什么需要将特定子句指定为默认子句?一旦其他人都失败了,它会不会以一种或另一种方式到达?
问题二:怎么写的?到底应该写吗?
如果相反,我删除字符串 'default
:
lookup :: k -> [(k,v)] -> Maybe v
lookup key (_++[(key,value)]++_ ) = Just value
lookup _ _ = Nothing
它按预期运行:
test> test.lookup 1 [(2,3)]
Nothing
test>
自教程编写以来 'default
语法是否发生了变化?是否已完全删除?
这就是您要查找的代码。你的缺少允许默认规则的预处理器指令。并且使用了错误的引号字符。
-- Use default rules
{-# OPTIONS_CYMAKE -F --pgmF=currypp --optF=defaultrules #-}
lookup :: k -> [(k,v)] -> Maybe v
lookup key (_++[(key,value)]++_ ) = Just value
lookup'default _ _ = Nothing
test_positive = lookup 2 [(2,3)] == Just 3
test_negative = lookup 1 [(2,3)] == Nothing
默认规则有多种用途。在搜索失败后重新获得控制权是一个特别有用的方法,因为您无法通过相等检查表达式是否失败。
如果删除选项“-F”,则不会调用预处理器,这解释了该行为。
权限错误是因为不是所有的可能 Curry 程序的中间表示是预编译的 在 Ubuntu 包中。不幸的是,"default rule translator" CurryPP 需要这些中间表示之一。
Ubuntu/Debian 软件包仅用于使用
咖喱核。对于扩展和更高级的工具,
我建议手动安装 PAKCS,例如,当前版本来自
https://www.informatik.uni-kiel.de/~pakcs/download.html
如果您已经有 Ubuntu,一个简单的 make
就足够了。