小编Ing*_*ngo的帖子

积分运算符quot与div

Type类积分有两个操作quotdiv,但在哈斯克尔2010语种报告它没有规定他们应该做的事情.假设这div是不可分割的,有什么quot不同,或者目的是quot什么?你什么时候使用一个,而另一个?

haskell

51
推荐指数
2
解决办法
1万
查看次数

在Haskell中获取一个子列表

可能是一个简单的,但我查看了文档并搜索了示例,我仍然不确定答案.

如果我有这样的列表:

[1,2,3,4,5,6,7,8,9,0]
Run Code Online (Sandbox Code Playgroud)

我想提取一个切片,比如从索引4到索引8,即我想要:

[5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)

在Haskell中这样做的惯用方法是什么?

haskell

20
推荐指数
3
解决办法
1万
查看次数

何时可以使用Java语言规范第4版?

既然JDK 7开发人员预览已经完成,人们可能会认为现在是新JLS的时候了.毕竟,语言已经发生了变化,虽然很小.

我还没找到任何东西.何时可以使用新的JLS,从哪里可以获得它?

java jls java-7

19
推荐指数
2
解决办法
3060
查看次数

有没有一个很好的理由为什么`deleteBy`没有最常见的类型?

Haskell 2010语言报告在第20.10.1.1节中指出:

deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)

事实上,GHC库中的实现将允许

deleteBy :: (b -> a -> Bool) -> b -> [a] -> [a]
Run Code Online (Sandbox Code Playgroud)

但实际上使用注释将类型限制为前者.

因此,人们不能说,例如:

foo = deleteBy fsteq 42 [(43, "foo"), (44, "bar"), (42, "baz")] where
    fsteq a (b,_) = a == b
Run Code Online (Sandbox Code Playgroud)

因为Int不一样(Int, String).

这有什么好的理由吗?

我问的原因是,如果没有充分的理由,我会deleteBy在我正在做的Data.List 的Frege端口中包含更通用的类型.但也许我忽略了什么?

编辑:正如@hammar所指出的,这也适用于其他xxx By函数.

haskell frege

18
推荐指数
3
解决办法
787
查看次数

`([] ==)[]`的类型如何推断出haskell?

这听起来很傻,但我无法得到它.为什么表达式[] == []可以输入?更具体地说,哪种类型(在类Eq中)被推断为列表元素的类型?

在ghci会话中,我看到以下内容:

Prelude> :t (==[])
(==[]) :: (Eq [a]) => [a] -> Bool
Run Code Online (Sandbox Code Playgroud)

但约束也Eq [a]意味着Eq a,如下所示:

Prelude> (==[]) ([]::[IO ()])

<interactive>:1:1:
No instance for (Eq (IO ()))
  arising from use of `==' at <interactive>:1:1-2
Probable fix: add an instance declaration for (Eq (IO ()))
In the definition of `it': it = (== []) ([] :: [IO ()])
Run Code Online (Sandbox Code Playgroud)

因此,在[] == []中,类型检查器必须假定列表元素是类Eq中的某种类型.但是哪一个?[]的类型只是[a],这肯定比Eq a => [a]更通用.

恕我直言这应该是暧昧的,至少在Haskell 98(这是我们所说的)

haskell types type-systems type-inference

16
推荐指数
1
解决办法
994
查看次数

java中varargs的最大参数个数是多少?

java中vararg可以使用的参数个数的最大值是多少?我相信应该有一些限制而且它不是无限的.

java jvm jvm-languages

16
推荐指数
1
解决办法
4671
查看次数

如果只有一个完全限定的名称,如何获取java类的二进制名称?

反射类和方法以及类加载器等需要所谓的"二进制"类名来使用.

问题是,如果一个人只有一个完全限定的名称,即一个人在源代码中使用的名称,那么如何获得二进制名称.

例如:

