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 Haskell,一个列表中的两个元素,然后是另一个列表中的一个元素?(模式匹配)_List_Haskell_Pattern Matching - Fatal编程技术网

List Haskell,一个列表中的两个元素,然后是另一个列表中的一个元素?(模式匹配)

List Haskell,一个列表中的两个元素,然后是另一个列表中的一个元素?(模式匹配),list,haskell,pattern-matching,List,Haskell,Pattern Matching,我有一个函数,它将从一个列表中获取两个元素,从第二个列表中获取一个元素,但如果给定列表只有一个元素,则会出现问题: 例如: *Main> g2 [1] [5..10] [1] 我想要这样的输出: *Main> g2 [1] [5..10] [1,5] 它适用于包含多个元素的列表: *Main> g2 [1..5] [8..10] [1,2,8,3,4,9,5] *Main> g2 [1,2,3,4] [6,7,8,9] [1,2,6,3,4,7] 我的代码: g2

我有一个函数,它将从一个列表中获取两个元素,从第二个列表中获取一个元素,但如果给定列表只有一个元素,则会出现问题:

例如:

*Main> g2 [1] [5..10]
[1]
我想要这样的输出:

*Main> g2 [1] [5..10]
[1,5]
它适用于包含多个元素的列表:

*Main> g2 [1..5] [8..10]
[1,2,8,3,4,9,5]
*Main> g2 [1,2,3,4] [6,7,8,9]
[1,2,6,3,4,7]
我的代码:

g2 (x1:x2:xs) (y:ys) = x1:x2:y:(g2 xs ys)
g2 (x1:[]) y = x1:[]
g2 [] ys = []

我想我忘了一个模式。

尽管你的问题令人困惑,但答案如下:

g2 (x1:x2:xs) (y:ys) = x1:x2:y:(g2 xs ys)
g2 (x1:[]) (y:ys) = x1:y:[]
g2 [] [] = []
-- Added missing patterns, don't know what the function is supposed to do here
g2 [] (y:ys) = []
g2 (x1:xs) [] = []

尽管你的问题令人困惑,但答案如下:

g2 (x1:x2:xs) (y:ys) = x1:x2:y:(g2 xs ys)
g2 (x1:[]) (y:ys) = x1:y:[]
g2 [] [] = []
-- Added missing patterns, don't know what the function is supposed to do here
g2 [] (y:ys) = []
g2 (x1:xs) [] = []

你的第二条直接涉及到那件事。只是,很明显,它不符合您的说明!-请注意,使用列表语法而不是
,即write
[x],通常可以更好地构造/解构具有固定数量元素的列表₁]而不是
x₁:[]
。您的第二个子句直接处理了这种情况。只是,它显然没有按照您的规范处理它!-注意,具有固定数量元素的列表通常使用列表语法而不是
,即编写
[x]来更好地构造/解构₁]而不是
x₁:[]
。对不起,我的英语不是很好,有时我的问题会变得晦涩:)这两种模式g2[](y:ys)=[]g2(x1:xs)[]=[]如何解决问题?我只是添加了它们以涵盖所有可能的情况,因此不会出现运行时错误,即没有为此类参数定义函数。它只会返回
[]
好吧,我理解,如果你想创建大函数,模式匹配有用吗?(来自haskell初学者的问题,对不起)你通常希望函数保持小,这种模式匹配的数量很多,你很容易迷失方向,忘记了case@MartinM如果启用警告(使用
-Wall
标志)编译器将警告潜在的非穷举模式,帮助您在所有情况下定义函数。对不起,我的英语不是很好,有时我的问题会变得晦涩难懂:)这两种模式g2[](y:ys)=[]g2(x1:xs)[]解决问题?我只是添加了它们以涵盖所有可能的情况,这样您就不会出现运行时错误,即您的函数没有为这些参数定义。它只会返回
[]
,我知道,如果您想创建大函数,模式匹配有用吗?(来自haskell初学者的问题,对不起)您通常希望保持函数较小,这种模式匹配量很大,您很容易丢失并忘记case@MartinM如果启用警告(使用
-Wall
标志),编译器将警告潜在的非穷举模式,帮助您在所有情况下定义函数。