小编use*_*947的帖子

实施(^)

我正在阅读标准haskell库的执行代码(^):

(^) :: (Num a, Integral b) => a -> b -> a
x0 ^ y0 | y0 < 0    = errorWithoutStackTrace "Negative exponent"
        | y0 == 0   = 1
        | otherwise = f x0 y0
    where -- f : x0 ^ y0 = x ^ y
          f x y | even y    = f (x * x) (y `quot` 2)
                | y == 1    = x
                | otherwise = g (x * x) ((y - 1) `quot` 2) x …
Run Code Online (Sandbox Code Playgroud)

performance haskell

8
推荐指数
2
解决办法
202
查看次数

仅在函数中设置一次静态变量

所以我想知道是否有可能只在函数范围内设置一次静态变量.例如,考虑这个功能:

void projectPointIntoPlane(const Affine3f& plane2xy, Vector3f& p)
{ 
  static Matrix3f P;
  P << Vector3f::UnitX(), Vector3f::UnitY(), Vector3f::Zero();

  p = plane2xy.inverse() * P * plane2xy * p;
}
Run Code Online (Sandbox Code Playgroud)

我想只设置一次P而不是每个函数调用,我怎么能得到这个?

c++ eigen

5
推荐指数
3
解决办法
102
查看次数

用无点样式写f?

说我有功能

g :: a -> b, h :: a -> c 
Run Code Online (Sandbox Code Playgroud)

f :: b -> c -> d. 
Run Code Online (Sandbox Code Playgroud)

是否可以编写该功能

 f' :: a -> a -> d 
Run Code Online (Sandbox Code Playgroud)

由...给出

f' x y = f (g x) (h y) 
Run Code Online (Sandbox Code Playgroud)

点自由风格?

可以写这个功能

f' a -> d, f' x = f (g x) (h x) 
Run Code Online (Sandbox Code Playgroud)

通过设置点自由风格

f' = (f <$> g) <*> h  
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何做更一般的情况.

haskell pointfree

4
推荐指数
2
解决办法
347
查看次数

如何指定从中调用函数的实例

假设我有一个类型类,对于这个类型类的每个实例我都有一个函数

f :: [Bool] -> Maybe (a, [a])
Run Code Online (Sandbox Code Playgroud)

我怎么称呼f?更准确地说,如果b是此类型类中的另一种类型,我如何指定我的意思是来自a的实例的f而不是来自b的实例?

haskell

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

Haskell中模式匹配的错误

我正在编写一个函数,将bool列表的列表无意义地映射到bool列表中.这是我的代码:

y=[False| y<-[0..]]    
encode :: [[Bool]] -> [Bool]
encode x:xs =   (zip1 x y):True:True:(encode xs)
encode []=[]
Run Code Online (Sandbox Code Playgroud)

zip1函数只需要两个列表并将它们交替写入新列表.

我收到错误消息

模式中的解析错误:编码

为什么我收到此错误消息?

haskell pattern-matching parse-error

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

检查数字是否在树中的函数

我试着写一个小程序,可以检查给定的数字是否出现在树中.这是我的代码:

import Prelude

data Tree = Node Int [Tree]

Tree happytree = Node 5 [Node 1 [Node 6 []],Node 8 [],Node 2 [Node 1 [],Node 4 []]]

contains1 :: [Tree] -> Int -> Bool
contains1 [] x = False
contains1 (a:as) x = contains a x || contains1 as x

contains :: Tree -> Int -> Bool
contains (Node x []) y = x==y
contains (Node x as) y = x==y || contains1 as y
Run Code Online (Sandbox Code Playgroud)

我收到错误消息

Not in scope: data …
Run Code Online (Sandbox Code Playgroud)

haskell

-2
推荐指数
2
解决办法
131
查看次数