对不起,如果已经问过这个问题,我没找到.抱歉我的英语不好.
我正在学习Haskell并尝试使用列表.我写了一个函数,它按照特定模式转换列表,我无法检查它是否现在有效,但我想是这样.
这个函数不是尾调用函数,所以我认为用一个大的列表来计算这个函数会很糟糕:
transform :: [Int] -> [Int]
transform list = case list of
(1:0:1:[]) -> [1,1,1,1]
(1:1:[]) -> [1,0,1]
[1] -> [1,1]
(1:0:1:0:s) -> 1:1:1:1: (transform s)
(1:1:0:s) -> 1:0:1: (transform s)
(1:0:s) -> 1:1: (transform s)
(0:s) -> 0: (transform s)
Run Code Online (Sandbox Code Playgroud)
所以我想到了另一个功能,它会"更好":
transform = reverse . aux []
where
aux buff (1:0:[1]) = (1:1:1:1:buff)
aux buff (1:[1]) = (1:0:1:buff)
aux buff [1] = (1:1:buff)
aux buff (1:0:1:0:s) = aux (1:1:1:1:buff) s
aux buff (1:1:0:s) = aux (1:0:1:buff) s …Run Code Online (Sandbox Code Playgroud) 我启动了一个Qt项目并将其链接到我编写的一些C++代码来解析文件.此代码使用std :: stod()来解析double值,并且在普通的c ++项目中工作正常,但是当与Qt应用程序一起使用时,std :: stod()仅返回数字的整数部分.
我编写并运行了一些测试代码,一个用g ++ 6.1编译,另一个用qmake 5.6和相同的g ++编写.结果与我的项目结果相同.
用g ++编译的代码:
#include <iostream>
int main(int argc, char ** argv)
{
const std::string number("3.14");
double dbl = std::stod(number);
std::cout << dbl << '\n'; // 3.14
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它显示了良好的价值: 3.14
用Qt编译的代码:
#include <QCoreApplication>
#include <QDebug>
#include <iostream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const std::string snumber("3.14");
const QString qnumber = QString::fromStdString("3.14");
double std_d = std::stod(snumber);
double qt_d = qnumber.toDouble();
qDebug() << std_d << qt_d; // 3 …Run Code Online (Sandbox Code Playgroud)