Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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 哈斯凯尔:我们有去mapCons的捷径吗_Haskell - Fatal编程技术网

Haskell 哈斯凯尔:我们有去mapCons的捷径吗

Haskell 哈斯凯尔:我们有去mapCons的捷径吗,haskell,Haskell,我的意思是写这样一个函数: mapCons x [] = [[x]] mapCons x ys = map (x:) ys 以便: *> mapCons 'a' [] ["a"] *> mapCons 'a' ["cat", "dog"] ["acat","adog"] 我们是否为mapCons提供了快捷或预定义的功能? 我试过Hoogle a->[[a]]->[[a]],但没有找到理想的 非常感谢。没有,我注意到map x:是8个字符,而键入mapCons x是9个字符。对于此

我的意思是写这样一个函数:

mapCons x [] = [[x]]
mapCons x ys = map (x:) ys
以便:

*> mapCons 'a' []
["a"]
*> mapCons 'a' ["cat", "dog"]
["acat","adog"]
我们是否为mapCons提供了快捷或预定义的功能? 我试过Hoogle a->[[a]]->[[a]],但没有找到理想的

非常感谢。

没有,我注意到map x:是8个字符,而键入mapCons x是9个字符。对于此类特定操作,即非通用操作,查找或记住这些操作的成本和难度远远超过拥有它们的好处。想象一下,如果prelude或base库定义了100000个函数,那该多好啊

没有,我注意到map x:是8个字符长,而键入mapCons x是9个字符。对于此类特定操作,即非通用操作,查找或记住这些操作的成本和难度远远超过拥有它们的好处。想象一下,如果prelude或base库定义了100000个函数,那该多好啊

如果导入Control.Applicative,则可以执行以下操作:

GOA Control.Applicative> (:) 'a' <$> ["cat", "dog"]
["acat","adog"]
GOA Control.Applicative> (:) <$> [0] <*> [[1,2,3], [7,8,9]]
[[0,1,2,3],[0,7,8,9]]
GOA Control.Applicative> liftA2 (:) "a" ["cat", "dog"]
["acat","adog"]
我知道这不符合您发布的a->[[a]]->[[a]]签名,但您的问题对于您尝试执行的操作有点不清楚,因此我认为这仍然可能有帮助。

如果您导入控制。应用程序您可以执行以下操作:

GOA Control.Applicative> (:) 'a' <$> ["cat", "dog"]
["acat","adog"]
GOA Control.Applicative> (:) <$> [0] <*> [[1,2,3], [7,8,9]]
[[0,1,2,3],[0,7,8,9]]
GOA Control.Applicative> liftA2 (:) "a" ["cat", "dog"]
["acat","adog"]

我知道这不能满足您发布的a->[[a]]->[[a]]签名,但您的问题有点不清楚您想做什么,因此我认为这仍然可能有帮助。

您可以轻松地用简单的列表理解取代mapCons:

mapCons x ys = [x:y | y<-ys]

