陷入函数的无限循环中

时间:2012-09-27 23:17:01

标签: functional-programming ocaml

我在这个函数中陷入无限循环:

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之间的随机数作为第二个输入参数来运行该函数。

重点是继续尝试运行该函数,直到第二个参数不等于第一个参数,并且列表中的那个插槽不是“山羊”,然后返回该插槽号。

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 *)