gpt4 book ai didi

operator-precedence - 指定Curry语言的默认规则: Why and how?

转载 作者:行者123 更新时间:2023-12-02 03:26:10 26 4
gpt4 key购买 nike

Curry tutorial (pdf) 的第 3.5.6 节中,建议我们使用默认规则“搜索失败后重新获得控制权”。下面给出一个例子。 (为了清楚起见,我添加了类型签名并对输入进行柯里化(Currying)。)

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 语法是否已更改?它被完全删除了吗?

最佳答案

这是您正在寻找的代码。您缺少允许默认规则的预处理器指令。并使用了错误的引号字符。

-- 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

默认规则有多种用途。在搜索失败后重新获得控制权是一种特别有用的方法,因为您无法通过相等性检查表达式是否失败。

关于operator-precedence - 指定Curry语言的默认规则: Why and how?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53357361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com