수색…
F #의 데이터 기반 프로그래밍
F#
유형 추론 및 부분 적용 덕분에 데이터 중심 프로그래밍 은 간결하고 읽기 쉽습니다.
우리가 자동차 보험을 팔고 있다고 상상해 봅시다. 고객에게 판매하기 전에 고객의 성별과 나이를 확인하여 고객이 회사의 유효한 잠재 고객인지 확인합니다.
간단한 고객 모델 :
type Sex =
| Male
| Female
type Customer =
{
Name : string
Born : System.DateTime
Sex : Sex
}
다음으로 제외 목록 (표)을 정의하여 고객이 제외 목록의 행과 일치하면 고객이 자동차 보험을 구매할 수 없도록합니다.
// If any row in this list matches the Customer, the customer isn't eligible for the car insurance.
let exclusionList =
let __ _ = true
let olderThan x y = x < y
let youngerThan x y = x > y
[|
// Description Age Sex
"Not allowed for senior citizens" , olderThan 65 , __
"Not allowed for children" , youngerThan 16 , __
"Not allowed for young males" , youngerThan 25 , (=) Male
|]
유형 추론 및 부분 적용으로 인해 제외 목록은 유연하지만 이해하기 쉽습니다.
마지막으로 제외 목록 (표)을 사용하여 잠재 고객과 거부 된 고객을 두 개의 버킷으로 나눌 수있는 함수를 정의합니다.
// Splits customers into two buckets: potential customers and denied customers.
// The denied customer bucket also includes the reason for denying them the car insurance
let splitCustomers (today : System.DateTime) (cs : Customer []) : Customer []*(string*Customer) [] =
let potential = ResizeArray<_> 16 // ResizeArray is an alias for System.Collections.Generic.List
let denied = ResizeArray<_> 16
for c in cs do
let age = today.Year - c.Born.Year
let sex = c.Sex
match exclusionList |> Array.tryFind (fun (_, testAge, testSex) -> testAge age && testSex sex) with
| Some (description, _, _) -> denied.Add (description, c)
| None -> potential.Add c
potential.ToArray (), denied.ToArray ()
결론을 내리기 위해 일부 고객을 정의하고 그들이 고객 사이에 자동차 보험의 잠재 고객인지 확인해 봅시다.
let customers =
let c n s y m d: Customer = { Name = n; Born = System.DateTime (y, m, d); Sex = s }
[|
// Name Sex Born
c "Clint Eastwood Jr." Male 1930 05 31
c "Bill Gates" Male 1955 10 28
c "Melina Gates" Female 1964 08 15
c "Justin Drew Bieber" Male 1994 03 01
c "Sophie Turner" Female 1996 02 21
c "Isaac Hempstead Wright" Male 1999 04 09
|]
[<EntryPoint>]
let main argv =
let potential, denied = splitCustomers (System.DateTime (2014, 06, 01)) customers
printfn "Potential Customers (%d)\n%A" potential.Length potential
printfn "Denied Customers (%d)\n%A" denied.Length denied
0
인쇄 내용 :
Potential Customers (3)
[|{Name = "Bill Gates";
Born = 1955-10-28 00:00:00;
Sex = Male;}; {Name = "Melina Gates";
Born = 1964-08-15 00:00:00;
Sex = Female;}; {Name = "Sophie Turner";
Born = 1996-02-21 00:00:00;
Sex = Female;}|]
Denied Customers (3)
[|("Not allowed for senior citizens", {Name = "Clint Eastwood Jr.";
Born = 1930-05-31 00:00:00;
Sex = Male;});
("Not allowed for young males", {Name = "Justin Drew Bieber";
Born = 1994-03-01 00:00:00;
Sex = Male;});
("Not allowed for children", {Name = "Isaac Hempstead Wright";
Born = 1999-04-09 00:00:00;
Sex = Male;})|]
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow