Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell二维点距离和长度_Haskell_Functional Programming - Fatal编程技术网

Haskell二维点距离和长度

Haskell二维点距离和长度,haskell,functional-programming,Haskell,Functional Programming,有人能告诉我为什么在Streckenzug上出现解析错误吗? Haskell提出的错误并没有真正的帮助 我们有数据Punkt,它应该是二维坐标系中的一个点 数据Streckenzug是一个点列表 稍后,函数distanz和laenge length将给出相邻点之间的和 GHC产生的错误肯定非常有用。让我们一个接一个地看一遍 首先,我没有得到任何解析错误,只要我在开始时删除虚假缩进。相反,我得到了以下错误: 看看相关的行,我看到你写了Punkt。。没有理由。这毫无意义。这应该是朋克。这是修正,有更

有人能告诉我为什么在Streckenzug上出现解析错误吗? Haskell提出的错误并没有真正的帮助

我们有数据Punkt,它应该是二维坐标系中的一个点 数据Streckenzug是一个点列表
稍后,函数distanz和laenge length将给出相邻点之间的和

GHC产生的错误肯定非常有用。让我们一个接一个地看一遍

首先,我没有得到任何解析错误,只要我在开始时删除虚假缩进。相反,我得到了以下错误:

看看相关的行,我看到你写了Punkt。。没有理由。这毫无意义。这应该是朋克。这是修正,有更好的压痕

main.hs:11:17: error:
    Not in scope: type constructor or class ‘Punkt..’
    No module named ‘Punkt’ is imported.
当我修复此问题时,错误会发生变化。让我们转到下一个:

看看相关的行,我发现你在Punkt上没有匹配,但实际上在Float上,Float。这是一个微不足道的问题。以下是具有更好压痕的解决方案:

main.hs:15:9: error:
    • Couldn't match expected type ‘Punkt’
                  with actual type ‘(Float, Float)’
请理解,Punkt不仅仅是一个浮点数元组;它由编译器单独处理

不幸的是,我会尝试更正你的函数laenge,但我根本无法理解你所说的是什么意思——类型完全被破坏了,你的意图也不清楚。我建议从上述错误中吸取教训,然后再试一次

但是,总而言之,以下文件是有效的:

distanz :: Punkt -> Punkt -> Float
distanz pkt1 pkt2 = sqrt (x' * x' + y' * y') -- Correction here
 where
   x'= x pkt1 - x pkt2
   y'= y pkt1 - y pkt2 -- Note the adjustment here.

函数p1和p2是完全无用的,所以我删除了它们;它们不仅相同,而且都是p1类型,p2::a,b->a,b,换句话说,p1=p2=id。

您有许多格式错误,在第10-12行,您有一个名为Streckenzug的成员的数据Streckenzug记录成员名不能以大写字母开头,我建议将代码复制到一个文件中,然后在同一个目录中启动ghci,然后加载FILENAME.hs。GHCI将解析并尝试加载您的代码。您将看到许多类型不匹配和调用错误。laenge应该计算多边形链的总长度,我想…谢谢您的帮助。如果你有任何可靠的消息来源,除了learnyouahaskell,如果你让我知道,我将不胜感激。通过你的帮助,这些错误是非常简单的。andrey是绝对正确的。在尝试为示例distanz pkt1 1.0 1.0 pkt2 2.0 2.0获取解决方案后,我得到了错误消息变量not in scope pkt1::Punkt,变量not in scope:pkt2。有人能告诉我原因吗?@disccco如果你还有问题,问另一个问题;不要发表评论。
main.hs:15:9: error:
    • Couldn't match expected type ‘Punkt’
                  with actual type ‘(Float, Float)’
distanz :: Punkt -> Punkt -> Float
distanz pkt1 pkt2 = sqrt (x' * x' + y' * y') -- Correction here
 where
   x'= x pkt1 - x pkt2
   y'= y pkt1 - y pkt2 -- Note the adjustment here.
data Punkt = Punkt 
  { x :: Float
  , y :: Float 
  }

data Streckenzug = Streckenzug {
    streckenzug :: [Punkt]
}  

distanz :: Punkt -> Punkt -> Float
distanz pkt1 pkt2 = sqrt (x' * x' + y' * y')
  where
    x'= x pkt1 - x pkt2
    y'= y pkt1 - y pkt2