小编waf*_*cat的帖子

mfrow&mfcol在par()中代表什么?

正如标题所说.我问,因为理解缩写代表什么有助于我记住它,我真的很挣这个参数.

如果答案不直观,你能解释一下你如何合理化吗?

r

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

Zenity 作为日期时间选择器

我看到zenity可以使用该--calendar选项选择日历日期。

有没有办法让它也提示一段时间?我看了说明书,好像没有。如果是这样的话,有人知道有一个简单的实用程序可以以图形方式提示用户输入日期和时间吗?

ubuntu command-line datetimepicker zenity

6
推荐指数
0
解决办法
443
查看次数

弱头正常形式和评估顺序

我读过很多关于弱头正常形式和seq的书.但是我仍然无法想象Haskell评估顺序背后的逻辑

一个常见的例子说明何时以及如何使用,但我仍然不明白常见的例子

foldl (+) 0 [1..5000000]
Run Code Online (Sandbox Code Playgroud)

可能导致堆栈溢出.而使用另一种折叠定义seq则没有

foldl' _ a [] = a
foldl' f a (x:xs) = let a' = f a x in a' `seq` foldl' f a' xs
foldl' (+) 0 [0..5000000]
Run Code Online (Sandbox Code Playgroud)

从我读过的seq的解释,作者非常谨慎地做出如下清楚:

  • 第一个参数seq不能保证在第二个参数之前进行求值
  • 第一个参数seq只会被评估为弱头正常形式
  • seq只有当第二个参数被评估为WHNF时才会对第一个参数进行评估

那么,如果以上是正确的(是吗?)那么为什么不foldl'溢出foldl呢?

当我们减少一步时,不应该看起来像这样,对吧?

foldl' (+) 0 (1:xs) = let a' = (+) 0 1 in a' `seq` foldl' (+) a' xs
Run Code Online (Sandbox Code Playgroud)

在上面,seq由于存在需要完成的功能应用,因此第二个参数不在WHNF中.seq在我们达到第二个参数的WHNF之前,我们是否可以保证评估此处的第一个参数?

stack-overflow haskell lazy-evaluation strictness weak-head-normal-form

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