Haskell处理负参数

 手机用户2602906645 发布于 2023-02-12 18:31

尝试将两个值相加,其中只有一个为负数,例如-12:

soma :: Float -> Float -> Float
soma x1 x2 = x1 + x2

结果出错了; 为什么?

:10:6:
No instance for (Num (Float -> Float -> Float))
  arising from a use of `-'
Possible fix:
  add an instance declaration for (Num (Float -> Float -> Float))
In the expression: soma - 1 2
In an equation for `it': it = soma - 1 2

psr.. 8

您应该使用(-1)而不是 - 1.解析器将您键入的内容解释为( - )soma(1 2).换句话说,它试图从soma中减去(1 2).哪个不起作用,因为减法不接受Float - > Float - > Float.

你希望(并且预期会发生)是为了让haskell评估 - 作为1上的一元运算符,优先级高于函数应用程序.这与haskell正常工作的方式相反.已经特别考虑(-1)被解释为(否定1). 这可能会导致一些问题,因为它是一个特殊情况 - 在这个例子中试图讨论 - 不起作用,因为它不是真的 - 但是否定.

据推测,一个更广泛的特殊情况可能会导致经验丰富的haskell程序员出现更多意外行为,因此语言设计师认为它不值得.

1 个回答
  • 您应该使用(-1)而不是 - 1.解析器将您键入的内容解释为( - )soma(1 2).换句话说,它试图从soma中减去(1 2).哪个不起作用,因为减法不接受Float - > Float - > Float.

    你希望(并且预期会发生)是为了让haskell评估 - 作为1上的一元运算符,优先级高于函数应用程序.这与haskell正常工作的方式相反.已经特别考虑(-1)被解释为(否定1). 这可能会导致一些问题,因为它是一个特殊情况 - 在这个例子中试图讨论 - 不起作用,因为它不是真的 - 但是否定.

    据推测,一个更广泛的特殊情况可能会导致经验丰富的haskell程序员出现更多意外行为,因此语言设计师认为它不值得.

    2023-02-12 18:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有