如果我做这个代码一切正常:
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程序..我 我觉得我有问题..如果你可以帮助我,谢谢:)
答案 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上寻求帮助更有效率,然后才能掌握一些基本知识。