OCaml中能否在函数内使用assert语句?编译语法报错求解答
错误原因
OCaml 语法要求let/let rec定义函数时,等号右侧仅允许填写单个表达式。你添加的assert (n>=0)是独立的第一个表达式,后续的if分支逻辑是第二个独立表达式,不符合基础语法规则,因此会触发编译错误。
修复方法
在assert语句末尾添加单分号,将两个表达式串联为合法的表达式序列即可:
let rec fib n = assert (n >= 0); if n = 1 then 1 else n*(fib (n-1))
补充提示
你当前的代码逻辑实际是阶乘计算,并非斐波那契(fibonacci)数列逻辑。如果要实现斐波那契数列,可调整为如下逻辑:
let rec fib n = assert (n >= 0); if n < 2 then 1 else fib (n-1) + fib (n-2)
内容的提问来源于stack exchange,提问作者user49404
相关产品推荐
相关产品推荐

