【问题标题】:How can I produce multiline code in utop?如何在 utop 中生成多行代码?
【发布时间】:2022-01-19 22:20:51
【问题描述】:

在 Haskell 中,我们可以在终端输入多行代码,方法是将其括在“:{”和“:}”之间。例如,键入

> :{ main = do
> print("Hello") :}

在 ghci 中,我们可以调用 main。我们如何在 Ocaml on utop 中做到这一点?

【问题讨论】:

  • 只需输入表达式,使用回车创建一个新行。仅在输入终止序列;; 后才对其进行评估。
  • 在 utop 中,请注意向上和向下箭头键将在您的历史记录中循环,而不是在当前表达式中移动。但是,您可以使用左右箭头键在当前表达式中移动光标以进行编辑。这适用于多行表达式。
  • 还有用于垂直移动光标的键盘快捷键:Ctrl+p (resp. Ctrl+n) 将光标向上(向下)移动一行;另外,Ctrl+a / Ctrl+e 用于移动到当前行的开头/结尾。同样相关的,您可能对this 感兴趣。

标签: ocaml utop


【解决方案1】:

cmets 很好地解决了这个问题,但只要有答案,就没有魔法。传统的 OCaml 顶层 (只需使用 ocaml 调用)utop 都会读入,直到找到终止的 ;; 令牌。

例如:

─( 17:36:11 )─< command 0 >───────────────────────────────────────────────────────────────────────────────────────────────────{ counter: 0 }─
utop # print_endline 
"Hello, world!";;
Hello, world!
- : unit = ()
─( 17:36:11 )─< command 1 >───────────────────────────────────────────────────────────────────────────────────────────────────{ counter: 0 }─
utop # let msg = "Hello, world!"
in
  print_endline msg;;
Hello, world!
- : unit = ()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2015-04-07
    • 2012-03-23
    • 2011-05-27
    • 2017-11-07
    相关资源
    最近更新 更多