我注意到今天我正在和Haskell一起玩,有可能做类似的事情
($ 4) (> 3)
Run Code Online (Sandbox Code Playgroud)
产量True.这里发生了什么?有一些直觉会很棒.
我猜?它看起来像是($ 4)一个不完整的函数应用程序,但我感到困惑的是,它$是一个中缀运算符,所以不应该看起来像(4 $)?这不会编译,所以显然不会,这让我相信我并不真正理解发生了什么.这个(>3)术语对我来说很有意义,因为如果你提供类似的东西(\x -> x 4) (>3),你最终会得到相同的结果.
假设我为自己做了一些记忆:
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) 我不是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))成功.我的问题是