小编apc*_*apc的帖子

为什么`($ 4)(> 3)`相当于`4> 3`?

我注意到今天我正在和Haskell一起玩,有可能做类似的事情

($ 4) (> 3)
Run Code Online (Sandbox Code Playgroud)

产量True.这里发生了什么?有一些直觉会很棒.

我猜?它看起来像是($ 4)一个不完整的函数应用程序,但我感到困惑的是,它$是一个中缀运算符,所以不应该看起来像(4 $)?这不会编译,所以显然不会,这让我相信我并不真正理解发生了什么.这个(>3)术语对我来说很有意义,因为如果你提供类似的东西(\x -> x 4) (>3),你最终会得到相同的结果.

haskell

10
推荐指数
3
解决办法
467
查看次数

以类似于数组文字的方式初始化malloc内存?

假设我为自己做了一些记忆:

byte *header = calloc(5 + ZHEADERSIZE, sizeof(byte));
Run Code Online (Sandbox Code Playgroud)

这给了我一个0的数组.但是如果我想对内存进行自定义初始化呢?以下代码是数组文字的相当详细的初始化.请注意,它实际上包含变量,所以我不能只记忆所有数组.我想知道我是否可以复制这种初始化样式的内存块,而不必手动插入malloc.

unsigned char zhead[] =
{
    0x00, 37, 0, 218, 0xFF,

    0x50, 0x4b, 0x03, 0x04,
    0x14,
    0x00,
    0x00, 0x00,
    0x08, 0x00,
    0x08, 0x03,
    0x64, 0x3c,
    0xAA, 0xBB, 0xCC, 0xDD,
    csize, (csize>>8), 0, 0,
    uncsize, (uncsize>>8), 0, 0,
    0x07, 0x00,
    0x00, 0x00,
    'r', '/', 'r', '.', 'z', 'i', 'p'
};
Run Code Online (Sandbox Code Playgroud)

c

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

Typecheck奇怪与列表列表

我不是Haskell专业人士.今天我对今天的类型系统有一些奇怪的经历.第二行会导致类型错误.问题是maxdiag (as:bs:cs:ds)第二行:

maxdiag ((a:as):(b:bs):(c:cs):(d:ds):xs) len =
  maximum [a*(bs !! 0)*(cs !! 1)*(ds !! 2), maxdiag (as:bs:cs:ds) (len-1)]
Run Code Online (Sandbox Code Playgroud)

它失败并出现以下错误:

Occurs check: cannot construct the infinite type: a0 = [a0]
Expected type: [[a0]]
  Actual type: [a0]
In the second argument of `(:)', namely `ds'
In the second argument of `(:)', namely `cs : ds'
Run Code Online (Sandbox Code Playgroud)

当我将第二行的违规部分更改为maxdiag (as:bs:cs:ds:xs),以便它读取

maxdiag ((a:as):(b:bs):(c:cs):(d:ds):xs) len =
  maximum [a*(bs !! 0)*(cs !! 1)*(ds !! 2), maxdiag (as:bs:cs:ds:xs) (len-1)]
Run Code Online (Sandbox Code Playgroud)

......那就没有错误.同样,如果我用它替换maxdiag (as:bs:cs:(ds:xs))成功.我的问题是

  1. 这个错误是什么意思?
  2. 它为什么会发生?
  3. 为什么这两个看似不同的东西能解决它?

haskell types

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

标签 统计

haskell ×2

c ×1

types ×1