小编Osc*_*kin的帖子

Haskell中是否定义了部分或curried函数的性能?

在以下代码中:

ismaxl :: (Ord a) => [a] -> a -> Bool
ismaxl l x = x == maxel
           where maxel = maximum l

main = do
  let mylist = [1, 2, 3, 5]
  let ismax = ismaxl mylist
  --Is each call O(1)?  Does each call remember maxel?
  let c1 = ismax 1
  let c2 = ismax 2
  let c3 = ismax 3
  let c5 = ismax 5
  putStrLn (show [c1, c2, c3, c5])
Run Code Online (Sandbox Code Playgroud)

部分函数是否为max,计算maxel?特别是,有人可以指出关于Haskell中部分函数的复杂性的规则吗?在上面的例子中,编译器必须只调用一次最大值吗?换句话说,部分函数是否保留了内部where子句的先前调用的引用?

我有一些CPU限制的代码不能令人满意,我正在寻找可能的错误,我的理由是复杂性.

performance profiling haskell partial-application lazy-evaluation

22
推荐指数
3
解决办法
934
查看次数

为什么Scala中没有单元素元组的Tuple1 Literal?

Python有(1,)一个元素元组.在Scala中,(1,2)适用于Tuple2(1,2)但是我们必须使用Tuple1(1)获得的单个元素的元组.这可能看起来像一个小问题,但设计期望产品的API对于传递单个元素的用户来说很难处理,因为他们必须编写Tuple1(1).

也许这是一个小问题,但Scala的一个主要卖点是打字更少,输入更少.但在这种情况下,似乎更多打字更多打字.

请告诉我:1)我错过了这个,它以另一种形式存在,或者2)它将被添加到该语言的未来版本中(并且它们将接受补丁).

syntax scala tuples

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

在SBT中,可以自动命名 - 破坏私人使用的包吗?

考虑使用特定版本化jar来实现方法的常见情况,但不公开公共或受保护API中该jar的任何类型(仅在私有方法的方法签名中).

现在我想要的是通过名称自动编译时链接此代码 - 修改原始包名称并将其替换为SBT中生成的代码(同样:我想在SBT中添加插件或在build.sbt中添加设置这样做每一个sbt compile).

这样做的目的是避免使用具有相同包/类名的类的多个可能不兼容的版本的类路径错误.注意:在我上面描述的情况中,内联或这个名称修改应该始终有效,并允许一个人走向版本地狱(以更大的罐子为代价).

java versioning scala jar sbt

6
推荐指数
1
解决办法
319
查看次数