F# 中同一行有多个 let 语句

The*_*nce 0 syntax f#

module Digits
type Digit = Unison | Semitone | Tone | MinorThird | MajorThird | PerfectFourth | AugmentedFourth | PerfectFifth | MinorSixth | MajorSixth | MinorSeventh | MajorSeventh type 'd GeneralizedDigit = SmallDigit of 'd | Octave type 't Number = EmptyNumber | CountedNumber of 't * 't Number
let swapOctave: Digit GeneralizedDigit -> Digit GeneralizedDigit = fun x -> match x with SmallDigit Unison -> Octave | Octave -> SmallDigit Unison | g -> g
let limitLength: 'r Number -> Digit = fun a -> match a with EmptyNumber -> Unison | CountedNumber(_,EmptyNumber) -> Semitone | CountedNumber(_,CountedNumber(_,EmptyNumber)) -> Tone | CountedNumber(_,CountedNumber(_,CountedNumber(_,EmptyNumber))) -> MinorThird | _ -> MajorSeventh
Run Code Online (Sandbox Code Playgroud)

在 F# 中,我可以type在没有分号的情况下将多个定义放在同一行,没有任何问题,但是当我删除语句之间的换行符时,let我收到错误FS0010。我知道在 Haskell 中语句可以用一个分号分隔,但在 F# 中无论是单分号还是双分号都不起作用。如何在同一行上有多个 let 语句?

Phi*_*ter 6

您可以使用let .. in如下语法来完成此操作:

let f () = let a = 1 in let b = 2 in a + b
f () // gives 3 as a result
Run Code Online (Sandbox Code Playgroud)

但我真的建议不要像这样进行多个单行定义。人们很难阅读。