2017-08-09 38 views
1

我有一个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;;然而,有没有另一种方法来调用这个函数,并让它的效果?我真的很困惑在这里

+0

'ac_ch' *为*绑定了'';;你在说些什么 – Bergi

+0

功能之后?为什么你的代码在一个流浪'in'中结束? – Bergi

回答

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