对于这种嵌套的let-in的ocaml缩进样式

时间:2011-07-12 19:44:54

标签: emacs coding-style nested ocaml

我正在阅读关于Ocaml嵌套版本的Ocaml Style指南。

  

http://www.seas.upenn.edu/~cis341/programming_style.html#16

建议

  

缩进嵌套的let表达式:嵌套的let表达式的代码块不应缩进。   坏:

   let x = exp1 in
      let y = exp2 in
        x + y
  

好:

   let x = exp1 in    
   let y = exp2 in
       x + y

但是,您如何考虑如何缩进我的以下程序?

let f = 
  let g = 3 in
    g + 2 

以上内容由emacs缩进。但显然,这些emacs的缩进违反了我之前引用的风格指南。要遵循这种风格,不应该更像这个吗?

let f = 
  let g = 3 in
  g + 2 

感谢您的想法。

@Gilles:在我当前的默认图阿雷格模式中,我得到了这样的缩进,这与你的不同

let f = 
  let g = 3 in
  let h = 4 in
    g + 2 

你能解释我应该采取哪种配置来使你的图阿雷格模式缩进吗?

2 个答案:

答案 0 :(得分:4)

官方caml-mode(标准Ocaml发行版的一部分)默认不会将let表达式的主体置于其中:

let f = 
  let g = 3 in
  let h = 4 in
  g + 2 

这是Ocaml作者使用的风格(因此是正确的风格)。根据我的经验,官方模式与官方风格非常匹配(不足为奇,因为它来自同一个人)。如果您得到的不同,您(或在您的机器上安装该模式的人员或分销商)必须已配置它。

Tuareg mode在我的机器上的片段(Debian squeeze)上添加了相同的缩进。不同的版本有不同的缩进默认值;特别是,这是2.0.1上tuareg-in-indent的文档字符串:

  

要从in关键字缩进多少空格。
  Upstream建议0,这是我们自2.0.1以来默认的内容,而不是历史tuareg-default-indent

答案 1 :(得分:3)

我认为Tuareg确实有一些奇怪的行为,缩进嵌套的let-in。添加这些行以返回“默认”ocaml缩进样式,建议 C. TROESTLER

      (add-hook 'tuareg-mode-hook
(function (lambda ()
  (setq tuareg-in-indent 0)
  (setq tuareg-let-always-indent t)
  (setq tuareg-let-indent tuareg-default-indent)
  (setq tuareg-with-indent 0)
  (setq tuareg-function-indent 0)
  (setq tuareg-fun-indent 0)
  (setq tuareg-parser-indent 0)
  (setq tuareg-match-indent 0)
  (setq tuareg-begin-indent tuareg-default-indent)
  (setq tuareg-parse-indent tuareg-default-indent); .mll
  (setq tuareg-rule-indent  tuareg-default-indent)

  (setq tuareg-font-lock-symbols nil)
      )))