Io OCaml格式和结构框:为什么我的输出与示例不匹配?

Io OCaml格式和结构框:为什么我的输出与示例不匹配?,io,ocaml,Io,Ocaml,OCaml网站上的页面上有一个示例,给出了结构盒和包装盒之间的差异示例。我试图复制这个例子。(我使用的是OCaml 3.12.1。) 通过以下输入: Format.printf "@[<hov 2>(---@\n@[<hov 2>(---@\n@[<hov 2>(---@,)@]@,)@]@,)@]@\n" 我搞不懂的是如何获得页面归因于“结构框”的输出: 我不确定哪个格式。printf标识符映射到这些框,所以我尝试了几种变体: Format.printf

OCaml网站上的页面上有一个示例,给出了结构盒和包装盒之间的差异示例。我试图复制这个例子。(我使用的是OCaml 3.12.1。)

通过以下输入:

Format.printf "@[<hov 2>(---@\n@[<hov 2>(---@\n@[<hov 2>(---@,)@]@,)@]@,)@]@\n"
我搞不懂的是如何获得页面归因于“结构框”的输出:

我不确定哪个
格式。printf
标识符映射到这些框,所以我尝试了几种变体:

Format.printf "@[<hv 2>(---@\n@[<hv 2>(---@\n@[<hv 2>(---@,)@]@,)@]@,)@]@\n"
Format.printf "@[<2>(---@\n@[<2>(---@\n@[<2>(---@,)@]@,)@]@,)@]@\n"
Format.printf "@[<b 2>(---@\n@[<b 2>(---@\n@[<b 2>(---@,)@]@,)@]@,)@]@\n"
Format.printf“@[(--@\n@[(--@\n@[(--@、)@、)@、)@、)@]@\n”
Format.printf“@[(--@\n@[(--@\n@[(--@、)@、)@、)@、)@]@\n”
Format.printf“@[(--@\n@[(--@\n@[(--@、)@、)@、)@、)@]@\n”

但是以上所有的输出都与
初始示例相同。有人知道如何从网页上获得与第二个示例类似的输出吗?

我认为您的第二个示例(带高压盒)应该可以工作。但似乎@\n没有我们期望的行为

解决方案1:强制右括号前换行,即用@替换@\n

let () =
  Format.printf "@.";
  Format.printf "@[<hov 2>(---@\n@[<hov 2>(---@\n@[<hov 2>(---@\n)@]@\n)@]@\n)@]@\n";
  Format.printf "@."
问题:始终会有换行,它永远不会打印:

(---(---))

即使它有足够的空间。如果这是您的问题,请参阅解决方案2

解决方案2:使用更长的线路:)如果中断是由长线路引起的,则高压箱会在右括号之前中断线路

let () =
  Format.printf "@.";
  Format.printf "@[<hv 2>(------------------------------------------------------------------------@,@[<hv 2>(---@,@[<hv 2>(---@,)@]@,)@]@,)@]";
  Format.printf "@."
但是,右括号与右括号不对齐

解决方案3:如果希望右括号与左括号对齐,则需要 两个盒子

let () =
  Format.printf "@.";
  Format.printf
    "@[<hv>@[<hv 2>(------------------------------------------------------------------------\
     @[<hv>@[<hv 2>(------------------------------------------------------------------------\
     @[<hv>@[<hv 2>(------------------------------------------------------------------------\
     @]@,)@]@]@,)@]@]@,)@]";
  Format.printf "@."
(---
  (---
    (---
      )
    )
  )
let () =
  Format.printf "@.";
  Format.printf "@[<hv 2>(------------------------------------------------------------------------@,@[<hv 2>(---@,@[<hv 2>(---@,)@]@,)@]@,)@]";
  Format.printf "@."
(------------------------------------------------------------------------
  (---(---))
  )
let () =
  Format.printf "@.";
  Format.printf
    "@[<hv>@[<hv 2>(------------------------------------------------------------------------\
     @[<hv>@[<hv 2>(------------------------------------------------------------------------\
     @[<hv>@[<hv 2>(------------------------------------------------------------------------\
     @]@,)@]@]@,)@]@]@,)@]";
  Format.printf "@."
(------------------------------------------------------------------------
  (------------------------------------------------------------------------
    (------------------------------------------------------------------------
    )
  )
)