在学习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
给定一个包含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) 我不明白为什么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)