package frege;
public static class RT {
    ....
    public static class X { .... }
}
Run Code Online (Sandbox Code Playgroud)

该类的完全限定名称将是frege.RT.X.然而,要获得类对象,需要编写:

Class.forName("frege.RT$X")
Run Code Online (Sandbox Code Playgroud)

并不是

Class.forName("frege.RT.X")    // fails with ClassNotFoundException
Run Code Online (Sandbox Code Playgroud)

因为X碰巧是一个内在的阶级frege.RT.

一种可能的,但笨拙的,解决办法是更换.$向后,一个接一个,直到Class.forName()不扔ClassNotFoundException了或者有没有更多的.替换.

有没有更好/众所周知/标准的解决方案?我看着在API文档Class,CLassLoaderjava.lang.reflect但没有发现任何有用.

java reflection jvm

14
推荐指数
1
解决办法
7547
查看次数

具有类约束的类型的值实际上是否在运行时是一个函数?

考虑着名的

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
Run Code Online (Sandbox Code Playgroud)

假设,为了避免单态性限制,这用以下注释:

fibs :: Num a => [a]
Run Code Online (Sandbox Code Playgroud)

这似乎意味着在运行时,列表值fibs实际上并不存在,而是每次选择一个元素时重新计算列表的函数fibs

问题是如何在您知道的不同Haskell实现中实际处理此类情况.

--- ADDED ----我觉得我必须详细说明一下.考虑:

fibsInteger :: [Integer]
fibsInteger = 0: 1: zipWith (+) fibsInteger (tail fibsInteger)
Run Code Online (Sandbox Code Playgroud)

并假设在程序执行期间的值

(fibsInteger !! 42)
Run Code Online (Sandbox Code Playgroud)

需要评估.在那种情况下,我希望像这样的后续评估会发现fibsInteger已经评估了前43个元素.这也意味着它fibsInteger本身及其前42个尾部已经在WHNF中.

然而,就fibs我所知,多态性是不可能的.FUZxxl的评论

因为类型类通常会引入一个包含具有该类型类功能的字典的新参数

似乎支持我的观点,即fibs有效的值在运行时有效地显示为函数?

如果是这样的话,那么像((maximum . map (fibs!!)) [100000 .. 101000] :: Integer)非多态变体那样的应用程序需要显着更长时间才能进行评估,((maximum . map (fibsInteger!!)) [100000 .. 101000] :: Integer)因为每次都必须重新计算前100000个数字.(不幸的是,我现在不能尝试这个)

haskell

13
推荐指数
1
解决办法
347
查看次数

考虑finally {...}块

我想知道以下两个swnippest在语义上是否相同,如果没有,有什么区别(我们假设我们想要计算类型R的结果,并且想要防止在执行过程中可能抛出的异常X所以):

public R tcf(....) {
   try {
       R some = ...;
       ... compute the result ....
       return some; 
   }
   catch (X exception) {
       ... exception handling ....
   }
   finally {
       ... clean up ....
   }
}
Run Code Online (Sandbox Code Playgroud)

以下内容:

public R tc(....) {
   try {
       R some = ...;
       ... compute the result ....
       return some; 
   }
   catch (X exception) {
       ... exception handling ....
   }
}

public R tf(....) {
    try {
        return tc(....);  // wrap the try-catch in tc()
    } …
Run Code Online (Sandbox Code Playgroud)

java exception-handling

12
推荐指数
1
解决办法
345
查看次数

寻找有助于测试Haskell实现以获得标准一致性的资源

我在haskell.org,haskell-prime wiki等上浏览了一段时间,但没有找到任何资源,如测试套件或其他一些资源,可以检查Haskell实现是否符合标准.

有人知道这些资源是否存在,并指出我在那里?

否则,我想知道如果有人声称他有一个符合Haskell-2010标准的实现,Haskell Prime Comitee会做什么?

haskell

10
推荐指数
1
解决办法
168
查看次数