gpt4 book ai didi

ocaml - 开始 Ocaml - 返回未实现的测试用例

转载 作者:行者123 更新时间:2023-12-03 14:35:00 25 4
gpt4 key购买 nike

现在我正在开始使用 Ocaml,但遇到了问题。当我输入这段代码时,我的测试用例报告该代码未实现,即使我实现了它。某处有某种语法错误吗?我真的不习惯这种语言,所以是的。提前致谢。

let rec move_robot (pos: int) (dir: string) (num_moves: int) : int =
let new_position=pos in
if dir="forward" then new_position=pos+num_moves in
else if dir="backward" then new_position=pos-num_moves in
if new_position>=99 then 99
else if new_position<=0 then 0
else new_position

let test () : bool =
(move_robot 10 "forward" 3) = 13
;; run_test "move_robot forward 3" test

let test () : bool =
(move_robot 1 "backward" 4 ) = 0
;; run_test "move_robot backward 4" test

最佳答案

很可能是因为到处都有语法错误,而且 move_robot 从未加载到顶层。 Syntax Error 消息应该非常明显,无论您的概念错误在开始使用 OCaml 进行函数式编程时很常见。

虽然第一个 if 语句有一个无关的 in,它也不应该在它的语句中设置一个变量,而是返回一些值。一般来说,处理 w/和设置 new_position 的方式非常像 C,如果你修复了第一个语法错误,你会立即发现你从未更改过 new_position< 的值if 语句(以及大多数其他任何语句)应该返回一个值,而不是试图在更大的范围内改变变量——人们会为此使用引用,这在这里是不必要的。

let new_position =
if dir = "forward" then pos+num_moves
else if dir = "backward" then pos-num_moves
else failwith ("Invalid Direction: "^dir)
in

如您所见,我们从未尝试修改 new_position;这符合函数式程序员喜欢的不变性。另请注意,如果不包括最后的 else 语句,您将收到类型检查错误。排除它是返回 unit 的语法糖,但你返回一个整数。更好的(我认为通常比 if 语句更清晰)是使用模式匹配,

let new_position = match dir with
| "forward" -> pos+num_moves
| "backward" -> pos-num_moves
| _ -> failwith ("Invalid Direction: "^dir)
in

我知道你刚开始,所以你可以改天再说,但我只是提一下(没有解释)你应该使用变体或可能的多态变体而不是直接检查字符串。

关于ocaml - 开始 Ocaml - 返回未实现的测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8926431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com