List 在Haskell中,如何构造列表并在列表之间进行替换
在Haskell中,我将构造2个字符列表;一个是字母表中的26个字符,由原来的List 在Haskell中,如何构造列表并在列表之间进行替换,list,haskell,List,Haskell,在Haskell中,我将构造2个字符列表;一个是字母表中的26个字符,由原来的(A,B,C,D,.Z)组成,都是大写的。另一个是相同的列表,但是字母的顺序改变了,比如(B,H,A,I…S)。现在我还要在这两个列表之间做一个替换,比如当输入是B然后返回H,C返回a 谁能帮我摆脱这个困境 假设修改后的字母表为: "ORXBMDTCIGJYKAVLSWFNUQEHZP" 代码应该如下所示: import Data.List import Data.Maybe alphabet = ['A'..'Z
(A,B,C,D,.Z)
组成,都是大写的。另一个是相同的列表,但是字母的顺序改变了,比如(B,H,A,I…S)
。现在我还要在这两个列表之间做一个替换,比如当输入是B
然后返回H
,C
返回a
谁能帮我摆脱这个困境 假设修改后的字母表为:
"ORXBMDTCIGJYKAVLSWFNUQEHZP"
代码应该如下所示:
import Data.List
import Data.Maybe
alphabet = ['A'..'Z']
mapping = zip alphabet "ORXBMDTCIGJYKAVLSWFNUQEHZP"
according letter = (snd . fromJust . (find (\t -> f t letter))) mapping
where
f (x, y) letter = x == letter
main = print $ according 'H'
映射将创建字母表和修改版本之间的对应关系。根据
将在原字母的基础上返回修改后的字母。首先使用方括号列出Haskell中的文字
第二,我不知道你作业的措辞,但不受限制,我会使用一个关联列表而不是两个列表。关联列表是一个成对的列表,其形式为[(a,b)]
。关联列表查找
上的键操作,在数据.列表
中定义。查看类型签名,看看您是否了解它的作用
如果你从两个列表开始,你可以把它们拉起来
import Data.List
import Data.Maybe
codec = zip "ABCDEF..." "BHAI..." -- String ~ [Char]
encode = map $ flip lookup codec
plainText = "The secret fox"
encodedText = encode plainText
请注意,这将为您提供一个
[可能是Char]
列表。我把如何提取字符留给你,因为这实际上是一种设计选择。(你是想省略没有出现在抄本中的字符,还是插入一个“!”或其他东西,以便用户知道数据已经丢失?这里有很多选项。注意,Maybe monad是如何迫使你明确处理这种情况的)。实际问题是什么?你可以把它简化为根据=fromJust。翻转查找映射