OCaml 支持 for-each 循环吗?

问题描述 投票:0回答:2

我想打印列表中的每个整数。

我可以用

List.iter
来做到这一点,就像这样:

digits
|> List.iter
  (fun i -> print_int i; print_newline ())

但是,我通常更喜欢将命令式代码保留在函数管道之外。

是否可以在 OCaml 中的 for-each 循环中编写此代码?

(假设语法)

for i in digits do
  print_int i ; 
  print_newline ()
end
ocaml
2个回答
1
投票

简答?没有。

更长的答案:在 camlp4 过去的日子里,类似这样的东西可能会被一起黑客攻击。

如果我们要添加此语法和附带的语义,我们必须回答几个问题:

  • 这个语法在语义上映射到什么?我们如何让这个方法适用于任何东西的集合?我们能做到吗?我们是否只是让它迭代序列之类的东西?
  • 如果我们可以解决上述问题,如果我们迭代一个可变集合,那么在循环内改变该集合如何影响迭代?这是使用此类结构的其他语言中的主要错误来源。
  • 如果我们克服了这一点,这比我们现有的更好吗?

建议:使用

Printf
Format
模块简化显示的代码。

digits
|> List.iter (Format.printf "%d\n")

0
投票

除了最上面的回复之外,如果您使用列表,Ocaml 网站 还有一个非常好的答案。

想象你有一些清单

digits

let x elem = 
    Printf.printf "element %d \n" elem
in 
    List.iter x digits;;
© www.soinside.com 2019 - 2024. All rights reserved.