小编Shu*_*ush的帖子

Haskell列表的复杂性

对不起,如果已经问过这个问题,我没找到.抱歉我的英语不好.

我正在学习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)

haskell list concatenation

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

在Qt5中从std :: stod()和QString :: toDouble()获取不同的值

我启动了一个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)

floating-point double qt c++11

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

标签 统计

c++11 ×1

concatenation ×1

double ×1

floating-point ×1

haskell ×1

list ×1

qt ×1