OCaml sign函数实现报错求助:类型不匹配问题排查
问题排查与解决
首先明确:你给出的两个sign函数定义本身是完全正确的,对正数、负数、零都能返回预期结果。测试验证:
sign 5;;返回1sign (-3);;返回-1sign 0;;返回0
你遇到的错误提示:
Error: This expression has type int -> int but an expression was expected of type int
是因为调用函数时没有传入整数参数,导致返回了函数本身(类型为int -> int),但当前上下文需要的是一个int类型的值。
正确的调用方式示例
在OCaml交互环境(toplevel)中直接调用:
sign (-10);; (* 返回 -1 *) sign 0;; (* 返回 0 *) sign 7;; (* 返回 1 *)注意:负数参数需要加括号,避免被解析为
sign - 10(函数减整数的错误语法)。在代码中使用:
let my_num = -42 in let res = sign my_num in print_int res;; (* 输出 -1 *)
总结
函数定义没有问题,只需修正调用方式,确保调用sign时传入一个整数参数即可解决错误。
内容的提问来源于stack exchange,提问作者Chinmay Vinod Dali
相关产品推荐
相关产品推荐

