簡體   English   中英

Haskell從另一個等式中找到列表的長度

[英]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.

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