小编Nic*_*kor的帖子

代数类型-Haskell

我正在处理Haskell中的代数类型,并在工作表中进行一些练习。我进行了以下练习:

  1. 定义代数类型Point,以表示二维空间中的点(的坐标)。

我的练习代码:

data Point = Point Float Float
  deriving (Show)
Run Code Online (Sandbox Code Playgroud)
  1. 使用Point定义Shape数据类型的修改版本PositionedShape,其中包括形状的中心以及尺寸。

先前定义的形状数据:

data Shape = Circle Float |
             Rectangle Float Float
             deriving (Show)
Run Code Online (Sandbox Code Playgroud)

我的练习代码:

data PositionedShape = PositionedShape Shape Point
  deriving (Show)
Run Code Online (Sandbox Code Playgroud)

现在我的问题出现在这个问题中:

定义一个函数:

haskell move :: PositionedShape -> Float -> Float -> PositionedShape

将形状移动给定的x和y距离

我对此的实现如下:

move :: PositionedShape -> Float -> Float -> PositionedShape
move (Shape (Point x y)) newX newY = Shape (Point newX newY)
Run Code Online (Sandbox Code Playgroud)

这将返回此错误:

Week8.hs:103:7:错误:不在范围内:数据构造函数'Shape'失败,模块已加载:无。

有人可以向我解释为什么这个错误,我该如何解决?我对代数类型有些困惑,我尝试了很多事情,但似乎无法解决。

haskell algebraic-data-types

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

列表递归 - Haskell

基本上我有这个练习:回忆一下上周的StudentMark类型同义词.写一个递归函数:

listMarks :: String -> [StudentMark] -> [Int]
Run Code Online (Sandbox Code Playgroud)

它给出了特定学生的分数列表; 例如:

listMarks "Joe" [("Joe", 45), ("Sam", 70), ("Joe", 52)] = [45,52]
Run Code Online (Sandbox Code Playgroud)

这就是我编写函数的方式:

type StudentMark = (String, Int)
listMarks :: String -> [StudentMark] -> [Int]
listMarks _ [] = []
listMarks std (x:xs)
  | std == fst x = snd x : listMarks (fst x) xs
  | otherwise = listMarks (fst x) xs
Run Code Online (Sandbox Code Playgroud)

如果列表中的字符串与"std"字符串不同,则不起作用.我想了解为什么以及如何才能完成这项工作?谢谢!

recursion haskell tuples list

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

对列表成对列表Haskell

基本上我有这个练习:使用列表推导,写一个多态函数:

split :: [(a, b)] -> ([a], [b])
Run Code Online (Sandbox Code Playgroud)

它将一对(任何类型的)列表转换为一对列表.例如,

split [(1, 'a'), (2, 'b'), (3, 'c')] = ([1, 2, 3], "abc")
Run Code Online (Sandbox Code Playgroud)

这是我编写函数的方式,但它不起作用:

split :: [(a, b)] -> ([a], [b])
split listOfPairs = (([a | a <- listOfPairs]), ([b | b <- listOfPairs]))
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么我的解决方案不起作用?谢谢!

polymorphism haskell tuples list-comprehension

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