OCaml-如何获取元组列表的尾部?

时间:2015-09-28 23:37:13

标签: list functional-programming pattern-matching tuples ocaml

我是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)的全部?

1 个答案:

答案 0 :(得分:3)

tail只是(5, 6)并非如此。 tail是您所期望的列表的完整尾部。

要解决您所描述的问题,我认为您只需要head1 :: tail左右的括号。

在OCaml中,函数应用程序具有高优先级。所以这个表达式:

func head1 :: tail

被解析为好像它是这样的括号:

(func head1) :: tail

但你想要的(我认为)是:

func (head1 :: tail)

我怀疑代码中还有其他问题,但这可能会让你继续。