Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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
Haskell 最后一个案子怎么办?_Haskell - Fatal编程技术网

Haskell 最后一个案子怎么办?

Haskell 最后一个案子怎么办?,haskell,Haskell,定义一个辅助函数,该函数给定单词的所有部分,生成一对所有可能的方法来分解单词。这是递归的。concat函数可能会帮助您 我似乎可以用map和concat来解决这个问题。我已经解决了前3个案例,这3个案例容易得多,但无法解决最后一个 mergers :: [String] ->[(String,String)] mergers [] = [] mergers (x:xs) | xs ==[] = [] mergers (x:xs:xy) | xy ==[] =

定义一个辅助函数,该函数给定单词的所有部分,生成一对所有可能的方法来分解单词。这是递归的。
concat
函数可能会帮助您

我似乎可以用map和concat来解决这个问题。我已经解决了前3个案例,这3个案例容易得多,但无法解决最后一个

mergers :: [String] ->[(String,String)]
mergers [] = []
mergers (x:xs)
        | xs ==[] = []
mergers (x:xs:xy)
        | xy ==[] = [(x,xs)]
mergers (x:xs:xy:_) -> 
职能:
合并[“公司”、“新台币”、“ro”、“ls”]
应该生成给定字符串的所有可能组合,如

[("co","ntrols"),("cont","rols"),("contro","ls")] 
合并[“公司”、“新台币”]
应该给

[("co","nt")]   
合并[“co”]
应该返回一个空列表

[]

给定的函数是不够的。特别是因为你需要跟踪已经通过的项目。因此,我们可能应该使用一个helper函数来跟踪迄今为止获得的项目。然后将这些项以串联形式放入第一个元组中

因此,我们可以使用助手函数,如:

mergers :: [[a]] -> [([a], [a])]
mergers [] = []
mergers (x:xs) = helper [x] xs
    where helper left right = …
现在在helper函数中,如果右列表为空,那么我们可以停止生成列表。另一方面,如果右列表不是空的,我们可以发出一个2元组,将元组中的左和右连接起来,如果我们递归,则将
列表的第一项添加到

编辑:由于您的参与,我们可以在此处生成具有以下内容的项目:

mergers :: [[a]] -> [([a], [a])]
mergers [] = []
mergers (x:xs) = helper [x] xs
    where helper _ [] = []
          helper la ra@(r:rs) = (concat la, concat ra) : helper (la ++ [r]) rs
然后产生预期输出:

Prelude> mergers ["co","nt","ro","ls"]
[("co","ntrols"),("cont","rols"),("contro","ls")]
Prelude>  mergers ["co","nt"]
[("co","nt")]
Prelude> mergers ["co"]
[]

我想你在这里一开始不需要那么多箱子。这里基本上有三种情况需要写。为什么
(“”,“controls”)
(“controls”,“”)
不在示例结果列表中?我不知道。这是我的作业,差不多一个小时后就要交了,我刚刚完成了一半。函数式编程不是我的最佳选择,我已经看过很多教程和视频,但仍然无法了解Haskell。提示:看一下
concat
zipWith
inits
tails
。我很感谢您的回答,先生,但我需要对给定的字符串集进行可能的组合,例如合并[“co”,“nt”,“ro”,“ls”]应该给出[(“co”,“controls”),(“cont”,“rols”),(“control”,“ls”)],而您给出的代码生成以下输出[(“co”,“nt”),(“ro”,“ls”)]。合并::[String]->[(String,String)]合并[]=[]合并(x:xs)| xs=[]合并(x:y)=[(过滤器(/=”)(UNWOORDS[x]),过滤器(/=”)++helper[x]y其中helper left-right | tail-right==[]=[]=[].]否则=[(filter(/='')(unwords-left++head-right),filter(/=''))]++helper(left++[head-right])(tail-right)花了我好几个小时,但最后我至少用了字符串类型。我真的很感谢你的帮助和鼓励。可能会发布类似的问题,先生,请注意我。沙鲁克纳瓦兹:您可以在许多方面稍加改进,用concat…`替换
filter(/='')(unwords…),但我认为它确实或多或少是正确的:)。