函数调用不生效Ocaml

时间:2017-08-09 18:35:57

标签: ocaml

我遇到了Ocaml的问题,我试图从集合中删除特定值并打印出除去删除值的集合。每次我写这个函数,都会出错。这就是功能。

let ac_ch = ac_change p set in 
let remove = SS.remove pretty_print ac_ch in
remove;;
let _= (SS.iter print_endline ac_ch) in
let _= print_newline () in
let _= print_newline () in
let _= print_newline () in

但是每次运行时我都会收到错误:Error: Unbound value ac_ch。我认为它与使用remove终止函数调用;;有关,但是,是否有另一种方法来调用此函数并使其具有效果?我真的很困惑

1 个答案:

答案 0 :(得分:3)

我将假设SS重复声明了这样的字符串集模块:

module SS = Set.Make(String)

你的第一个表达式如下:

let ac_ch = ... in let remove = ... in remove

ac_chremove的定义是此表达式的本地定义。因此,在后面的代码中,这两个名称都没有绑定。

你说你想要第一个表达式"有效果",但OCaml中的集合是不可变的。即,没有可以应用于它们的效果。该表达式生成一个值remove,一个已删除元素的集合,但该值不会在计算后的任何地方使用。对以前存在的任何集都没有影响。

考虑到集合的不变性,你需要重新计算。

这样的事情可能更接近:

let ac_ch = ac_change p set in
let remove = SS.remove pretty_print ac_ch in
let _= (SS.iter print_endline remove) in
let _= print_newline () in
let _= print_newline () in
let _= print_newline ()