Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 列表的最大前缀列表_List_Haskell - Fatal编程技术网

List 列表的最大前缀列表

List 列表的最大前缀列表,list,haskell,List,Haskell,我需要定义一个函数largestPrefix,它遍历字符串列表 并返回元组中列表的两个相邻字符串的最长前缀。元组的第一个元素是前缀的长度 a、 e.:最大前缀[“a”、“abca”、“bca”、“bcadabca”、“ca”、“cdabca”]=>(3,“bca”) 我已经为两个Sting构建了一个函数,但不知道如何在列表列表中使用它。为了确保相邻性,我考虑使用以下方法: prefix:: String -> String -> String prefix (x:xs) (y:y

我需要定义一个函数
largestPrefix
,它遍历字符串列表 并返回元组中列表的两个相邻字符串的最长前缀。元组的第一个元素是前缀的长度

a、 e.:
最大前缀[“a”、“abca”、“bca”、“bcadabca”、“ca”、“cdabca”]=>(3,“bca”)

我已经为两个Sting构建了一个函数,但不知道如何在列表列表中使用它。为了确保相邻性,我考虑使用以下方法:

 prefix:: String -> String -> String
 prefix (x:xs) (y:ys)   | x:xs == "" = ""
                        | y:ys == "" = ""
                        | x == y = x:prefix xs ys
                        | otherwise = ""

因此,我对您的函数进行了一些清理,并添加了以下想法:

如果您编写的函数将运算符应用于列表的每两个连续对(
pairwise
),则您应该能够完成您的工作:

pairwise :: (a -> a -> b) -> [a] -> [b]
pairwise f (x:xs@(y:_)) = f x y : pairwise f xs
pairwise _ _            = []

prefix:: String -> String -> String
prefix (x:xs) (y:ys) 
  | x == y = x:prefix xs ys
  | otherwise = ""
prefix _ _ = ""
以下是一个例子:

λ> pairwise prefix ["a","abca","bca","bcadabca","ca","cdabca"]
["a","","bca","","c"]

也许有人不开心,因为我没有解决所有问题,所以你来吧:

largestPrefix :: [String] -> (Int, String)
largestPrefix xs = maximumBy (compare `on` length . snd) $ zip [1..] (pairwise prefix xs)
您必须导入此文件才能工作的位置:

import Data.List (maximumBy)
import Data.Function (on)
例子
我没有投你一票!仍然要试着理解你的方法。这种方法只是使用操作符
f
通过执行
[f a b,f b c,f c d,…]
,将
[a b,f b c,f c d…]列成一个新的列表,所以它基本上就是你开始做的。。。还有随机否决票。。。是的,星期天
λ> largestPrefix ["a","abca","bca","bcadabca","ca","cdabca"]
(3,"bca")