List 在Haskell中,如何构造列表并在列表之间进行替换

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

在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']
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。翻转查找映射