温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Is there a way to extract strings by index in Haskell?
haskell

其他 - 有没有一种方法可以通过Haskell中的索引提取字符串?

发布于 2020-03-27 11:44:35

我正在尝试实现等效于Python的Haskell:

> "abcdef"[1:3]
'bcd'

实际上,我将首次尝试使用Haskell语言。我不知道如何处理字符串(或文本???)

substr ::文本->整数->整数->文本???? 我尝试使用'take'和'drop',但是我不知道确切的顺序和功能组合。

substr "abcdef" 1 3
“bcd”

查看更多

查看更多

提问者
CPUU
被浏览
95
K. A. Buhr 2019-07-04 04:35

Haskell的“内置”字符串类型称为String,实际上只是的列表Char实际上,如果您尝试Char在GHCi提示符下输入的列表,它将以其String语法打印回给您

> ['a','b','c']
"abc"

对于“真实”代码,String通常是一个糟糕的选择,因为它具有您希望通过字符链接列表获得的所有性能。但是,当您学习Haskell时,足以进行实验了。您可以在Text稍后了解其他选择

因为String是char的列表,take并且drop像处理列表一样对其进行处理:

> take 3 [1,2,3,4,5]
[1,2,3]
> take 3 "abcde"
"abc"

它们作用于字符串的开始,所以如果你想要一个普通的子功能,你需要首先drop你不想字符串的开始部分,然后take你的子想。例如,要"bc"离开"abcde",您要删除"a"

> drop 1 "abcde"
"bcde"

然后采取"bc"

> take 2 (drop 1 "abcde")
"bc"

其余的只是数学运算-通常,第一个数字“ 2”应该是所需子字符串的长度。通常,第二个数字“ 1”应为起始位置(偏移量为零)。

因此,请尝试填写“ ???” 下面带有涉及m和的表达式n,如果您仍然受阻,请发表修改或后续问题:

substr :: Int -> Int -> String -> String
substr m n str = take ??? (drop ??? str)