小编Mam*_*nda的帖子

如何在 Haskell 中制作开始/结束索引列表?

我正在尝试创建一个 Haskell 函数,它接受两个字符串作为参数,第一个是我们想要在第二个参数中定位的字符串,并返回一个元组列表,其中包含每次出现的开始和结束索引。例如,

indexTuples :: String -> String -> [(Int, Int)]
indexTuples "aa" "foobaarfoobaar" 

Output: [(4,5), (11,12)] 
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经制作了一个查找索引的帮助函数(我试图不使用除 Prelude 方法之外的任何额外方法,而是自己实现)。

我的辅助函数接受一个字符串和一个字符并返回索引,如下所示:

findPos :: (Num a1, Enum a1, Eq a2) => [a2] -> a2 -> [a1]
findPos str c = [index | (x, index) <- zip str [0..], x == c]
Run Code Online (Sandbox Code Playgroud)

(我在这里找到了这个解决方案。)该函数将带有无限数字列表的字符串压缩为元组,然后选择字符等于参数的元组c并返回每个元组的索引。这给了我这个输出:

Ok, one module loaded.
ghci> findPos "blablabla" 'b'
[0,3,6]
Run Code Online (Sandbox Code Playgroud)

但我该如何做到这一点,以便它接受两个字符串呢?像这样:

ghci> findPos "blablabla" "bl" 
[(0,1), (3,4), (6,7)] 
Run Code Online (Sandbox Code Playgroud)

我尝试将cchar 对象更改为字符串对象,但随后在ghci.

string haskell substring list-comprehension list

5
推荐指数
1
解决办法
862
查看次数

我如何在Haskell中使用语法

我正在尝试编写一个接受字符串的函数,然后将字符串作为字符串单词的列表返回(例如单词内置函数),到目前为止,我已经写了

ord :: String -> [String]
ord [] = []
ord xs = let
    ys = groupBy (\x y -> y /= ' ') xs
    in filter (not . null) ys
Run Code Online (Sandbox Code Playgroud)

我认为这将摆脱列表中的空字符串,但我只会得到此输出

输入:

ord  “aa b       c   -    dd” 
Run Code Online (Sandbox Code Playgroud)

输出:

["aa"," b"," "," "," "," "," "," "," c"," "," "," -"," "," "," "," dd"]
Run Code Online (Sandbox Code Playgroud)

当这是我想要的输出时:

[“aa”, ”b”, ”c”, ”-“, ”dd”]
Run Code Online (Sandbox Code Playgroud)

如果我尝试写,我会得到相同的结果

ord :: String -> [String]
ord [] = []
ord xs = filter (not . null) ys …
Run Code Online (Sandbox Code Playgroud)

haskell

1
推荐指数
1
解决办法
82
查看次数

为什么 Haskell 在输入“-&gt;”时给我这个解析错误?

我浏览了 stackoverflow 试图解决这个问题,因为我看到很多标题与我的问题相同的问题。但是我在 Haskell 文件中遇到了这个解析错误,该文件在我上次打开它时工作得很好。我收到此错误消息 在此输入图像描述

haskell parse-error visual-studio

-1
推荐指数
1
解决办法
227
查看次数