첫 번째 프로젝트: 생각의 건축

이제 이론을 넘어, 당신의 첫 번째 리스펙스 프로젝트를 만들어봅니다. 작은 아이디어가 어떻게 코드로 구체화되고 생명을 얻는지 직접 경험해보세요. 모든 창조는 첫 줄의 코드에서 시작됩니다.

리나 코드 변환기를 활용한 첫 리스펙스 프로젝트에 오신 것을 환영합니다! 시작하기 가이드에서 웹 변환기로 리스펙스를 타깃 언어로 변환하고 해당 언어의 실행기로 실행하는 흐름을 배웠습니다. 이제 데이터를 처리하고 서식 있는 보고서를 출력하는 작지만 완전한 프로그램을 만들어 보겠습니다.

목표

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

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

이 과정을 통해 데이터 구조를 정의하고, 헬퍼(helper) 함수를 만들고, iostring과 같은 표준 라이브러리 모듈과 함께 강력한 내장 함수를 사용하는 방법을 배우게 될 것입니다.

1단계: 리나 코드 열기(로컬 파일 생성 없음)

https://www.lenacode.com 을 열면 새 리스펙스 파일이 자동으로 LENA_001.lspx로 생성됩니다. 아래 코드를 좌측(Input) 편집기에 붙여넣습니다.

2단계: 데이터 정의하기

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

;; LENA_001.lspx (리나 코드에서 자동 이름)

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

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

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

;; (같은 LENA_001.lspx 파일에 이어서 작성)

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

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

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

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

;; 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 함수를 보고서의 각 줄에 적용하여 사용하겠습니다.

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

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

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

6단계: 변환하고 타깃에서 실행하기

리나 코드에서 Output 언어를 선택하고 Transform을 클릭합니다. 생성된 코드를 복사해 해당 언어의 도구로 실행합니다. 예:

  • Python: report.py로 저장 후 python report.py
  • Node.js(TypeScript): report.ts로 저장 후 tsx report.ts (또는 JS로 변환 후 node report.js)

예상 출력:

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

결론

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

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

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