트랙
/
Gleam
Gleam
/
연습 문제
/
보물 상자
보물 상자

보물 상자

학습 연습 문제

소개

제네릭

어떤 타입이 _타입 매개변수_를 사용해 모든 타입의 값을 담을 수 있으면, 그 타입은 _제네릭 타입_이에요.

예를 들어 이 Box 타입에는 타입 매개변수 a가 있어요(소문자로 써요).

pub type Box(a) {
  Box(a)
}

a 타입 매개변수는 어떤 타입이든 대신하는 자리 표시자라서, Box는 문자열, 정수 또는 그 밖의 다른 어떤 타입과도 함께 쓸 수 있어요.

Box("Hello, Joe!") // The type is Box(String)

Box(42) // The type is Box(Int)

타입 매개변수는 쉼표로 구분해서 여러 개를 둘 수 있어요.

pub type Pair(a, b) {
  Pair(a, b)
}

제네릭 함수

타입 매개변수는 함수의 인자에도 쓸 수 있어요.

이 함수는 타입 a의 값을 받아서, a를 받고 b를 반환하는 함수를 두 번 호출해요.

pub fn twice(value: a, f: fn(a) -> b) -> b {
  f(value)
  f(value)
}
// The type is fn(String, fn(String) -> Nil) -> Nil
twice("Hello, Joe!", io.println)

지침

이번 연습 문제에서는 보물을 담아 둘 제네릭(그리고 마법 같은!) TreasureChest를 작성해 봐요.

1. TreasureChest 제네릭 사용자 정의 타입을 정의해요

variant가 하나뿐인 TreasureChest 사용자 정의 타입을 정의해요.

이 variant에는 연관된 String 값이 있어야 하는데, 이 값은 보물 상자의 비밀번호를 저장하는 데 써요.

또한 이 variant에는 연관된 제네릭 값도 있어야 하는데, 이 값은 보물을 저장하는 데 써요. 보물이 무엇이든 될 수 있도록 이 값은 제네릭이에요.

2. UnlockResult 타입을 정의해요

variant가 두 개인 UnlockResult 사용자 정의 타입을 정의해요.

첫 번째 variant는 Unlocked이고, 보물을 저장하는 데 쓸 제네릭 값을 담아야 해요.

두 번째 variant는 WrongPassword이고, 아무 값도 담지 않아요.

3. get_treasure 함수를 정의해요

이 함수는 매개변수 두 개를 받아요.

  • TreasureChest 제네릭 사용자 정의 타입
  • String (비밀번호를 시도해 볼 때 써요)

이 함수는 주어진 비밀번호 시도가 TreasureChest 안의 String과 일치하는지 확인해요.

함수는 UnlockResult를 반환해요.

비밀번호가 일치하면 TreasureChest의 제네릭 값(바로 보물이에요!)과 함께 Unlocked를 반환해요.

비밀번호가 일치하지 않으면 WrongPassword를 반환해요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Gleam Exercism

보물 상자 문제를 시작해 볼 준비가 됐나요?

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