小编Bra*_*rad的帖子

为什么Haskell给出"模糊类型变量"错误?

过去的纸质问题问我; 定义一个函数p :: [a] - > [a],它交换列表中的每两个项目.您的函数应该将第一个项与第二个项交换,第三个与第四个项交换,依此类推.通过递归来定义列表理解中的另一个.

这就是我提出的:

import Test.QuickCheck
p :: [a] -> [a]
p [] = []
p xs = concat [ [y,x] | ((x,y),i) <- zip (zip xs (tail xs)) [1..], odd i]
q :: [a] -> [a]
q [] = []
q (x:y:zs) | even (length zs) = [y,x] ++ q zs
           | otherwise = error "The list provided is not of even length"
prop_2 xs = even (length xs) ==> p xs == q xs …
Run Code Online (Sandbox Code Playgroud)

recursion haskell function list quickcheck

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

什么是Haskell不高兴?它抱怨我的类型签名

我的Haskell还有另外一个问题.我从一个问题中得到了以下数据构造函数,

type Point = (Int, Int)

data Points = Lines Int Int
            | Columns Int Int
            | Union Points Points
            | Intersection Points Points
Run Code Online (Sandbox Code Playgroud)

它是关于网格起点(0,0)和(x,y)的点,x是距离原点的水平距离,y是距离原点的垂直距离.

我试图从中定义一个函数"Lines",给定xy行将评估网格上垂直距离x~y的所有点.例如

> Lines 2 4 
(0,2)(1,2)(2,2)(3,2)....
(0,3)(1,3)(2,3)(3,3)....
(0,4)(1,4)(2,4)(3,4)....
Run Code Online (Sandbox Code Playgroud)

等等.那我做了什么,是,

Lines :: Int -> Int -> Points
Lines lo hi = [ (_, y) | lo <= y && y <= hi ]
Run Code Online (Sandbox Code Playgroud)

但哈斯克尔抱怨说;

无效的类型签名Lines :: Int - > Int - > Points.
应该是以下形式::

这是什么意思?"点数"已在上面定义......当然"Int""点数"被视为"类型"?我没有看到问题,为什么Haskell感到困惑?

constructor haskell types function

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

标签 统计

function ×2

haskell ×2

constructor ×1

list ×1

quickcheck ×1

recursion ×1

types ×1