我正在用 haskell 撰寫一個簡單的程式,它需要 3 個浮點數作為輸入。前兩個相加,然后檢查它們是否小于第三個浮點數,如果是,它將列印 False 否則它將列印 True
這是我的代碼:
validTriangle :: Float -> Float -> Float -> Bool
validTriangle x y z
| x y < z = False
| x z < y = False
| z y < x = False
| otherwise = True
我輸入的每個數字都會出現相同的錯誤:變數不在范圍內:validTriangle :: t0 -> t1 -> t2 -> t
我試過輸入多個數字,看看它是否能解決錯誤。
uj5u.com熱心網友回復:
一個更簡單的變體是檢查前兩個的總和是否大于第三個,因此:
validTriangle :: (Num a, Ord a) => a -> a -> a -> Bool
validTriangle x y z = x y >= z
或更短:
validTriangle :: (Num a, Ord a) => a -> a -> a -> Bool
validTriangle x y = (x y >=)
或更短:
validTriangle :: (Num a, Ord a) => a -> a -> a -> Bool
validTriangle x = (>=) . (x )
uj5u.com熱心網友回復:
我希望這會有所幫助:
validTriangle :: Float -> Float -> Float -> Bool
validTriangle x y z
| x y < z = False
| x z < y = False
| z y < x = False
| otherwise = True
main = do
putStrLn "Enter 3 floats"
xStr <- getLine
yStr <- getLine
zStr <- getLine
let x = (read xStr :: Float)
let y = (read yStr :: Float)
let z = (read zStr :: Float)
print (validTriangle x y z)
或者
validTriangle x y z = x y > z && x z > y && y z > x
main = do
putStrLn "Enter 3 floats"
xStr <- getLine
yStr <- getLine
zStr <- getLine
let x = (read xStr :: Float)
let y = (read yStr :: Float)
let z = (read zStr :: Float)
print (validTriangle x y z)
第一個答案定義了 validTriangle 函式,它接受三個浮點數作為輸入并回傳一個布林值。該函式檢查前兩個浮點數的總和是否小于第三個浮點數,如果是,則回傳 False。否則,它回傳 True。
第二個答案使用一行代碼定義了 validTriangle 函式。這稱為“無點”定義,相當于第一個定義。
運行時,兩個答案都會產生相同的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528481.html
標籤:哈斯克尔
