小编qua*_*dev的帖子

Haskell:如何映射元组?

在Haskell中,我可以轻松地映射列表:

map (\x -> 2*x) [1,2]
Run Code Online (Sandbox Code Playgroud)

给了我[2,4].是否有任何"mapTuple"功能可以这样工作?

mapTuple (\x -> 2*x) (1,2)
Run Code Online (Sandbox Code Playgroud)

结果是(2,4).

mapping haskell tuples

60
推荐指数
11
解决办法
3万
查看次数

你能认出Haskell程序中的无限列表吗?

可能重复:
如何判断列表是否无限?

例如,在Haskell中,您可以定义无限列表[1..].Haskell中是否有内置函数来识别列表是否具有有限长度?我不认为可以编写用户提供的函数来执行此操作,但Haskell的列表的内部表示可能能够支持它.如果没有标准的Haskell,是否有提供这种功能的扩展?

haskell list

25
推荐指数
3
解决办法
1819
查看次数

按值和引用传递仿函数对象(C++)

比较通用集成功能:

template <class F> double integrate(F integrand);
Run Code Online (Sandbox Code Playgroud)

template <class F> double integrate(F& integrand);
Run Code Online (Sandbox Code Playgroud)

要么

template <class F> double integrate(const F& integrand);
Run Code Online (Sandbox Code Playgroud)

各自的优点和缺点是什么?STL使用第一种方法(按值传递),是否意味着它是最普遍的方法?

c++ templates

19
推荐指数
2
解决办法
4647
查看次数

Haskell中函数的相等性

我试图定义一个函数,它将获取一个Double -> Double函数并返回其数学导数.我尝试过以下操作:

der :: (Double -> Double) -> (Double -> Double)
der f
    | f == exp = exp
    | otherwise = undefined
Run Code Online (Sandbox Code Playgroud)

但哈斯克尔不支持==Double -> Double值.我在Haskell尝试做什么是不可能的?

haskell equality

14
推荐指数
2
解决办法
4429
查看次数

在C++ 0x中打开枚举类

C++ 0x中新的"枚举类"声明是否允许切换新的枚举?

我问的是标准说的是什么,而不是编译器的支持.

c++ enums c++11

13
推荐指数
2
解决办法
4051
查看次数

在Haskell数据构造函数中输入检查

如何向Haskell数据构造函数添加输入检查?让我说我有

import Data.Time.Calendar

data SchedulePeriod = SchedulePeriod { startDate :: Day
    , endDate :: Day
    , accrualStart :: Day
    , accrualEnd :: Day
    , resetDate :: Day
    , paymentDate :: Day
    , fraction :: Double }
    deriving (Show)
Run Code Online (Sandbox Code Playgroud)

我想强加一个约束startDate < endDate.有没有办法在不创建抽象数据类型的情况下执行此操作?

validation constructor haskell

13
推荐指数
2
解决办法
2197
查看次数

Haskell`seq`运算符的时间成本

这个FAQ说明了这一点

seq运算符是

seq :: a -> b -> b
Run Code Online (Sandbox Code Playgroud)

x seqy将评估x,足以检查它是否为底部,然后丢弃结果并评估y.这可能看起来没什么用,但这意味着在考虑y之前保证会对x进行求值.

这对Haskell来说非常好,但它是否意味着在

x `seq` f x
Run Code Online (Sandbox Code Playgroud)

评估费用x将支付两次("丢弃结果")?

haskell strict lazy-evaluation seq

12
推荐指数
2
解决办法
882
查看次数

是否可以在Haskell函数中调试模式匹配?

我已经定义了一种类型

data Expr = 
    Const Double
    | Add Expr Expr
    | Sub Expr Expr
Run Code Online (Sandbox Code Playgroud)

并将其声明为Eq类型类的实例:

instance Eq Expr where
    (Add (Const a1) (Const a2)) == Const b = a1+a2 == b
    (Add (Const a1) (Const a2)) == (Add (Const b1) (Const b2)) = a1+a2 == b1 + b2
Run Code Online (Sandbox Code Playgroud)

当然,表达式的评估Sub (Const 1) (Const 1) == Const 0将失败.如何在运行时调试模式匹配过程以发现它失败?我想看看Haskell如何获取参数==并遍历模式.有可能吗?

debugging haskell pattern-matching

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

我应该到处使用std ::和boost ::前缀吗?

在我的C++代码中,我不使用声明using namespace std;using namespace boost;.这使我的代码更长,意味着更多的输入.我正在考虑开始使用"使用"声明,但我记得有些人反对这一点.建议的做法是什么?标准和助力是如此常见,那应该没有太大的伤害?

c++

7
推荐指数
4
解决办法
1774
查看次数

Haskell:不同功能组合的性能差异?

以下代码:

import Control.Exception
import Data.List

updateAverage :: (Fractional t) => (t, t) -> t -> (t, t)
updateAverage (old_value, old_counter) x =
    let new_counter = old_counter + 1
    in 
        assert(new_counter /= 0)
        old_value `seq` (old_value + (x - old_value) / new_counter, new_counter)

average values = fst (foldl' updateAverage (0.0, 0.0) values) -- version I

main = do
    let v = [1 .. 1000000]
    let a = average v
    putStrLn (show a)
Run Code Online (Sandbox Code Playgroud)

ghc.exe -O3当我用average函数的定义替换时,变得更快(编译选项:)

average = fst . …
Run Code Online (Sandbox Code Playgroud)

performance haskell function-composition

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