- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Haskell 的新手,我正在编写一个计算函数极限的程序。所以给出两个列表 a
和 b
, 三角洲 dx = 0.001
, 和积分的限制 l
和 r
,我想用等式递归计算曲线下的面积: a1(x)^b1 + a2(x)^b2 + ... + an(x)bn
其中 x
是 l
之间的所有值一个r
增量为 dx
每个值之间。我猜技术部分不是那么重要,但它有助于阅读代码:
import Text.Printf (printf)
-- This function should return a list [area].
solve :: Int -> Int -> [Int] -> [Int] -> [Double]
solve l r x y = [area l r x y]
area l r a b = if (l < r)
then (calc l a b) * 0.001 + (area (l + 1) r a b)
else (calc r a b) * 0.001
calc n (a:arest) (b:brest) = (fromIntegral(n) ^^ b) * fromIntegral(a) + (calc n arest brest)
calc n [] [] = 0
--Input/Output.
main :: IO ()
main = getContents >>= mapM_ (printf "%.1f\n"). (\[a, b, [l, r]] -> solve l r a b). map (map read. words). lines
上面的代码没有错误,但是一旦我更改了 area (l + 1) r a b
至 area (l + 0.001) r a b
我收到以下错误消息:
No instance for (Fractional Int) arising from a use of `area'
我尝试创建一个新类并将其设为抽象类型,但这没有用,还有其他想法吗?
最佳答案
所以问题是Int
不是 Fractional
类型。换句话说,它没有名为 0.001
的值。 [note 1],但您已请求 Haskell 在您的代码中为您提供这样的值。
您提出此请求是因为 0.001
被馈送到 (+)
带有另一个参数(在本例中为 l
)的函数,其类型为 Int
.这是一个问题,因为该函数的类型为 (+) :: (Num a) => a -> a -> a
: 换句话说,有很多不同的功能(+)
所有类型都是 a -> a -> a
;每种类型都存在这些功能之一 a
在Num
类型类。
因为我们知道函数的一个参数是 Int
, 因此我们正在使用特定函数 (+) :: Int -> Int -> Int
.这就是为什么 l + 0.001
变得奇怪。
至于解决问题:你可能想要l
和 r
类型为 Double
(它们是数字的左右边界?)但是如果您确定它们必须是 Int
那么你可能打算写 fromIntegral l + 0.001
.
关于样式的旁注:Haskell 中的括号始终只是分组/优先级,函数的优先级高于运算符,运算符的优先级高于特殊形式( let
、 case
、 if
、 do
),以及函数应用总是左结合的或“贪婪的命名”:一个函数吃掉它前面的任何东西。你写了什么:
(fromIntegral(n) ^^ b) * fromIntegral(a) + (calc n arest brest)
最好写成:
fromIntegral a * fromIntegral n ^^ b + calc n arest brest
calc
两边的括号不是必需的(因为 + 等运算符的优先级低于函数应用程序),n
周围的括号也不是必需的和 a
(因为这些子表达式是不可分割的 block ;fromIntegral(n)
等同于 fromIntegral (n)
等同于 fromIntegral n
)。
0.001
时它没有确定的类型;相反,它被翻译成 fromRational 0.001
在内部,后者在哪里 0.001
是定型的定值 Rational
,就像你写 4
一样它被翻译成fromInteger 4
其中后 4 是定型的定值 Integer
.问题真的是没有 fromRational
Int
的功能,因为 Int
不是 Fractional
的一部分定义 fromRational
的类型类.而且它不是该类型类的一部分,因为语言设计者更喜欢错误而不是无声的四舍五入/舍去小数。关于haskell - 没有因使用 `area' 而产生的 (Fractional Int) 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063040/
有没有一种方法可以使用标准类型构造函数(例如 int、set、dict、list、tuple 等)以用户定义的方式将用户定义类的实例强制转换为其中一种类型?例如 class Example:
我知道这个问题在Stackoverflow中有很多问题,但是即使有很多答案,这些答案也帮不了我什么,也没有找到答案。 在我的WebAPP中,它可以正常工作,但是当我将其转换为API时,它失败了(主题标
这个问题已经有答案了: Why does the ternary operator unexpectedly cast integers? (3 个回答) 已关闭 9 年前。 最近遇到一个Java的陷
我尝试使用 FirebaseApp.configure() 配置 Firebase,但遇到以下崩溃: *** Terminating app due to uncaught exception 'c
我有一个自连接员工实体类,其中包含与其自身相关的 id、name 和 ref 列。我想创建它的新实例并将其保存到数据库。 首先我创建了一个 Employee 类的实例并将其命名为 manager。然后
我有一个用于添加新公寓的表单,在该表单中我有一个下拉列表,用户可以在其中选择负责的人员。 显然,当您从下拉列表中选择并尝试保存公寓时,我的应用程序认为该人已被修改。它给了我下面的错误,指示我应该首先保
从 Visualforce 页面,我需要检索我们组织的 salesforce 实例的 URL,而不是 Visual Force URL。 例如我需要https://cs1.salesforce.com
我遇到了一些可能的问题答案,但这是关于从 Hibernate 3.4.0GA 升级到 Hibernate 4.1.8 的问题。所以这曾经在以前的版本下工作,我已经四处搜索了为什么它在这个新版本中出现了
似乎一遍又一遍地问这个问题,我仍然找不到解决我问题的答案。我在下面有一个域模型。每个新创建或更新的“安全用户”都需要我确保其具有配置文件,如果没有,则创建一个新的配置文件并分配给它。 配置文件的要求相
我很难调试为什么 JPA 不级联我的 @ManyToMany 关系。我发现的所有答案都与缺少级联语句有关。但我确实拥有它们并且仍然得到: Caused by: org.hibernate.Transi
Play 服务 API 表明有一个叫做 Instance ID 的东西 但是,在 Android Studio 中包含以下内容后,我无法导入 InstanceID 类 compile "com.goo
我正在使用 Seam 框架。我有 2 个实体: 请求.java @Entity @Table(name = "SRV_REQUEST") public class Request { private
This question处理构建一个适当的Monad来自单子(monad)的实例,但仅在某些约束下 - 例如Set .诀窍是将其包装成 ContT ,它将约束推迟到包装/展开其值。 现在我想对 Ap
我正在尝试执行此查询: StringBuffer sb = new StringBuffer(); sb.append("select p from PointsEntity p " + "where
我试图了解是否可以更改我的 hibernate 配置并使用单个 MySQL 实例(而不是我当前拥有的多个 MySQL 实例): 我有一个使用 hibernate 的 Java 应用程序,与 2 个模式
我有一个选项卡滑动布局,其中包括四个选项卡,每个选项卡都有自己的布局和 fragment ,在我的主要 Activity 布局中,viewpager 参与更改选项卡。特定 View (选项卡)在应用程
我看到很多帖子声称他们正在运行 MySql 的 RDS 实例,但无法连接到该实例,但我没有运行 RDS。 我使用 EC2 实例来托管我的 WordPress 博客,该博客是使用 Web 平台安装程序安
因为我在我的 ec-2 实例上的 python 虚拟环境中运行应用程序( Airflow ),并且我想在同一个 ec2 实例上的默认 python 环境中运行命令,所以我认为 ssh 到我自己的实例更
这个问题已经有答案了: How to fix the Hibernate "object references an unsaved transient instance - save the tra
例子: run APP1 .. ... run APP1 ... run APP2 如何在 APP2 中对 Vue 说我需要调用 APP1?
我是一名优秀的程序员,十分优秀!