- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:@Downvoters:您至少可以告诉我如何改进这个问题吗?我已尽力而为,在我看来,在没有任何评论的情况下投反对票是没有建设性的。
我对 Haskell 还很陌生,作为练习,我正在尝试创建一个函数,该函数返回 x
的连分数展开式的前 n
项。第一个参数 x 可以是浮点或整数,第二个参数必须是 int。这是我到目前为止的代码,加载时没有错误:
continuedFraction x n | x < 0 = []
| n < 1 = []
| otherwise = [floor x] ++ (take n (continuedFraction (1 / (x - floor x)) (n-1) ) )
(我知道这不是很优雅,但这是我当时能想到的最简单的一个。)
一旦我实际使用该功能,例如continuedFraction 3.1415 4
我收到以下错误消息。谁能指出我的错误/解释该消息?
(我确实尝试用上述想法进行类型定义,但也没有成功:continuedFraction::(Num x) => x -> Int -> [Integer]
)
错误消息(在没有类型定义的情况下运行时):
*Main> continuedFraction 3.1415 4
<interactive>:86:1:
Could not deduce (Integral a0)
arising from a use of `continuedFraction'
from the context (Integral t)
bound by the inferred type of it :: Integral t => [t]
at <interactive>:86:1-26
The type variable `a0' is ambiguous
Note: there are several potential instances:
instance Integral Integer -- Defined in `GHC.Real'
instance Integral Int -- Defined in `GHC.Real'
instance Integral Word -- Defined in `GHC.Real'
In the expression: continuedFraction 3.1415 4
In an equation for `it': it = continuedFraction 3.1415 4
<interactive>:86:19:
Could not deduce (Fractional a0) arising from the literal `3.1415'
from the context (Integral t)
bound by the inferred type of it :: Integral t => [t]
at <interactive>:86:1-26
The type variable `a0' is ambiguous
Note: there are several potential instances:
instance Integral a => Fractional (GHC.Real.Ratio a)
-- Defined in `GHC.Real'
instance Fractional Double -- Defined in `GHC.Float'
instance Fractional Float -- Defined in `GHC.Float'
In the first argument of `continuedFraction', namely `3.1415'
In the expression: continuedFraction 3.1415 4
In an equation for `it': it = continuedFraction 3.1415 4
最佳答案
如果您是 Haskell 的初学者,您应该遵守一些规则:
Double
超过类型类Fractional a
-XScopedTypeVariables
和 ghci 来探索编译器推断的签名,以了解类型类现在让我们探索您的函数 - 您想要生成一个连分数,我假设您写下的用于生成它的公式是正确的。 Haskell 的功能足以对无限列表进行建模,因此让我们使用该功能并摆脱第二个参数并生成一个(可能)无限列表。
continuedFraction :: Double -> [Int]
所以我们看到 - 您正在期待 Double
输入和结果[Int]
,即整数列表,我选择 Int
为了简单起见 - 至于巨大的Integer
我认为这个算法既不稳定又高效 - 并且使用 Double
我猜真正的问题是浮点运算。
continued fraction x | x < 0 = []
| otherwise = let i = floor x
x' = 1/(x - fromIntegral i)
in i : continuedFraction x'
这是您想出的最简单的解决方案,您遇到的问题是
i :: Int
, x :: Double
在 Haskell 中你不能减去不同类型的东西,没有自动装箱/自动强制。我们喜欢对这些事情的控制 - 编译器不够智能,无法推断出我们“显然”想要计算的内容(如果您使用 MS Excel,您会看到这会导致什么结果)。
这个问题的解决办法是显式转换fromIntegral :: Double -> Int
在这种情况下
为了便于阅读,我还切换了 [a] ++
至a :
这是等效的,编写的内容更少,性能更高,但这里不关心性能
现在在 ghci 中使用该函数:ghci myfile.hs
> continuedFraction 3.1415
[3,.....] --infinite list
> take 4 $ continuedFraction 3.1415
[3,7,14,1]
现在您可以探索该功能了!
{-# LANGUAGE ScopedTypeVariables#-}
module SO34830462 where
--continuedFraction :: Double -> [Int]
continuedFraction :: Double -> _
continuedFraction x | x < 0 = []
| otherwise = let i = floor x
x' = 1/ (x - fromIntegral i)
in i : continuedFraction x'
ghci myfile.hs
导致错误
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help
[1 of 1] Compiling SO34830462 ( 34830462.hs, interpreted )
myfile.hs:6:32:
Found hole ‘_’ with type: [t]
[...]
continuedFraction :: Integral t => Double -> [t]
[...]
Failed, modules loaded: none.
它简单地告诉您 - “哦,您没有指定正确的类型签名”,但是 ghc 可以使用此类型签名。
您可以替换类型签名并对 Double
执行相同的操作参数,一点点探索功能。
如果您不确定从什么开始,您可以省略类型签名并调用 :t continuedFraction
进行 ghci session 。
关于haskell - 生成一个数的连分数展开式的前 n 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34830462/
直接从 Python 代码运行 pylint 时,我似乎无法获得任何返回值。从命令行运行它会生成一个漂亮的报告,在底部有一个总结分数。 我已经尝试将“Run”的返回值放入一个变量中,并获取它的“rep
我是 Python 新手,正在尝试学习单词检测。我有一个带有单词的数据框 sharina['transcript'] Out[25]: 0 thank you for calling my
http://jsfiddle.net/q8P7Y/ 我在最后显示最终分数时遇到问题,有很多方法可以做到这一点,但我不确定什么是最好的。 正如你所看到的,下一个按钮只是 div 的显示/隐藏,而不是页
我使用滑动 slider 并有计数器分数。它计数很好,但我需要计数 =(所有幻灯片 - 1)。例如,如果我有 20 张幻灯片,我想显示总数 19。有什么办法可以做到这一点吗?我使用他们网站上的常规 j
我使用滑动 slider 并有计数器分数。它计数很好,但我需要计数 =(所有幻灯片 - 1)。例如,如果我有 20 张幻灯片,我想显示总数 19。有什么办法可以做到这一点吗?我使用他们网站上的常规 j
我试图在按下按钮时添加分数,分数显示在 JTextField 中,但是当按下按钮时,分数会添加,它显示为 0。我有一个存储分数的整数字段 private int score=0; yesButton
我可以在选项(单选按钮)随机播放之前计算分数/分数,如下面的代码所示。在Collection.shuffle()之前,选项是固定的,因为 CorrectChoice将始终分配给c2单选按钮。那么我可以
我在这里的代码只能得到87%的代码,因为“带有非正参数的加法参数什么也没做。我该如何解决呢?我尝试了更多的方法,但是我什至无法解决此错误在同学的帮助下 说明是: 对于此分配,您将创建一个存储分数的类。
昨天,我尝试以一种方式执行此操作...今天我尝试另一种方式,但仍然卡住了。我必须找到一种使用整数除法和取模来做到这一点的方法。这是我的代码,后面是错误消息。 public int evaluateFr
我这里有一些特殊字符: http://209.141.56.244/test/char.php 但是当我在这里通过 ajax 抓取这个文件时,它们显示为 back ?标记: http://209.14
我得到了一张图表 G与 n顶点,标记自 1至 n (2 a_1 -> a_2 -> ... a_k -> n A然后将占据 1 的所有“子节点”节点, a_1 , ... a_x (其中 x = ce
我有一个看起来像这样的 mongodb 集合: db.scores.insert({"name": "Bob", value: 96.3, timeStamp:'2010-9-27 9:32:00'}
我试图更好地了解 lucene 如何对我的搜索进行评分,以便我可以对我的搜索配置或文档内容进行必要的调整。 以下是分数明细的一部分。 产品: 0.34472802 = queryWeight,
在我网站上用户生成的帖子下,我有一个类似亚马逊的评级系统: Was this review helpful to you: Yes | No 如果有投票,我会在该行上方显示结果,如下所示:
对于我的项目,我需要找出哪些搜索结果被视为“良好”匹配。目前,分数因查询而异,因此需要以某种方式对它们进行标准化。标准化分数将允许选择高于给定阈值的结果。 我为 Lucene 找到了几个解决方案: h
我有一个由 57 个变量组成的数据文件。由于测量水平不均匀,我想将其中的大约 12 个转换为 z 分数。我查找了互联网资源和帮助文件。一个互联网资源建议我需要 Rbasic 包(不存在)。我使用了 s
我对 SOLR 核心运行查询并使用过滤器限制结果例如 fq: {!frange l=0.7 }query($q)。我知道 SOLR 分数不有绝对意义,但是0.7(只是一个例子)是计算出来的基于用户输入
我想找到不同的方法来解决我遇到的现实生活问题:想象一下进行一场比赛或一场游戏,在此期间用户收集积分。您必须构建一个查询来显示具有最佳“n”分数的用户列表。 我举一个例子来澄清。假设这是用户表,其中包含
我有很多 wiki 页面,我想训练一个分类器,看看是否可以通过一些特征(包括段落的位置和段落的 lucene 分数)来确定重点搜索的位置。我尝试将每个段落视为一个文档,这使我能够获得每个段落的 luc
我是 R 编程新手,在使用一些基本代码时遇到问题。 我有一个包含以下列的数据框:条件(因子)、用户(因子)和灵敏度(int)。对于每个用户有 20 个敏感项。我需要为每个用户创建一个具有标准化敏感度分
我是一名优秀的程序员,十分优秀!