트랙
/
F#
F#
/
연습 문제
/
피자 가격 책정
피자 가격 책정

피자 가격 책정

학습 연습 문제

소개

재귀

어떤 것이 자기 자신을 이용해 정의될 수 있는 능력을 재귀라고 해요. F#에서 재귀는 주로 자기 자신을 호출하는 함수인 재귀 함수에서 볼 수 있어요.

재귀 함수에는 최소한 하나의 _기본 사례_와 최소한 하나의 _재귀 사례_가 필요해요. _기본 사례_는 함수를 다시 호출하지 않고 값을 반환해요. _재귀 사례_는 함수를 다시 호출하는데, 이때 입력을 수정해서 언젠가는 기본 사례와 일치하도록 만들어요.

재귀 함수는 일반 함수처럼 정의하지만, rec 한정자를 함께 사용해요. 이 한정자가 없으면 함수는 자기 자신을 호출할 수 없고, 그렇게 호출하려고 하면 컴파일 오류가 발생해요. 따라서 재귀를 사용하려면 명시적으로 선택해야 해요.

let rec factorial x =
    // Base case
    if x = 1 then
        1
    // Recursive case
    else
        x * factorial (x - 1)

F#은 판별 공용체 형식을 통해 재귀 형식도 지원해요. 재귀 판별 공용체 형식은 하나 이상의 케이스가 자신의 데이터에서 판별 공용체 형식 자체를 참조해요. 재귀 함수와 마찬가지로 재귀 형식에도 기본 사례가 있어야 해요. 재귀 함수와 달리 재귀 형식은 rec 키워드를 사용하지 않아요.

type RussianDoll =
    | Doll                 // Base case
    | Layer of RussianDoll // Recursive case

지침

이 연습 문제에서는 고객에게 배달하는 피자 가게에서 일해요.

세 가지 종류의 피자를 제공해요:

  • Margherita: $7
  • Caprese: $9
  • Formaggio: $10

고객은 약간의 추가 요금을 내고 두 가지 옵션을 더 고를 수도 있어요:

  1. 추가 소스: $1
  2. 추가 토핑: $2

고객이 주문할 때 피자를 한 판이나 두 판만 주문하면 추가 요금이 붙어요:

  • 피자 한 판: $3
  • 피자 두 판: $2

과제는 세 가지이고, 각 과제에서는 피자와 그 가격을 다뤄요.

1. 피자 종류와 옵션 정의하기

피자 종류와 피자에 추가할 수 있는 두 가지 옵션을 나타내는 Pizza 구별된 공용체를 정의해요:

  • Margherita
  • Caprese
  • Formaggio
  • ExtraSauce
  • ExtraToppings

2. 피자 가격 계산하기

피자 한 판의 가격을 계산하는 pizzaPrice 함수를 구현해요:

pizzaPrice Caprese
// => 9

3. 주문 가격 계산하기

피자 주문의 가격을 계산하는 orderPrice 함수를 구현해요:

orderPrice [Margherita; Formaggio]
// => 19
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
F# Exercism

피자 가격 책정 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 F# 트랙을 개념 18개연습 문제 148개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.