我是OCaml的初学者,所以我不确定这是否是一个正确的问题。无论如何 让我们说我有一个元组列表[(1,2);(3,4);(5,6);(7,8);(9,10)]。我是函数中的模式匹配所以
char *aString(void)
{
char *str;
str = malloc(20);
strcpy(str, "Hello World!");
return str;
}
int main(int argc, char **argv)
{
char *ptr = aString();
printf("%s\n", ptr);
free(ptr);
exit(0);
}
不是真正的代码,只是为了说明我要解释的内容。当我使用第一次匹配的模式时,head1是(1,2),head2是(3,4),但尾部似乎只是(5,6)而不是(5,6)(7,8)( 9,10)...如果我是对的。毕竟我得到了"错误:这个表达式有类型' a *' b但是表达式需要类型(' a *' b)列表& #34;所以我认为必须发生的事情。在模式匹配中如何使尾部成为(5,6)(7,8)(9,10)的全部?
答案 0 :(得分:3)
tail
只是(5, 6)
并非如此。 tail
是您所期望的列表的完整尾部。
要解决您所描述的问题,我认为您只需要head1 :: tail
左右的括号。
在OCaml中,函数应用程序具有高优先级。所以这个表达式:
func head1 :: tail
被解析为好像它是这样的括号:
(func head1) :: tail
但你想要的(我认为)是:
func (head1 :: tail)
我怀疑代码中还有其他问题,但这可能会让你继续。