我試圖在 ghci 上運行這個程式,它會按照姓氏的升序對名稱進行重新排序。但是,當我運行它時,我收到此錯誤“錯誤:輸入'列印'時決議錯誤”。
如果您能幫助我解決這個問題,我將不勝感激。謝謝![在此處輸入圖片說明][1]
import Data.List
main :: IO ()
names = [("Tatsunori", "Ono"), ("Kishore", "Palanisamy"), ("Calder", "Hosgood"), ("Yiling", "Zhuang")]
main = do
let compareLastNames name1 name2 = if lastName1 > lastName2
then GT
else if lastName1 < lastName2
then LT
else EQ
where lastName1 = snd name1
lastName2 = snd name2
print (sortBy compareLastNames names)
uj5u.com熱心網友回復:
原因是wherethat 在 的同一級別縮進let,并且不比compareLastNames函式縮進更多。
您可以使用以下命令縮進:
main = do
let compareLastNames name1 name2 = if lastName1 > lastName2 then GT else if lastName1 < lastName2 then LT else EQ
where lastName1 = snd name1
lastName2 = snd name2
print (sortBy compareLastNames names)
但是你讓這太復雜了,你可以使用on :: (b -> b -> c) -> (a -> b) -> a -> a -> c:
import Data.Function(on)
main = print (sortBy (compare `on` snd) names)
或使用sortOn :: Ord b => (a -> b) -> [a] -> [a]:
import Data.List(sortOn)
main = print (sortOn snd names)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/489003.html
上一篇:如何使用partitioningBy,然后使用JavaStreams分別對結果串列進行排序
下一篇:用于插入和排序的最有效資料結構
