디자인도 내 첫 번째 선택이 될 것입니다. 요구 사항에 따라 필요한 모든 것일 수 있습니다.
그것은, 그러나, 또한 당신이 원하는 아마하지 않은
Add(Val(System.Console.Out), Val(System.Console.Error))
같은 식을 컴파일 할 수 있습니다 않습니다.
open System
type IntExpression =
| Integer of int
| Mul of IntExpression * IntExpression
| Add of IntExpression * IntExpression
type DateTimeExpression =
| Date of DateTime
| Add of DateTimeExpression * DateTimeExpression
type MyExpression =
| IntExpression of IntExpression
| DateTimeExpression of DateTimeExpression
이것은 분명히 더 자세한 유형 정의이지만, 표현 중 하나를 정수 또는 DateTime
값의 잎 노드를 포함 할 수있는 규칙을 구현 수행하고 :
또는이 같은 표현을 모델링 할 수 다른 값은 없습니다. 시행하려는 규칙 인 경우.
나는 이것이 더 나은 것이라고 주장하지 않습니다. 나는 대안을 제공하고 있습니다.
사용법 :
> IntExpression(Mul(IntExpression.Add(Integer(1), Integer(2)),Integer 3));;
val it : MyExpression =
IntExpression (Mul (Add (Integer 1,Integer 2),Integer 3))
> DateTimeExpression(Add(Date(DateTime.MinValue),Date(DateTime.MinValue)));;
val it : MyExpression =
DateTimeExpression
(Add
(Date 01.01.0001 00:00:00 {Date = 01.01.0001 00:00:00;
Day = 1;
DayOfWeek = Monday;
DayOfYear = 1;
Hour = 0;
Kind = Unspecified;
Millisecond = 0;
Minute = 0;
Month = 1;
Second = 0;
Ticks = 0L;
TimeOfDay = 00:00:00;
Year = 1;},
Date 01.01.0001 00:00:00 {Date = 01.01.0001 00:00:00;
Day = 1;
DayOfWeek = Monday;
DayOfYear = 1;
Hour = 0;
Kind = Unspecified;
Millisecond = 0;
Minute = 0;
Month = 1;
Second = 0;
Ticks = 0L;
TimeOfDay = 00:00:00;
Year = 1;}))
이 제한의 일부를 처리하지만, 그들 모두 없습니다 - 다음은 재치있는 표현은 아니지만,이 검사를 입력 :'() 도난을 날짜 (DateTime.Now 추가 (정수 1, 정수 2))' –