첫 번째 프로젝트

이론을 넘어 첫 리스펙스 프로젝트를 만들어 봅니다. 작은 아이디어가 코드로 구체화되는 과정을 직접 경험해 보세요.

이전 문서입니다. 환불 규칙을 작성하고 실행하려면 현재 첫 결정 규칙 실습부터 시작하세요. 리스트 처리는 map, filter, fold, apply 사용하기에서 확인하세요.

첫 리스펙스 프로젝트에 오신 것을 환영합니다! 시작하기 가이드에서 레퍼런스 인터프리터로 코드를 실행했습니다. 이제 데이터를 처리하고 서식 있는 보고서를 출력하는 작지만 완전한 프로그램을 만들어 보겠습니다.

목표

우리가 작성할 프로그램은 다음과 같은 작업을 수행합니다.

  1. 이름과 우선순위를 가진 작업(task) 목록을 정의합니다.
  2. 이 목록을 필터링하여 우선순위가 높은 작업만 찾아냅니다.
  3. 우선순위가 높은 작업들을 읽기 쉬운 문자열로 서식을 지정합니다.
  4. 최종 보고서를 콘솔에 출력합니다.

이 과정을 통해 데이터 구조를 정의하고, 헬퍼 함수를 만들고, 결정론적 리스펙스 런타임의 내장 함수를 사용하는 방법을 배우게 됩니다.

1단계: 로컬 파일 만들기

task-report.lspx 파일을 만듭니다. 반복하며 실험할 때는 같은 조각을 플레이그라운드에 붙여넣어도 됩니다.

2단계: 데이터 정의하기

먼저, 작업 목록을 정의해 봅시다. 리스트의 리스트를 담을 tasks라는 이름의 변수를 사용할 것입니다. 각 내부 리스트는 작업 이름(문자열)과 우선순위(숫자가 높을수록 중요함)를 포함합니다.

LISPEX
;; task-report.lspx

;; 원본 데이터인 작업 목록을 정의합니다.
(define tasks
  (list (list "문서 작성하기" 2)
        (list "치명적인 버그 수정하기" 3)
        (list "코어 엔진 리팩토링하기" 3)
        (list "새로운 기능 추가하기" 1)
        (list "마케팅 캠페인 기획하기" 2)))

3단계: 헬퍼 함수 작성하기

프로그램의 로직을 작고 재사용 가능한 함수로 나누는 것은 좋은 습관입니다. 작업의 "우선순위가 높은지" (여기서는 우선순위 3 이상으로 정의) 확인하는 함수를 만들어 보겠습니다.

LISPEX
;; (같은 task-report.lspx 파일에 이어서 작성)

;; 작업의 우선순위가 3 이상이면 `#t`를 반환하는 헬퍼 함수입니다(≥ 3).
;; `(list-first (list-rest task))`는 리스트의 두 번째 요소를 가져오는, 
;; 리스프 계열 언어의 흔한 관용구입니다.
(define (is-high-priority? task)
  (>= (list-first (list-rest task)) 3))

4단계: 데이터를 처리하여 보고서 만들기

이제 핵심입니다! 내장 함수들을 연쇄적으로 사용하여 원본 tasks 데이터를 최종 보고서 문자열 목록으로 변환할 것입니다.

  • filter는 is-high-priority? 함수를 사용해 우선순위가 높은 작업만 포함하는 새 리스트를 만듭니다.
  • map은 필터링된 리스트를 받아 lambda 함수를 적용하여 각 작업을 str-concat으로 안전하게 연결된, 읽기 좋은 문자열로 변환합니다.
LISPEX
;; (아래에 이어서 작성)

;; 1. tasks 리스트를 필터링합니다.
(define high-priority-tasks (filter is-high-priority? tasks))

;; 2. 필터링된 리스트를 서식이 지정된 보고서 라인의 새 리스트로 매핑합니다.
(define report-lines
  (map (lambda (task)
         (string-append "긴급: " (list-first task)))
       high-priority-tasks))

5단계: 최종 보고서 출력하기

이제 report-lines 변수에는 우리가 표시하고 싶은 데이터가 들어있습니다. 이 데이터를 사용자에게 실제로 보여주려면 "I/O(입력/출력) 작업"을 수행해야 합니다. 앞에서 가져온 println 함수를 보고서의 각 줄에 적용하여 사용하겠습니다.

LISPEX
;; (001.lspx의 마지막 부분에 추가)

;; 3. 보고서의 각 라인을 콘솔에 출력합니다.
;; (task_report.lspx 파일에 이 코드를 추가하세요)

(println "--- 높은 우선순위 작업 보고서 ---")
(map println report-lines)
(println "---------------------------------")

6단계: 실행하기

CLI로 파일을 실행합니다.

BASH
lispex run task-report.lspx

예상 출력:

--- 높은 우선순위 작업 보고서 ---
긴급: 치명적인 버그 수정하기
긴급: 코어 엔진 리팩토링하기
---------------------------------

결론

축하합니다! 방금 유용한 작업을 수행하는 완전한 리스펙스 프로그램을 만들었습니다. 리스펙스 코드 구조화, 데이터/함수 정의, filter/map 패턴으로 데이터를 사용자 친화적 보고서로 변환하는 방법을 익혔습니다.

여기서부터는 프로그램을 직접 수정해 보세요.

  • is-high-priority? 함수에서 우선순위 기준값(임계값)을 변경해 보세요.
  • map에 전달된 lambda 함수에서 보고서 형식을 바꿔보세요.
  • 초기 tasks 리스트에 더 많은 작업을 추가해 보세요.