[英]Haskell finding the length of a list from another equation
因此,我有一個方程式返回給定int的列表。 我想將其放入另一個等式中,以查看長度是長度一還是長度二,如果長度為一,則返回True,否則返回False。
con :: Int -> [Int] -> Bool
con getList x
| length x == 1 = True
| otherwise = False
這是我能得到的最接近的,但是會引發錯誤
ERROR - Cannot find "show" function for:
*** Expression : con 3
*** Of type : [Int] -> Bool
該錯誤是由您的con
具有以下類型的事實引起的:
Int -> [Int] -> Bool
這意味着它需要兩個參數(分別為Int
類型和Int
列表)來返回一個布爾值。
現在,表達式con 3
僅將3
應用於con
(提供一個參數),返回一個函數,該函數接受一個Int
列表並返回Bool
。
此函數的類型為[Int] -> Bool
並且這些函數沒有Show
實例(〜無法在屏幕上打印)。
您似乎不需要getST
因此可以使用:
con :: [a] -> Bool
con = (== 1) . length
具有給定列表的函數將返回布爾值,以便:如果列表的長度為1
則返回值為True
,否則為False
。
如果您只想傳遞列表的長度,那么事情會變得更加簡單:
con :: Int -> Bool
con = (== 1)
我同意另一種解釋,即您可能只需要一個直接用於列表的函數,但是如果您打算讓第一個參數con
成為Int -> [Int]
類型的函數 ,然后您要con
檢查該函數的結果是否應用到Int
參數,是否最終長度為1,那么您可以執行以下操作:
con :: (Int -> [Int]) -> Int -> Bool
con f = (== 1) . length . f
現在假設您有一個不同的函數,該函數根據給定的Int
生成Int
的列表。 取決於輸入是偶數還是奇數,輸出的長度可能不同:
getList :: Int -> [Int]
getList x
| odd x = [x, x, x]
| otherwise = [x]
然后我們可以使用con
來檢查輸出的長度是否為1:
con getList 3 -- Will be False
con getList 2 -- Will be True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.