函数调用未在Ocaml中生效
我在Ocaml中遇到一个问题,我试图从一个集合中删除一个特定的值,然后打印出该集合,排除删除的值。每次我编写函数时,都会出现一个错误。这就是函数函数调用未在Ocaml中生效,ocaml,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 ()
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
但每次运行此命令时,都会出现错误:
错误:未绑定值ac\u ch
。我认为这与使用;终止函数调用remove
有关但是,是否有其他方法调用此函数并使其生效?我在这里真的很困惑我假设SS代表一个字符串集模块,声明如下:
module SS = Set.Make(String)
let ac_ch = ... in let remove = ... in remove
您的第一个表达式如下所示:
module SS = Set.Make(String)
let ac_ch = ... in let remove = ... in remove
ac_ch
和remove
的定义在此表达式中是局部的。因此,在后面的代码中,这两个名称都没有绑定
您说希望第一个表达式“生效”,但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 ()
ac_ch
在之后解除绑定你说的是什么功能?为什么您的代码以
中的零散结尾?