我如何在OCaml中描述这个小C程序?

时间:2016-05-04 22:43:11

标签: ocaml

如果我做这个代码一切正常:

word = "Hello World";;

number = 9 ;;

let main() =

    print_string word ;;
    print_int number ;;

main() ;; 

问题:我必须在OCaml为我的大学做一个游戏,它必须是模块化的,我做了一些功能但现在我不知道我怎么能同时打电话给他们,o我怎么能做其他的功能到调用所有这些,并且最后一个函数返回void。 下一个代码是我想要做的但我不能: - 我有一个模块Main.ml导入模块Player.ml,  在Player.ml中我有下一个不起作用的代码:

let print word number = ()

        let fun() =
            print_int number ;;
            print_string word ;;

然后在Main.ml我有:

let main() =

      print "points player peter " 5 ;;

      print "points player mark" 7 ;;

main();;

所以我想在ocaml做一些势在必行的事情,我不知道怎么做.. 在C中我会做这样的事情:

Player.c

中的

  void print(char *word, int number){

     fprintf(stdout,"%s", word);
     fprintf(stdout,"%d", number);
  }
Main.c

中的

int main(void){

print("point player peter ", 5);

print("points player mark", 8);

return 0;

}

我的ocaml代码更复杂,我有记录,递归函数等等所以我真的需要将以前的C程序引入Ocaml程序..我 我觉得我有问题..如果你可以帮助我,谢谢:)

1 个答案:

答案 0 :(得分:0)

您的OCaml代码存在许多问题,但我认为最大的问题是您的函数print作为一些OCaml代码毫无意义。

要开始使用,您应该更像这样定义print

 let print word number =
    print_string word;
    print_int number

现在你可以从其他模块中调用这个函数:

Player.print "peter" 18

我还建议您减少代码中;;的使用。与显然流行的概念相反,在每行OCaml代码之后不需要;;。在我自己的源文件中,根本没有出现;;

您对;;的大多数使用应改为;

简而言之:;;用于告诉顶层(REPL)评估您到目前为止输入的内容。 ;用于通过忽略第一个表达式的值将两个表达式连接到单个表达式中。这仅在命令式上下文中才有意义,其中第一个表达式具有类型unit

如果您坦率地原谅我的发言,那么通过OCaml教程可能会比在StackOverflow上寻求帮助更有效率,然后才能掌握一些基本知识。