Tag: 哈斯克尔

如果返回a =返回b,那么a = b?

你能certificate,如果return a = return b然后a=b ? 当我使用= ,我的意思是在法律和certificate的意义上,而不是Eq意义。 我所知道的每一个monad似乎都能满足这个要求,我想不出一个有效的monad,而不是( Const a是一个函数和应用,而不是monad)。

当我用Haskell编写*时发生了什么?

我正试图理解的结果 (*) . (+) 在Haskell。 我知道组合运算符只是math函数的标准组成 – 所以 (f . g) = f (gx) 但: (*) . (+) :: (Num (a -> a), Num a) => a -> (a -> a) -> a -> a 我正在努力理解这种types的签名。 我希望能够做到这样的事情: ((*) . (+)) 1 2 :: Num a => a -> a = (* (+ 1 2)) 是什么意思 […]

monads的创意用途

我正在寻找monads的创意用途来学习。 我读过某个地方,人工智能中使用monad,但作为monad新手,我看不出如何。 请包括一个链接到源代码和样本用法。 没有标准的单子,请。

使用无盒装载体自动分化

是否有一个Haskell库自动区分与无盒子的vector? Numeric.AD的grad函数需要一个Traversable的实例,而Data.Vector.Unboxed则不是。

为什么乘法只在一边短路

我fix ,搞乱之后我碰到了一些奇怪的行为,即0 * undefined是*** Exception: Prelude.undefined和undefined * 0是0 。 这也意味着fix (0 *)是*** Exception: <<loop>>和fix (* 0)是0 。 玩过之后,似乎是因为在两个方向上进行短路并不是微不足道的,因为这没有什么意义,没有某种奇怪的平行计算,从第一个非平行计算开始,底部返回。 这种东西是否在其他地方出现(reflectionfunction不是底层价值的reflection),是我可以安全依靠的东西吗? 也有一个实际的方法,使(0 *)和(* 0)评估为零,无论传入的值。

如何在Haskell中提高这个数值计算的性能?

我正在把David Blei的C潜在Dirichlet分配的C实现移植到Haskell中,我正在试着决定是否在C中留下一些低级的东西。下面的函数就是一个例子 – 它是一个近似值的二阶导数: double trigamma(double x) { double p; int i; x=x+6; p=1/(x*x); p=(((((0.075757575757576*p-0.033333333333333)*p+0.0238095238095238) *p-0.033333333333333)*p+0.166666666666667)*p+1)/x+0.5*p; for (i=0; i<6 ;i++) { x=x-1; p=1/(x*x)+p; } return(p); } 我已经把它翻译成或多或less俗语的Haskell,如下所示: trigamma :: Double -> Double trigamma x = snd $ last $ take 7 $ iterate next (x' – 1, p') where x' = x + 6 p […]

如何在Haskell中部分定义函数签名?

初始点: fn :: [a] -> Int fn = (2 *) . length 假设我们只想限制返回值,那么我们可以这样写: fn list = (2 * length list) :: Int 如何限制只有论据? 简单。 fn list = 2 * length (list :: [Char]) 虽然这是有效的,但最好将顶部的签名收集起来,而不是散布在函数体的周围。 这是最接近我可以来这个: fnSig = undefined :: [Char] -> a fn | False = fnSig | True = (* 2) . length 基于http://okmij.org/ftp/Haskell/partial-signatures.lhs通过http://okmij.org/ftp/Haskell/types.html#partial-sigs […]

在分类术语中,FP中的monad是什么?

每当有人承诺要“解释单子”时,我的兴趣就会激化,只有当所谓的“解释”是一个长长的清单时,才会被挫败所取代。想法“在这一点上”太复杂了“。 现在我要求相反。 我对类别理论有着坚实的把握,我不害怕追图,Yoneda的引理或派生的函子(实际上就是在类别意义上的monad和adjunctions)。 有人能给我一个清晰简洁的定义,说明函数式编程中的monad是什么? 例子越less越好:有时一个清晰的概念就是超过一百个胆小的例子。 虽然我不挑剔,但Haskell会很好地作为示范语言。

我怎么写,“如果typestypesa,那么a也是这个定义的b的一个实例。”

我有一个types类MyClass ,并有一个函数,它会产生一个String 。 我想用这个来暗示Show一个实例,以便我可以传递实现MyClasstypes来show 。 到目前为止,我有, class MyClass a where someFunc :: a -> a myShow :: a -> String instance MyClass a => Show a where show a = myShow a 这给出了错误Constraint is no smaller than the instance head. 我也试过了, class MyClass a where someFunc :: a -> a myShow :: a -> String […]

foldr如何工作?

任何人都可以解释foldr如何工作的? 拿这些例子来说: Prelude> foldr (-) 54 [10, 11] 53 Prelude> foldr (\xy -> (x+y)/2) 54 [12, 4, 10, 6] 12.0 我对这些处决感到困惑。 有什么build议么?