在Haskell學習遞歸函數的新手,想知道如何創建遞歸函數toUpper和toLower,它們接收一個Chars列表並返回相同的Chars列表,但大小寫?我嘗試使用chr和ord函數來解決它,但ord的簽名是Char - > Int,而不是[Char] - > [Int],因此它與toUpper和toLower不匹配。有任何想法嗎?如何在Haskell中更改「ord」函數的簽名?
0
A
回答
-3
沒關係,現在就明白了。如果有人需要它:
toUpper::[Char] -> [Char]
toUpper [] = []
toUpper (x:xs) = chr(ord(x)-32):toUpper(xs)
toLower::[Char] -> [Char]
toLower [] = []
toLower (x:xs) = chr(ord(x)+32):toLower(xs)
3
這正是map
功能的作用:它需要a -> b
類型(任何類型a
和b
)函數返回一個新的功能[a] -> [b]
。
> :t ord
ord :: Char -> Int
> :t map ord
map ord :: [Char] -> [Int]
這可以讓你的整個字符串轉換爲它的Unicode代碼點:
> map ord "foo"
[102,111,111]
或回
> map chr [102,111,111]
"foo"
爲了實現你的方法,你那麼就需要定義一個適當的功能toLower
和toUpper
使用
> map chr (map toLower (map ord "MyStRiNg"))
mystring
> map chr (map toUpper (map ord "MyStRiNg"))
MYSTRING
(請注意,模塊Data.Char
已經提供toLower, toUpper :: Char -> Char
;你可以用它們來檢查你自己的實現。)
相關問題
- 1. Haskell中的函數與Data.Char中的ord函數相反嗎?
- 2. 如何在Haskell中獲得數據構造函數的簽名
- 3. 更改函數簽名
- 4. 更改函數簽名
- 5. SWIG更改函數簽名
- 6. 如何在Haskell中獲取範圍函數的類型簽名?
- 7. 如何在Haskell中爲代數數據類型實現「Ord」?
- 8. 定義haskell函數,可能在簽名
- 9. 更改函數簽名/身在RED
- 10. 如何讀取Haskell中的函數類型簽名?
- 11. 如何更改Doxygen中的函數簽名?
- 12. 默認參數函數簽名更改
- 13. Haskell類Num不包含在Ord中?
- 14. 在Haskell中將函數更改爲Maybe函數
- 15. 在基類的__init__中調用函數的更改簽名
- 16. Ord在Delphi中的函數實現
- 17. 在Haskell中查找函數的類型簽名
- 18. 爲什麼我的頂級函數需要在Haskell中籤名?
- 19. 如何更改簽名ID?
- 20. Haskell實例Ord困難
- 21. Vim的:如何更改/ select函數名
- 22. 函數名VS在Haskell
- 23. ord在循環中執行函數
- 24. 在庫中更改了函數名稱
- 25. 在python中將字符串更改爲數字值。 [ord()]
- 26. 如何在Linux下更改haskell進程的名稱
- 27. 簽名更改
- 28. 如何將下列haskell代碼更改爲高階函數?
- 29. 如何更改文件的簽名(又名「幻數」)?
- 30. 如何在Haskell中知道builtins函數?
根據你的描述我會建議'映射toUpper'或者'map toLower' - 但我不確定我的問題是否正確 – Carsten
*你是怎麼嘗試和使用這些?如果使用得當,它們聽起來像是你所需要的。 –
'map toUpper「hello world」'給你''HELLO WORLD「' - 這是你在說什麼嗎? – Carsten