저는 방금 함수 프로그래밍을 시작했습니다. "나는 잘못하고있는 예제를 시험해보고 다른 사람들에게 내가 잘못했는지 묻습니다."단계에 있습니다. Don Syme의 다음 글 인 F# Tutorial을 따르고 있고, 파트 II의 마지막 부분에 블랙 잭 연습에서 찌르기를하기로 결정했습니다. 간단히하기 위해 Ace를 11로 처리 할 것을 제안했지만, 나는 그 권장 사항을 무시하기로 결정했습니다.두 개의 목록에있는 항목의 모든 조합에 함수의 응용 프로그램 목록을 생성하는 기존 패턴이 있습니까?
내가 처리 해요 방법은 각 카드 순위를 가능한 값의 목록을 제공하고 재귀 것이 가능 손 값의 목록을 구축하는 것입니다:
let cardValues (Card(rank, _)) =
match rank with
| Ace -> [1; 11]
| King | Queen | Jack -> [10]
| Value(value) -> [value]
let rec handValues = function
| [] -> [0]
| card::cards ->
[
for handValue in handValues cards do
for cardValue in cardValues card do
yield handValue + cardValue
]
handValues
기능은 구조가 매우 유사하다 내가 이것을 달성하기 위해 사용할 수있는 고차 함수가 이미 있다는 느낌을 떨칠 수없는 배. 내가 누락 된 부분이 있습니까, 아니면 거의 올바른 방향입니까?
+1 넵 - 확실히 언급할만한 가치가 있습니다. @ 브라이언 : 유용한 모나드 빌더 (목록, 어쩌면, 비동기, 상태 ...)의 내장 컬렉션 있나요? – Dario
아니요, 그냥 async가 FSharp.Core에 있습니다. 아마도 옵션 (a.k.a. 어쩌면), 목록 및 웹에 떠 다니는 상태와 같은 몇 가지 예를 찾을 수 있습니다. 웹상의 오픈 소스 프로젝트에 어딘가에 그것들을 모으는 것은 상처를주지 않을 것이다. – Brian
그건 정확히 내 질문에 내가 찾고 있었던 우아함의 종류 야. 이제이 모든 모나드 바인딩 물체가 무엇인지 알아 내려고합니다. < – Cogwheel