小编Pie*_*rot的帖子

为什么列表推导在Haskell中没有错误地接受混合的`[Char]`和`[[Char]]`?

在学习Haskell的过程中,我发现了令我困惑的事情.

我不明白为什么这段代码有效:

Prelude> [y | y <- "a", y <- ["a"]]
["a"]
Run Code Online (Sandbox Code Playgroud)

我试图改为显式[Char]并获得相同的结果(这是有道理的):

Prelude> [y | y <- ['a'], y <- ["a"]]
["a"]
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,这也是有效的:

Prelude> [y | y <- "a", y <- [["a"]]]
[["a"]]
Run Code Online (Sandbox Code Playgroud)

[编辑]给出的错误与同一事实无关:

相反,这正如我所期望的那样无效:

Prelude> [y | y <- 'a', y <- ['a']]
<interactive>:12:11: error:
* Couldn't match expected type `[t0]' with actual type `Char'
* In the expression: 'a'
  In a stmt of a list comprehension: y <- 'a'
  In the expression: [y | y …
Run Code Online (Sandbox Code Playgroud)

polymorphism haskell types list-comprehension parametric-polymorphism

9
推荐指数
1
解决办法
144
查看次数

从char*缓冲区读取int32_t的惯用cpp14方法是什么?

给定一个包含int(小端)的char缓冲区c.如何将其读作int32_t?

我写了这段代码,但感觉不是惯用的cpp.

int32_t v;
char* p = (char*)&v;
for (int i=0; i < 4; i++) {
    *(p+i) = *(c+i);
}
Run Code Online (Sandbox Code Playgroud)

c++ endianness c++14

6
推荐指数
3
解决办法
607
查看次数

为什么在Golang中[...] int {0} vs make([] int,1,1)的DeepEqual失败?还有其他选择吗?

我不明白为什么DeepEqual在这种情况下会失败?

是否有内置的golang替代方案而不迭代每个值.

package main

import (
    "fmt"
    "reflect"
)

func main() {
    a1 := [...]int{0}
    b1 := make([]int, 1, 1)
    fmt.Printf("Equal: %t %v %v\n", reflect.DeepEqual(a1, b1),a1,b1)

}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/lqU3nBq6B3

go

-5
推荐指数
1
解决办法
150
查看次数