小编Sci*_*pio的帖子

无法理解Monad >>应用的结果

操作>>说明如下:

顺序组成两个动作,丢弃第一个产生的任何值,如命令式语言中的排序操作符(如分号).

这是让我困惑的例子:

> ([1] ++ [2]) >> ([2] ++ [3])
[2,3,2,3]
Run Code Online (Sandbox Code Playgroud)

我期待列表[2,3],它将是正确表达部分的结果.如何解释[2,3,2,3]的结果?

monads haskell

6
推荐指数
2
解决办法
131
查看次数

如何在_Static_assert中使用const int?

序言:我想静态检查C程序中struct成员的数量,所以我创建了两个宏,每个宏都将int常量存储__LINE__到变量中:

 #include <stdio.h>
 #include <string.h>
 #define BEGIN(log) const int __##log##_begin = __LINE__;
 #define END(log) const int __##log##_end = __LINE__;
 BEGIN(TEST);
 struct TEST {
    int t1;
    int t2;
    float t3;
    int t4;
    int t5;
    int t6;
 };
 END(TEST)

 main()
 {
    static_assert(__TEST_end - __TEST_begin  == 6 + 3, "not_equal");
 }
Run Code Online (Sandbox Code Playgroud)

当我将C ++编译器与-std = c ++ 11选项一起使用时(c ++ test.cpp -std = c ++ 11),它可以正常工作,但是相同的代码(将static_assert替换为_Static_assert)在C语言中不起作用(gcc版本4.8.4),但有一个奇怪的错误,因为此表达式可以在编译时求值:

test.c:在函数“ main”中:test.c:18:17:错误:静态断言中的表达式不是常量_Static_assert(__ TEST_end-__TEST_begin == 6 + 4,“ not_equal”);

如何解决此错误或达到C语言的原始目标?

c gcc c11

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

为什么Python 2.7为threading.Thread创建进程

我在ARM Raspbian linux,Python 2.7.13和amd64 Gentoo linux,Python 2.7.14上运行代码

我有一个功能

import threading
def r() : 
    s = 1
    while True:
        s = s + 1
Run Code Online (Sandbox Code Playgroud)

然后我为这个函数创建线程

t = threading.Thread(target=r)
t.start()
Run Code Online (Sandbox Code Playgroud)

然后在htop中我可以看到另一个生成的进程(有自己的PID)!和处理.线程文档说:

CPython实现细节:在CPython中,由于Global Interpreter Lock,只有一个线程可以同时执行Python代码(即使某些面向性能的库可能会克服此限制).如果您希望应用程序更好地利用计算资源对于多核机器,建议您使用多处理.

为什么这种行为与文档不同?

python python-multithreading

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

标签 统计

c ×1

c11 ×1

gcc ×1

haskell ×1

monads ×1

python ×1

python-multithreading ×1