簡體   English   中英

無法將預期類型與實際類型Haskell匹配

[英]Can't match expected type with actual type, Haskell

我遇到了這個錯誤無法將預期的Double -> (Double, Double, Double)' with actual type (Double,Double,Double)匹配,但我不知道如何解決,我一直在努力幾天來有不同的錯誤,現在我想我知道了,只需要修復即可,這是我的代碼:

terna :: Double -> Double -> (Double, Double, Double) terna (x, y) = (x, y, (sqrt ((x*x)+ (y*y))))

很簡單,但是我剛開始使用Haskell,由於對函數式編程還不熟悉,所以我發現了很多難題。 謝謝。

刪除括號和逗號即可:

terna x y = (x, y, (sqrt ((x*x)+ (y*y))))

Haskell中的函數應用程序是使用空格而不是大多數其他語言中的括號和逗號來完成的。 特別是,編譯器將(x, y)解釋為一對(具有2個值的元組),因此會看到類型錯誤。

看一下函數的頭部:

terna (x, y) = ...

這是2元組的模式,而不是具有兩個參數的函數的模式(請注意,嚴格來說,函數具有一個參數,因此在此我們構造具有一個參數的函數,然后生成一個函數,然后該函數接受另一個參數,但是Haskell為此提供了更方便的語法)。

結果,您的函數簽名為:

terna :: (Double, Double) -> (Double, Double, Double)
terna (x, y) = (x, y, sqrt (x*x + y*y))

但是通常在Haskell中,函數是“ curried ”的,因此將其編寫為:

terna :: Double -> Double -> (Double, Double, Double)
terna x y = (x, y, sqrt (x*x + y*y))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM