我需要一个主函数来运行其他函数。
我试过了:
let main () =
let deck = make_mazo in
let jugadores = players [] 0 in
dothemagic deck jugadores 0 [] [] [];;
但我收到了这个错误:
文件" game.ml",第329行,字符37-39: 错误:语法错误
我认为;;
是问题,我需要一种不同的方式来结束代码。也请尝试仅使用;
,问题是相同的。
let main =
let deck = make_mazo [] in
let game = players deck [] 0 in
let dd = fst game in
let jugadores = snd game in
dothemagic dd jugadores 0 [] [] [] [];
let () = main;;
错误仍然存在:
文件" game.ml",第253行,字符13-15: 错误:语法错误
其他功能完美正常,但我需要一个主要功能,因为我想用ocaml game.ml
或ocamlbuild game.native
@camlspotter响应之后:使用;
代码是错误的。删除它。
let main =
let deck = make_mazo [] in
let game = players deck [] 0 in
let dd = fst game in
let jugadores = snd game in
dothemagic dd jugadores 0 [] [] [] []
let () = main;;
新错误:
文件" game.ml",第253行,字符0-3:错误:语法错误
现在认为let
是问题,所以我尝试使用此
let main =
let deck = make_mazo [] in
let game = players deck [] 0 in
let dd = fst game in
let jugadores = snd game in
dothemagic dd jugadores 0 [] [] [] []
main;;
但错误是:
文件" game.ml",第253行,字符4-6: 错误:语法错误
答案 0 :(得分:1)
您在此处显示的代码没有任何语法错误。
很可能问题是在您未显示的部分的末尾附近,例如文件的第324行附近。
如果我不得不猜测,我会说第324行以in
结尾: - )
作为旁注,你还需要调用这个主要功能。您可能希望文件的最后一行是这样的:
let () = main ()
(这条线出现在我的许多OCaml项目中。)
答案 1 :(得分:0)
在ocaml中,没有其他语言的主要功能,请参阅下面的代码:
let () = print_string "hello\n";;
let f = print_string "hello, this is f\n";;
let () = f;;
答案 2 :(得分:0)
与许多其他语言的程序不同,OCaml程序没有特定的入口点:模块(文件)中的所有代码按从上到下的顺序进行评估,类似于脚本语言。你会看到一个常见的习语是:
let name = "World" (* I could have added a ;; at the
* end of this line, but that would
* have been unnecessary *)
let () =
Printf.printf "Hello, %s!\n" name
将输出
Hello, World!
let () = ...
可能看起来有点不稳定,但它实际上只是模式匹配:Printf.printf
的返回类型是单位,()
也是类型unit
,你真的只是说“将这个unit
值与评估这个表达式的结果相匹配”。基本上,这个习语意味着“以安全的方式运行这种单位式表达”。
类似的,尽管非常气馁的习语,使用了全能模式:
let greet s =
match s with
| "" -> false
| _ ->
Printf.printf "Hello, %s!\n" s;
true
let name = "World"
let _ =
greet world
catch-all模式并不关心它所匹配的表达式的类型(或值),这个习语意味着“运行这个表达式并丢弃它返回的任何内容”。
答案 3 :(得分:0)
要解决我的问题,我必须按以下方式编写函数,
let fun x =
let y = blabla in
code_returning_unit; (* Use ; for unit returns *)
return_value;; (* Use ;; for end of fun *)
感谢大家的帮助。