我正在寫一個函數來確定一個數是否是迴文。如何將字符串解構爲第一個,中間和最後一個?
我想在第一種情況下做的是將字符串解構爲第一個字符,中間的所有字符和最後一個字符。我所做的是檢查第一個字符是否與最後一個字符相等,如果是,則繼續檢查中間字符。
我有什麼是在下面,但編譯時會產生類型錯誤。
numberIsPalindrome :: Int -> Bool
numberIsPalindrome n =
case nString of
(x:xs:y) -> (x == y) && numberIsPalindrome xs
(x:y) -> x == y
x -> True
where nString = show n
列表鏈接列表(不陣列) ,因此訪問最後一個操作是昂貴的,不能通過模式匹配來執行。可以使用'last'庫函數,但是它會很慢。如下所示,反轉列表並檢查相等性會更有效率,也更簡單。 – chi