如何返回Haskell中包含的给定字母的字母表中的下一个字母

use*_*936 1 haskell char modulo

我正在尝试实现一个按字母顺序返回下一个字母的函数.例如:

> returnNext 'A'
  'B'
Run Code Online (Sandbox Code Playgroud)

但是也:

> returnNext 'Z'
  'A'
Run Code Online (Sandbox Code Playgroud)

因此,该函数应按字母顺序(模26)在字符代码之间循环.

Gui*_*ido 7

想到两种方式

import Data.Char
returnNext c = chr (((1 + ord c - ord 'A') `mod` 26) + ord 'A')
Run Code Online (Sandbox Code Playgroud)

这至少可以说是丑陋的.

和:

returnNext 'Z' = 'A'
returnNext c = chr (ord c + 1)
Run Code Online (Sandbox Code Playgroud)

当没有给出字母表的字母时,两者的行为都不同,但由于你没有说明在这种情况下会发生什么,我会认为它没问题.