我正在尝试以下代码:
open Str
let ss = (Str.first_chars "testing" 3);;
print_endline ("The first 3 chars of 'testing' are: "^ss);;
if (ss == "tes")
then print_endline "These are equal to 'tes'"
else print_endline "These are NOT equal to 'tes'"
但是,我得到的这些不相等:
$ ocaml str.cma testing2.ml
The first 3 chars of 'testing' are: tes
These are NOT equal to 'tes'
为什么Str.first_chars
从“测试”中提取的前3个字符不等于“ tes”?
此外,我必须使用;;
来使此代码起作用(我尝试的in
和;
的组合无效)。将这三个语句组合在一起的最佳方法是什么?
答案 0 :(得分:3)
(==)函数是物理相等运算符。如果要测试两个对象是否具有相同的内容,则应使用具有一个等号(=)的结构相等运算符。
将这三个语句组合在一起的最佳方法是什么?
OCaml中没有声明。仅表达式,所有返回值。它就像一个数学公式,其中有数字,运算符和函数,并将它们组合在一起成为更大的公式,例如 generate_wordcloud(words, mask)
。最接近该语句的是具有副作用并返回类型为unit的值的表达式。但这仍然是表达。
这里是一个示例,说明如何构建表达式,该表达式将首先将返回的子字符串绑定到sin (2 * pi)
变量,然后按顺序计算两个表达式:无条件打印和有条件打印。总而言之,这将是一个评估单位值的表达式。
ss
这是它的工作方式
open Str
let () =
let ss = Str.first_chars "testing" 3 in
print_endline ("The first 3 chars of 'testing' are: " ^ ss);
if ss = "tes"
then print_endline "These are equal to 'tes'"
else print_endline "These are NOT equal to 'tes'"