与其他解决方案一样,如果输入空Y,则返回[],而不是定义为[[x].

您可以轻松地用简单的列表替换mapCons:

mapCons x ys = [x:y | y<-ys]

与其他解决方案一样,如果输入空y,则返回[],而不是您定义的[[x].

如果我们忽略空列表的情况,正如fuzzxl所注意到的,这没有多大意义,您可能会注意到:

mapCons = map . (:)
当大声读出来时,会产生类似于mapCons的同义反复,它等于由cons组成的map


对我来说似乎没有什么用处。

如果我们忽略空列表的情况,正如fuzzxl所注意到的,它没有多大意义,您可能会注意到:

mapCons = map . (:)
当大声读出来时,会产生类似于mapCons的同义反复,它等于由cons组成的map


对我来说似乎没有什么用处。

请注意,OP的mapCons在给出[]时给出了不同的结果-这加强了您关于非常专业的函数不在标准库中的观点。@Thomas+1,一些有趣的观察:请注意,OP的mapCons在给出[]时给出了不同的结果-这强化了你关于非常专业的函数不在标准库中的观点。@Thomas+1,一些有趣的观察:我很好奇:你在这方面的使用案例是什么?请注意:空列表[]与空列表[]不同。你的第一个案例毫无意义。关于[]案例有很多问题。它通常发生在深度优先搜索中。例如,从列表中选择元素,使其总和满足某些条件。当您找到x作为候选时,您接下来递归地在其余部分中进行搜索,结果是xss,您需要cons x和xss中的每个xs,但是,如果递归搜索失败,您将得到[],而不是[]。这并不意味着整个搜索失败,[[x]]将是答案。@Larry如果您指的是相当于\n->filter==n的函数。总和子序列,那么我看不出[[x]]有多有用。我想象的函数是search 0l=[]];搜索n[]=[];search n h:t=search n t++map h:search n-h t,对[[x]]没有任何用处。我很好奇:您对此的使用案例是什么?请注意:空列表[]与空列表[]的列表不同。你的第一个案例毫无意义。关于[]案例有很多问题。它通常发生在深度优先搜索中。例如,从列表中选择元素,使其总和满足某些条件。当您找到x作为候选时,您接下来递归地在其余部分中进行搜索,结果是xss,您需要cons x和xss中的每个xs,但是,如果递归搜索失败,您将得到[],而不是[]。这并不意味着整个搜索失败,[[x]]将是答案。@Larry如果您指的是相当于\n->filter==n的函数。总和子序列,那么我看不出[[x]]有多有用。我想象的函数是search 0l=[]];搜索n[]=[];search n h:t=search n t++map h:search n-h t,不使用[[x]]。它应该只是:'a'[cat,dog],对吗?为什么要用一个额外的清单把事情复杂化呢?应该是的。有些事情最好不要在早上做;-谢谢你指出!嗨,我想这只是地图上的糖,这不符合[]的情况。一个选项是使用[[]]而不是[]来表示搜索失败。请参阅我之前关于DFS问题的评论。我发布这个问题只是为了好奇是否存在“一条线”的解决方案。它应该是“a”[猫,狗],对吗?为什么要用一个额外的清单把事情复杂化呢?应该是的。有些事情最好不要做
在早上的时候;-谢谢你指出!嗨,我想这只是地图上的糖,这不符合[]的情况。一个选项是使用[[]]而不是[]来表示搜索失败。请参阅我之前关于DFS问题的评论。我发布这个问题只是为了好奇是否存在一些“一行”解决方案。嗨,在[]案例旁边,这个解决方案失去了处理无限列表的能力。@拉里,不,它处理无限列表的能力足够好。对不起,我的错:拿5$mapCons“a”循环[cat,dog]==>[acat,adog,acat,adog,acat]嗨,在[]案例旁边,此解决方案失去了处理无限列表ys的能力。@Larry,不,它处理无限列表的能力足够好。对不起,我的错:取5$mapCons'a'cycle[cat,dog]==>[acat,adog,acat,adog,acat]另一个用例示例是查找用户在Trie-like字典中键入的所有前缀为的候选词。当查找程序到达最后一个字母x时,它就是叶节点。我们只有[[x]]作为单身者列表。如果它是一个分支节点,我们递归地查找子节点,因此将有多个候选词。但是,如果x是一个拼写错误,字典中就没有具有给定前缀的单词。Return[[]表示有一个候选者,且为空[]。而[]表示根本没有候选项。嗯,当用户输入了一个拼写错误而根本没有候选项时,为什么要返回一个空的候选项呢?例如:案例1,用户输入:a,结果:[a,an,和,另一个];案例2,用户输入:an,结果:[an,and,other];案例3,用户输入:anz,结果:[]案例3的另一个选项是[an]以指示打字错误。另一个用例示例是查找用户在类似Trie的字典中键入的所有具有给定前缀的候选词。当查找程序到达最后一个字母x时,它就是叶节点。我们只有[[x]]作为单身者列表。如果它是一个分支节点,我们递归地查找子节点,因此将有多个候选词。但是,如果x是一个拼写错误,字典中就没有具有给定前缀的单词。Return[[]表示有一个候选者,且为空[]。而[]表示根本没有候选项。嗯,当用户输入了一个拼写错误而根本没有候选项时,为什么要返回一个空的候选项呢?例如:案例1,用户输入:a,结果:[a,an,和,另一个];案例2,用户输入:an,结果:[an,and,other];案例3,用户输入:anz,结果:[]案例3的另一个选项是[an]以指示打字错误。