F #-차별 조합

공용체 또는 구별 된 공용체를 사용하면 잘 정의 된 선택 세트를 나타내는 복잡한 데이터 구조를 구축 할 수 있습니다. 예를 들어, yes 및 no 값이 두 개인 선택 변수 의 구현을 빌드해야합니다 . Unions 도구를 사용하여 이것을 디자인 할 수 있습니다.

통사론

차별 공용체는 다음 구문을 사용하여 정의됩니다-

type type-name =
   | case-identifier1 [of [ fieldname1 : ] type1 [ * [ fieldname2 : ] 
type2 ...]
   | case-identifier2 [of [fieldname3 : ]type3 [ * [ fieldname4 : ]type4 ...]
...

, choice 의 간단한 구현은 다음과 같습니다.

type choice =
   | Yes
   | No

다음 예제는 유형 선택을 사용합니다-

type choice =
   | Yes
   | No

let x = Yes (* creates an instance of choice *)
let y = No (* creates another instance of choice *)
let main() =
   printfn "x: %A" x
   printfn "y: %A" y
main()

프로그램을 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.

x: Yes
y: No

예 1

다음 예제는 높거나 낮은 비트를 설정하는 전압 상태의 구현을 보여줍니다.

type VoltageState =
   | High
   | Low

let toggleSwitch = function (* pattern matching input *)
   | High -> Low
   | Low -> High

let main() =
   let on = High
   let off = Low
   let change = toggleSwitch off

   printfn "Switch on state: %A" on
   printfn "Switch off state: %A" off
   printfn "Toggle off: %A" change
   printfn "Toggle the Changed state: %A" (toggleSwitch change)

main()

프로그램을 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.

Switch on state: High
Switch off state: Low
Toggle off: High
Toggle the Changed state: Low

예 2

type Shape =
   // here we store the radius of a circle
   | Circle of float

   // here we store the side length.
   | Square of float

   // here we store the height and width.
   | Rectangle of float * float

let pi = 3.141592654

let area myShape =
   match myShape with
   | Circle radius -> pi * radius * radius
   | Square s -> s * s
   | Rectangle (h, w) -> h * w

let radius = 12.0
let myCircle = Circle(radius)
printfn "Area of circle with radius %g: %g" radius (area myCircle)

let side = 15.0
let mySquare = Square(side)
printfn "Area of square that has side %g: %g" side (area mySquare)

let height, width = 5.0, 8.0
let myRectangle = Rectangle(height, width)
printfn "Area of rectangle with height %g and width %g is %g" height width (area myRectangle)

프로그램을 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다.

Area of circle with radius 12: 452.389
Area of square that has side 15: 225
Area of rectangle with height 5 and width 8 is 40