修改可能只是將char ascii值加3。 我已經閱讀過幾本書,並且找不到現成的解決方案。 (返回的字符列表可以是不同的列表變量。)如何編寫一個函數來修改一個Char列表並在Haskell中返回?
回答
import Data.Char
shiftAscii :: String -> String
shiftAscii xs = map (chr.(+3).ord) xs
會做什麼你問。
它可以工作,因爲map
使用提供的函數編輯字符串中的每個字符。
ord
由3
chr
轉換回一Char
的Char
其Int
值
(+3)
移位的(ASCII)轉換,
所以chr.(+3).ord
是這三個具有功能組合物串成.
爲了更加靈活,你可以寫
shiftAsciiBy :: Int -> String -> String
shiftAsciiBy n = map (chr.(+ n).ord)
通知,轉移的ASCII不尊重字母的界限,所以如果你需要這個做rot13
編碼或類似的簡單轉變,你會用一個手挽移位功能,只有編輯更好字母
addAscii :: Int -> Char -> Char
addAscii n c | isUpper c = chr $ ((ord c - ord 'A' + n) `mod` 26) + ord 'A'
| isLower c = chr $ ((ord c - ord 'a' + n) `mod` 26) + ord 'a'
| otherwise = c
例如
['A'..'z']
"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz"
,我們只是轉移字母表ASCII:
map (addAscii 5) ['A'..'z']
"FGHIJKLMNOPQRSTUVWXYZABCDE[\\]^_`fghijklmnopqrstuvwxyzabcde"
剛剛看到一行地圖(+3)a - 這也會增加Int值的技巧,我想, –
在lineAsciiBy n = map(chr。(+ n).ord)--n出現作爲一個Int和一個字符串? ...這是正常的嗎? –
@MikSeljamaa地圖(+3)只適用於數字。 Haskell不會讓你使用Char作爲Int,所以我轉換(ord),添加((+3)),然後轉換回(chr)。實際上n不會顯示爲Int和String,因爲在該行中沒有String! map(chr。(+ n).ord)是一個函數String - > String。這是好的,因爲在Haskell函數中只是數據,所以如果你錯過了最後一個參數,那就需要另一個參數,即一個函數。它被稱爲部分評估:起初很奇怪,但非常有用。它可能已經更清晰地把shiftAsciiBy n xs = map(chr。(+ n).ord)xs – AndrewC
- 1. 如何寫一個函數返回const char *,這是一個修改的const char *參數?
- 2. 如何編寫一個返回另一個函數的函數?
- 3. 編寫一個傳遞數據幀的R函數並返回一個列表
- 4. Haskell函數,它接受一個列表並返回元組
- 5. 如何從plpgsql函數返回一個整數並回滾每個修改?
- 6. 如何在函數中編寫一個Traversable實例,在Haskell中?
- 7. 編寫一個函數,返回每行元音數目列表
- 8. 創建一個Haskell函數打印並返回一個值
- 9. 如何編寫一個返回嵌套表中的鍵列表的函數?
- 10. Haskell - 如何創建一個返回列表中第五個元素的函數
- 11. 如何編寫一個從嵌套列表中只返回奇數的函數?
- 12. 編寫返回另一個函數
- 13. 編寫一個返回函數=> T
- 14. Haskell的函數,它接受對和清單列表,並返回一個列表
- 15. Haskell:寫一個函數來複制``ellem'
- 16. 如何編寫一個返回一組行的postgres函數?
- 17. 如何在C prog中返回一個char函數?
- 18. 如何寫一個函數返回一個返回類型的子函數
- 19. 函數返回一個char(初級)
- 20. Python函數返回一個新的列表,而無需修改輸入列表
- 21. 編寫一個函數,使得另一個函數返回一個列表,而不是功能
- 22. Python - 函數有一個列表作爲參數。如何返回另一個列表而不更改第一個?
- 23. 如何編寫一個返回相鄰對的列表的Clojure函數?
- 24. 編寫一個函數,它將一個列表作爲參數,並返回一個列表,該列表重複列表中的元素
- 25. 的Python - 寫的函數來計算,並返回一個圓
- 26. 如何返回一個表freom函數?
- 27. 如何用haskell編寫一個使用列表理解的函數?
- 28. 如何編寫一個MIT Scheme宏來返回一個lambda表單?
- 29. 如何寫一個函數指針返回一個函數指針函數?
- 30. 函數返回一個表
關於書籍,「學習你一個偉大的好事Haskell!」 (http://learnyouahaskell.com/modules#data-char)是Haskell的一個很好的介紹,並且有一個凱撒代碼的實現(類似於你想要做的)。 – Jerome
簡答:你不能,Haskell列表是不可變的。 – Landei
@蘭代我認爲你誤解了這個問題的意圖。在某些monads中有可變陣列,但是OP沒有提到就地。 – AndrewC