리스펙스의 SICP 언어 프로파일로 Scheme 연습 문제를 실행하며 SICP를 공부할 수 있습니다. 수를 제곱하는 파일부터 실행하고, 이어서 쓸 학습 사이트와 CLI와 JavaScript API를 골라보세요.
SICP는 Scheme으로 계산의 원리를 가르치는 책인 『컴퓨터 프로그램의 구조와 해석』입니다. 리스펙스는 이 학습에 쓰이는 Scheme 기능을 별도의 언어 프로파일로 제공합니다. 언어 프로파일은 지원하는 언어 기능에 이름을 붙인 묶음입니다.
첫 예제 실행하기
첫 프로그램을 따라 리스펙스를 설치하세요.
다음 프로그램 전체를 exercise.scm으로 저장하세요.
(define (square x) (* x x))
(square 12)파일을 저장한 디렉터리에서 실행하세요.
lispex sicp run exercise.scm출력은 다음과 같습니다.
144종료 코드는 0이며 파일은 생성하지 않습니다.
프로시저 square는 받은 수를 자기 자신과 곱하므로 (square 12)의 결과는 144입니다.
CLI는 프로그램의 출력과 마지막 값을 표시합니다.
POSIX 셸에서는 같은 파일을 표준 입력으로 전달할 수도 있습니다.
cat exercise.scm | lispex sicp run -이 명령도 144를 출력하고 종료 코드 0으로 끝나며 파일은 생성하지 않습니다.
언어 프로파일에 맞는 명령 고르기
SICP와 일반 코어 프로파일은 별도의 런타임 제품입니다. 프로파일은 명령으로 고릅니다. 파일 확장자만으로 프로파일이 바뀌지는 않습니다.
| 구분 | 일반 리스펙스 코어 | 리스펙스 SICP |
|---|---|---|
| 파일 | square.lspx | exercise.scm |
| 명령 | lispex run square.lspx | lispex sicp run exercise.scm |
| 용도 | 일반 리스펙스 프로그램 | SICP 학습과 연습 문제 |
| 플레이그라운드 | 기본 프로파일 | ?profile=sicp |
| 런타임 | 리스펙스 코어 엔진 | 네이티브에 내장된 Rust 프로파일, npm과 JavaScript에서는 @lispex/sicp WASM |
코어 명령도 실행해 보려면 위 프로그램을 square.lspx로 저장하세요.
이 명령도 144를 출력하고 종료 코드 0으로 끝나며 파일은 생성하지 않습니다.
lispex run exercise.scm을 실행하면 다음 오류가 나오고 종료 코드 2로 끝납니다.
lispex run: .scm requires `lispex sicp run <file.scm>`SICP 실행에 실패하면 선택한 엔진에서 멈춥니다.
다른 엔진으로 다시 실행하지 않습니다.
npm CLI lispex는 SICP 실행에 별도 패키지인 @lispex/sicp@1.0.0을 사용합니다.
학습 환경 고르기
- sicp.io는 장별 수업과 편집할 수 있는 예제와 실행 결과와 지원 주제 안내를 제공합니다. 영어, 한국어, 러시아어 과정을 선택할 수 있습니다.
- SICP 플레이그라운드에서는 브라우저로 예제를 실행할 수 있습니다.
주소의
profile=sicp가 SICP를 선택합니다. 일반 플레이그라운드는 코어 프로파일을 사용합니다. - CLI는
exercise.scm같은 로컬 파일을 실행합니다. - JavaScript API는 앱에서 쓸 실행 결과와 실행 추적을 돌려줍니다. 실행 추적은 평가 단계를 기록한 자료입니다.
JavaScript API 사용하기
API를 직접 쓰려면 Node.js 18 이상을 사용하는 프로젝트에 패키지를 설치하세요.
npm install @lispex/sicp@1.0.0npm은 node_modules/@lispex/sicp에 1.0.0 버전을 설치하고 프로젝트의 패키지 파일에 의존성을 기록합니다.
설치에 성공하면 종료 코드는 0입니다.
npm의 요약 출력은 프로젝트에 따라 다릅니다.
같은 프로젝트에 다음 파일을 square.cjs로 저장하세요.
const { run } = require('@lispex/sicp');
const result = run('(define (square x) (* x x)) (square 12)');
console.log(result.value_display);파일을 실행하세요.
node square.cjs144를 출력하고 종료 코드 0으로 끝나며 파일은 생성하지 않습니다.
value_display는 화면에 표시할 결과 문자열입니다.
observation 필드에는 실행 결과가 sicp-observation/v1 형식으로 들어 있습니다.
trace 필드에는 실행 단계가 lispex-trace/v1 형식으로 들어 있습니다.
브라우저 앱이 npm 패키지를 불러오고 WASM 파일을 제공하도록 설정되어 있다면 다음 진입점을 쓰세요.
const { createSicpRuntime } = await import('@lispex/sicp/browser');
const runtime = await createSicpRuntime();
const result = runtime.run('(define (square x) (* x x)) (square 12)');
console.log(result.value_display);브라우저 콘솔에 144가 표시됩니다.
실행 한도와 기록 이해하기
WASM 모듈에는 외부 import가 없습니다. 선택한 엔진을 불러온 뒤 메모리에서 실행합니다. 앱 운영자가 프로세스와 네트워크 격리를 설정합니다.
| 자원 | 한도 |
|---|---|
| UTF-8 소스 | 1 MiB |
| 실행 추적 | 이벤트 1,024개와 1 MiB |
| 논리 힙 메모리, 실행 작업량, 출력 | 런타임의 고정 한도 |
API는 학습용 프로그램을 실행하는 동안 일어난 일을 기록합니다. 리스펙스 바우치는 게시자 인증과 수신자 신뢰 정책 적용과 현재 재실행과 로컬 수용 검사를 제공합니다. 외부 행동을 할지는 호출 애플리케이션이 결정합니다.
호환성을 자세히 살펴보려면 공개 비교 자료를 읽으세요. 배포 WASM과 버전이 정해진 예제 26개를 식별하며, 기록된 한도로 실행한 결과를 담습니다. 외부 Scheme 구현 네 개의 식별 정보와 측정 결과와 불일치와 제외 항목도 담습니다. SICP 교재 본문과 비교 예제 소스에는 별도의 라이선스가 적용됩니다. 이 자료는 런타임 패키지와 따로 배포합니다.