小编use*_*628的帖子

仍然混淆多个箭头的类型签名是如何工作的

我之前检查了一个帖子,似乎明白了.我知道

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

是咖喱的形式

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

但由于类型签名长于2个箭头,我感到困惑.

myscanr :: (a -> b -> b) -> b -> [a] -> [b]
myscanr op z [] = [z]
myscanr op z (x:xs) = op x (head qs) : qs
  where
    qs = myscanr op z xs
Run Code Online (Sandbox Code Playgroud)

(a -> b -> b)[b]输入和输出?那么中间剩下的是什么?

haskell currying type-signature

3
推荐指数
2
解决办法
122
查看次数

'.++'的固定签名缺少附带绑定

infixr 5 .++
Run Code Online (Sandbox Code Playgroud)

我在ghci中这样做,它给出了错误消息.

<interactive>:26:10: error:
    The fixity signature for ‘.++’ lacks an accompanying binding
Run Code Online (Sandbox Code Playgroud)

我该如何解决?谢谢!

haskell

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

当参数是列表时,惰性求值如何工作?

根据我的理解,延迟评估是在将参数传递给函数之前不对其进行求值,但仅在它们的值实际使用时才进行求值.

但是在一个haskell教程中,我看到了一个例子.

xs = [1,2,3,4,5,6,7,8] 

doubleMe(doubleMe(doubleMe(xs)))
Run Code Online (Sandbox Code Playgroud)

作者说,命令式语言可能会通过列表一次并复制然后返回.然后它将再次通过列表两次并返回结果.

但是在一种懒惰的语言中,它首先会计算出来

doubleMe(doubleMe(doubleMe(1)))
Run Code Online (Sandbox Code Playgroud)

这将回馈一个doubleMe(1),即2.然后4,最后8.

因此,只有当你确实需要它时,它才能通过列表.

这让我感到困惑.懒惰语言为什么不把整个列表作为一个整体,但拆分呢?我的意思是我们可以在使用它之前忽略列表或表达式.但是我们需要在使用它时评估整个事情,不是吗?

haskell lazy-evaluation

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

我不理解列表减法中的类型类约束

这是一个列表减法示例.

(\\) :: Eq a => [a] -> [a] -> [a]
[] \\ _  = []
xs \\ [] = xs
(x:xs) \\ (y:ys)
  | x == y    = xs \\ ys
  | otherwise = (x : (xs \\ [y])) \\ ys
Run Code Online (Sandbox Code Playgroud)

首先,我不知道Eq代表什么.

其次,应该a[a]不是在类型类限制?因为输入必须是列表.

haskell typeclass

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

折叠如何区分x和Haskell中的xs?

sum' :: (Num a) => [a] -> a
sum' xs = foldl (\acc x -> acc + x) 0 xs
Run Code Online (Sandbox Code Playgroud)

没有像这样的模式x:xs.xs是一个清单.在lambda函数中,表达式如何acc + x知道x元素是xs什么?

haskell fold

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

什么(<*>):: f(a - > b) - > fa - > fb在Functor类中完全做了什么

class Functor f => Applicative f where
       pure :: a -> f a
       (<*>) :: f (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

根据我的理解,它需要一个函数f,其中另一个函数(a -> b)作为其参数,返回一个函数f.应用fa然后返回功能f,并应用fb.

这是一个例子:

Prelude> (+) <$> Just 2 <*> Just 3
Just 5
Run Code Online (Sandbox Code Playgroud)

但我不太明白它是如何工作的.

我想(+)应该是f,Just 2而且Just 3应该是ab分别.那是什么(a -> b)

haskell functor applicative

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

为什么fmap f xs = pure f*xs?

class Functor f => Applicative f where
       pure :: a -> f a
       (<*>) :: f (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

"纯粹"扮演两个角色:
*当你有一个0-ary函数时的退化情况.
*fmap f xs = pure f*xs

我不明白为什么

fmap f xs = pure f <*> xs
Run Code Online (Sandbox Code Playgroud)

我的意思是pure应该采取任何a回报f a.但是做了pure f什么?甚至pure (f <*> xs)对我有意义.

haskell applicative

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

iracket中有第一个和休息功能吗?

我刚刚设置了iracket.但有些功能似乎不起作用.

(define (f z) (first (rest z)))
(f '(1 2 3))
first: undefined;
 cannot reference an identifier before its definition
  in module: top-level
  internal name: first
  context...:
Run Code Online (Sandbox Code Playgroud)

我想知道iracket中有第一个和休息功能吗?

racket jupyter-notebook

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

在Windows上找不到模块“ Test.QuickCheck”

我的ghci版本是8.4.3

我试过了

stack install QuickCheck
Run Code Online (Sandbox Code Playgroud)

已安装某些东西。但是当我输入时import Test.QuickCheck,它会Could not find module ‘Test.QuickCheck’再次显示。我该如何解决?

haskell quickcheck

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

谁能详细解释 linalg.lstsq 的返回吗?

虽然提供了linalg.lstsq 文档。我还是觉得不太明白,因为不太详细。

x : {(N,), (N,K)} ndarray

最小二乘解。如果 b 是二维的,则解位于 x 的 K 列中。

残差:{(1,), (K,), (0,)} ndarray

残差总和;b - a*x 中每列的欧几里德 2-范数平方。如果 a 的秩 < N 或 M <= N,则这是一个空数组。如果 b 是一维,则这是一个 (1,) 形状的数组。否则形状为 (K,)。

排名:整数

矩阵 a 的秩。

s : (min(M, N),) ndarray

a 的奇异值。

我尝试观察输出。但我只知道排名是2。对于其余的,我不明白为什么会这样。

x = np.array([0, 1, 2, 3])
y = np.array([-1, 0.2, 0.9, 2.1])
A = np.vstack([x, np.ones(len(x))]).T
print(A)
print('-------------------------')
print(np.linalg.lstsq(A, y, rcond=None))
Run Code Online (Sandbox Code Playgroud)

给予

[[0. 1.]
 [1. 1.]
 [2. 1.]
 [3. 1.]] …
Run Code Online (Sandbox Code Playgroud)

python numpy least-squares

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