小编Ale*_*ros的帖子

这段混淆的Haskell代码如何工作?

在阅读http://uncyclopedia.wikia.com/wiki/Haskell(并忽略所有"令人反感"的东西)时,我偶然发现了以下一段混淆代码:

fix$(<$>)<$>(:)<*>((<$>((:[{- thor's mother -}])<$>))(=<<)<$>(*)<$>(*2))$1
Run Code Online (Sandbox Code Playgroud)

当我在ghci(导入Data.FunctionControl.Applicative)之后运行那段代码时,ghci打印所有2的幂的列表.

这段代码如何工作?

haskell

88
推荐指数
3
解决办法
2万
查看次数

为什么GHC抱怨非详尽的模式?

当我使用GHC编译以下代码时(使用-Wall标志):

module Main where

data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving (Show)

insert :: (Ord a) => a -> Tree a -> Tree a
insert x EmptyTree = Node x EmptyTree EmptyTree
insert x (Node a left right)
    | x == a = Node a left right
    | x < a = Node a (insert x left) right
    | x > a = Node a left (insert x right)

main :: IO() …
Run Code Online (Sandbox Code Playgroud)

haskell ghc

27
推荐指数
3
解决办法
2029
查看次数

二进制堆是否支持reduce-key操作?

根据http://en.wikipedia.org/wiki/Heap_%28data_structure%29#Comparison_of_theoretic_bounds_for_variants,它采用Θ(logn)(转换为O(logn))来执行减小键操作.但是,似乎没有包含具有减少键操作的二进制堆实现的站点.

因此,由于Web上缺少实现,是否可以在二进制堆中执行reduce-key操作?

priority-queue data-structures

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

在发生溢出的情况下,stdint.h中定义的C99签名整数类型是否表现出良好定义的行为?

对于C(short,int,long等)中的"标准"有符号整数类型的所有操作,如果它们产生超出[TYPE_MIN,TYPE_MAX]间隔的结果(其中TYPE_MIN,TYPE_MAX是最小值和最大整数值),则表现出未定义的行为可以通过特定整数类型存储的.

但是,根据C99标准,所有intN_t类型都需要具有二进制补码表示:

7.8.11.1精确宽度整数类型
1. typedef名称intN_t指定有符号整数类型,其宽度为N,无填充位和二进制补码表示.因此,int8_t表示具有正好8位宽度的有符号整数类型.

这是否意味着intN_tC99 中的类型在整数溢出的情况下表现出良好定义的行为?例如,这段代码定义明确吗?

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main(void)
{
    printf("Minimum 32-bit representable number: %" PRId32 "\n", INT32_MAX + 1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c standards integer-overflow c99

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

int promotion:以下定义明确吗?

假设在C实现上(例如在x86 C编译器上)USHRT_MAX = 65535INT_MAX = 2147483647.那么,以下陈述是否明确定义?

unsigned short product = USHRT_MAX * USHRT_MAX;
Run Code Online (Sandbox Code Playgroud)

根据C99标准中的以下内容,两个操作数都被提升为int(因为它int可以表示所有可能的值unsigned short),因此,结果没有明确定义,因为会发生溢出(65535 ^ 2 = 4294836225 > 2147483647),这意味着值product不是明确界定:

6.3.1.1-1

如果int可以表示原始类型的所有值,则该值将转换为int; 否则,它将转换为unsigned int.这些被称为整数促销.(48)所有其他类型由整数促销不变.

48)整数提升仅适用于:通常的算术转换,某些参数表达式,一元+, - 和〜运算符的操作数,以及移位运算符的两个操作数的一部分,由它们各自指定小节.

但是,根据以下内容,结果是明确定义的,因为涉及无符号操作数的计算不会溢出:

6.2.5-9

有符号整数类型的非负值范围是相应无符号整数类型的子范围,并且每种类型中相同值的表示是相同的.(31)涉及无符号操作数的计算永远不会溢出,因为结果是无法用结果无符号整数类型表示减去模数,该数字大于可由结果类型表示的最大值.

product上述陈述中的变量是否具有明确定义的值?

编辑:在下列情况下会发生什么?

unsigned short lhs = USHRT_MAX;
unsigned short rhs = USHRT_MAX;
unsigned short product = lhs * rhs;
Run Code Online (Sandbox Code Playgroud)

c standards c99

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

STL向量与列表:图形邻接列表最有效吗?

在push_back时,列表占用大部分时间来分配内存.另一方面,当需要调整大小时,向量必须复制它们的元素.因此,哪个容器最适合存储邻接列表?

c++ stl graph adjacency-list

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

制作:Q!具有相同的功能:q!在vim

有时在vim中,我不小心输入:Q而不是:q在正常模式下.为了解决这个问题,我在.vimrc中添加了这个:

command Q q
Run Code Online (Sandbox Code Playgroud)

这适用于:Q,但是如果我键入:Q !, vim以"No!allowed"响应.我如何让vim接受:Q!并将其解释为:q!?

vim

5
推荐指数
2
解决办法
547
查看次数

"饮食哲学家"的以下解决方案有什么问题?

为了熟悉Haskell中的STM,我为Dining Philosophers问题编写了以下解决方案:

import Control.Concurrent
import Control.Concurrent.STM
import Control.Monad
import System.Random

type Fork = TVar Bool
type StringBuffer = TChan String

philosopherNames :: [String]
philosopherNames = map show ([1..] :: [Int])

logThinking :: String -> StringBuffer -> STM ()
logThinking name buffer = writeTChan buffer $ name ++ " is thinking..."

logEating :: String -> StringBuffer -> STM ()
logEating name buffer = writeTChan buffer $ name ++ " is eating..."

firstLogEntry :: StringBuffer -> STM String
firstLogEntry buffer = do …
Run Code Online (Sandbox Code Playgroud)

concurrency haskell ghc stm

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

为什么只有在SDL2中设置非零alpha大小时才会获得sRGB帧缓冲?

我正在尝试按照本指南以及如何在默认帧缓冲区上启用SRGB支持的SDL2文档中以正确的伽马方式呈现典型的OpenGL颜色三角形.

这是我编写的代码,它绘制了三角形:

#include <SDL.h>

// Header file generated with glLoadGen
#include "gl_core_3_3.h"

#include <cstdlib>

void sdl_loop(SDL_Window* window);

static const char* const vertexSource = R"(
#version 330

in vec2 position;
in vec3 color;

out vec3 vs_color;

void main()
{
    gl_Position = vec4(position, 0.0, 1.0);
    vs_color = color;
}
)";

static const char* const fragmentSource = R"(
#version 330

in vec3 vs_color;
out vec4 fragColor;

void main()
{
    fragColor = vec4(vs_color, 1.0);
}
)";

static const float vertices[] = { …
Run Code Online (Sandbox Code Playgroud)

c++ opengl srgb opengl-3 sdl-2

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

在结构内部的TR1 unordered_map中定义哈希函数

根据这个,可以在TR1 unordered_map中定义一个相等函数,如下所示:

#include <tr1/unordered_map>
using namespace std;
using namespace std::tr1;
struct foo{
    ...
    bool operator==(const foo& b) const{
        return ..;
    }
};

unordered_map<foo,int> map;
Run Code Online (Sandbox Code Playgroud)

是否可以以相同的方式定义散列函数?

c++ hash unordered-map tr1

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