我在这个函数中陷入无限循环:
let rec showGoatDoorSupport(userChoice, otherGuess, aGame) =
if( (userChoice != otherGuess) && (List.nth aGame otherGuess == "goat") ) then otherGuess
else showGoatDoorSupport(userChoice, (Random.int 3), aGame);;
以下是我调用函数的方法:
showGoatDoorSupport(1, 2, ["goat"; "goat"; "car"]);
在函数的第一个条件中,我比较前2个输入参数(1和2),如果它们不同,如果列表中索引“otherGuess”的项不等于“goat”,我想要返回那个其他的人。
否则,我想再次使用0-2之间的随机数作为第二个输入参数来运行该函数。
重点是继续尝试运行该函数,直到第二个参数不等于第一个参数,并且列表中的那个插槽不是“山羊”,然后返回该插槽号。
答案 0 :(得分:8)
不要使用==
,它会检查物理上的平等。使用=
。两个不同的字符串永远不会在物理上相等,即使它们包含相同的字符序列。 (这是必要的,因为字符串在OCaml中是可变的。)
$ ocaml
OCaml version 4.00.0
# "abc" == "abc";;
- : bool = false
# "abc" = "abc";;
- : bool = true
答案 1 :(得分:1)
另一个要做的是使用String.compare
。一个例子:
if String.compare str1 str2 = 0 then (* case equal *)
else (* case not equal *)