_foldr :: (a -> b -> b) -> b -> [a] -> b
_foldr op z [] = z
_foldr op z (x:xs) = x `op` _foldr op z xs
嗨,让我们考虑一下上面的代码。之后:
ghci> _foldr + 0 [1]
我有错误:
No instance for (Num t0) arising from the literal `1'
The type variable `t0' is ambiguous
Possible fix: add a t
假设我有一个函数,它在满足给定条件时返回某个值,而在该条件不满足时不返回任何值。
例如:
fun foo(n)= if n< 100000则n其他(类似于exit函数。我们在其他编程语言中也有这种功能。我们这里有类似的东西吗?)
我最初想写(),但它在两个条件if或two中显示不匹配。
更明确地说,我想写一个函数,它接受一个数字,任何数字,如果它是有效的整数,就组合到一个列表中,如果它不是整数,就忽略它。
我使用Math.round(.)进行了以下两种计算:
double x = 0.57145732;
x = x * 100;
x = Math.round(x * 10);
x = x / 10;
如果我现在打印x的值,它将显示: 57.1。
double x = 0.57145732;
x = (Math.round((x * 100) * 10)) / 10;
// x = (Math.round(x * 1000)) / 10; //Also gives me 57.0.
如果我现在打印x的值,它将显示: 57.0。
为什么结果会有这种差别呢?
我正在使用Ubuntu 16.04.5和GCC版本5.4.0。
我在玩sizeof()操作符,编写了下面的代码:
#include <stdio.h>
int main(int argc, char *argv[]){
long int mylint = 31331313131.1313;
printf("size of long int is %d\n", sizeof(mylint));
printf("size of long int is %d\n", sizeof(long int));
在定点数学中,我使用了很多16位信号,并与32位中间结果进行乘法运算。例如:
int16_t a = 16384; //-1.0q14 or 1.0*2^14
int16_t b = -24576; // -1.4q14 or 1.4*2^14
int16_t c; // result will be q14
c = (int16_t)(((int32_t)a * (int32_t)b)>>14);
假设a是一个q14数,那么c具有与b相同的比例。
这很好,并且适用于无符号算术和有符号算术。
问题是:如果我混合了类型,会发生什么?例如,如果我知道乘数"a“总是在0.0
我知道这是一个简单的问题,但它是在我编码的时候出现的,我想知道它现在是如何工作的。所以,我的第一个问题是,当printf被给出一个整数,如下所示,但是期望一个%f浮点数时,为什么它总是输出0.000000?我是在GCC的linux终端上运行这个的。
int main() {
int a = 2, b = 5, result = 0;
result = b/a*a;
printf("%f\n", result);
}
//Above printf statement outputs 0.000000 every time.
然后,当我使用下面的代码并在printf需要%i整数
我肯定这是我正在做的愚蠢的事情,但是为什么快速解析器告诉我不能转换表达式的类型(),而AudioQueueDispose的定义显然返回了OSStatus类型?我把这个问题推迟了一段时间,因为我知道这会是一个愚蠢的问题,我只是被忽视了。
为了简单起见,我把它放到了Xcode游乐场中。
import UIKit
import AudioToolbox
import AVFoundation
var audioQueue:AudioQueue
var status : OSStatus = OSStatus(noErr)
status = AudioQueueDispose(audioQueue,
unsigned char a, b;
b = something();
a = ~b;
静态分析器抱怨在最后一行中被截断,大概是因为b在其位翻转之前被提升为int,结果将是int类型。
我只对升级的int的最后一个字节感兴趣--如果b是0x55,我需要a是0xAA。我的问题是,,C规范是否说明了截断是如何发生的,,还是实现定义/未定义?它是否保证a总是得到我所期望的值,或者它会在符合标准的平台上出错?
当然,在分配之前转换结果将使静态分析器保持沉默,但我想知道首先忽略此警告是否安全。
谁能告诉我为什么这段代码不能工作?它总是显示分段错误
int main()
{
int a = 10;
int b = (int)&a;
int *c = (int*)b;
printf("%d", *c);
return 0;
}
当我打印c的值时,正如我所期望的那样,它是a的地址,但是当我遵守它时,发生了分段错误。假设这是一个32位编译器。
有人能对这里的问题提供任何见解吗?我使用表中的BIGINT(20)字段来存储按位值(这里还有其他字段,但为了简单起见,我忽略了这些字段),当对该字段执行SELECT语句时,它将返回对某些值的记录选择,选择是点对点,而另一些则是错误的。
例如:
TABLE A (there is a created_at timestamp field that isn't shown below)
id flag approved
1 0 Y
2 1 Y
3 10 N
4 100 Y
5