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,我想创建一个函数,我们称之为altHead,它接受2个变量并输出一个变量,如下所示: a -> [a] -> a 我想这样称呼它: altHead 3 [1,2,3,4] 它应该做的是查看第一个变量和列表。如果列表为空,则返回第一个var的值;否则,返回列表 在本例中,我编写了以下代码 altHead :: a -> [a] -> a altHead (x:xs) = if null[xs] then [x] else [xs] 然而,我相信x:xs只会查看列表 我

我想创建一个函数,我们称之为altHead,它接受2个变量并输出一个变量,如下所示:

a -> [a] -> a
我想这样称呼它:

altHead 3 [1,2,3,4]
它应该做的是查看第一个变量和列表。如果列表为空,则返回第一个var的值;否则,返回列表

在本例中,我编写了以下代码

altHead :: a -> [a] -> a
altHead (x:xs) = if null[xs] then [x] else [xs]
然而,我相信x:xs只会查看列表


我有点纠结于如何更改它,以便它也能看到第一个值,以及如何在函数中包含第一个值。

您想要类似于:

altHead :: a -> [a] -> a
altHead a xs = if null xs then a else head xs
或者,使用列表上的模式匹配:

altHead :: a -> [a] -> a
altHead a [] = a
altHead a (x:xs) = x

你想要的是:

altHead :: a -> [a] -> a
altHead a xs = if null xs then a else head xs
或者,使用列表上的模式匹配:

altHead :: a -> [a] -> a
altHead a [] = a
altHead a (x:xs) = x

提示:根本不要使用if/then/else。模式匹配就是你所需要的一切。@Carl-Hmmm所以,altHead[]=x////altHead[a]=a]?
(x:xs)
不绑定两个参数,它绑定一个必须是列表的参数的首尾。@Wyzard-yes,这也是我得出的结论。只是不知道如何在其中包含第一个var…
altheada(x:xs)=
提示:根本不要使用if/then/else。模式匹配就是你所需要的一切。@Carl-Hmmm所以,altHead[]=x////altHead[a]=a]?
(x:xs)
不绑定两个参数,它绑定一个必须是列表的参数的首尾。@Wyzard-yes,这也是我得出的结论。只是不知道如何将第一个变量也包含在其中…
altHead a(x:xs)=
第二个示例的最后一行也可以写
altHead(x:u)=x
,因为实际上既没有使用
a
也没有使用
xs
。是的,我只是认为将它们作为变量名保留有助于可读性/理解。(它还显示了OP使用的
(x:xs)
模式。)我想我现在明白了一些我以前从根本上误解的东西。谢谢你,当我完成我的版本时,我看到了它,它有点不对劲,但在其他方面还行。Quick Q:我意识到这不是正常的键入方式,但是如果列表不是空的,它是否可以返回整个列表,否则只返回x?你不能有一个函数,有时返回列表,有时返回单个值,因为它们是不同的类型。但是您可以将签名更改为
a->[a]->[a]
,并在列表为空时返回
[a]
。谢谢,这是我需要的。我还要学哈斯克尔,干杯,伙计们!第二个示例的最后一行也可以写成
altHead_ux(x:x)=x
,因为实际上既没有使用
a
也没有使用
xs
。是的,我只是认为将它们作为变量名保留有助于可读性/理解。(它还显示了OP使用的
(x:xs)
模式。)我想我现在明白了一些我以前从根本上误解的东西。谢谢你,当我完成我的版本时,我看到了它,它有点不对劲,但在其他方面还行。Quick Q:我意识到这不是正常的键入方式,但是如果列表不是空的,它是否可以返回整个列表,否则只返回x?你不能有一个函数,有时返回列表,有时返回单个值,因为它们是不同的类型。但是您可以将签名更改为
a->[a]->[a]
,并在列表为空时返回
[a]
。谢谢,这是我需要的。我还要学哈斯克尔,干杯,伙计们!