Symbols
리스프의 심볼은 문자, 숫자, + - / * = < > ? ! _ 와 같은 특수문자로 구성된다. 예를 들면 다음과 같다.
foo, ice9, my-killer-app27, and even --<<==>>--
리스프의 심볼은 대소문자를 구별하지 않는다(case-insensitive). 하지만 대부분의 리스퍼들은 대문자를 사용하지 않는다. 이는 다음과 같이 2개의 심볼을 비교해보면 알 수 있는데, 리스프는 아래의 2개의 심볼을 동일한 것으로 취급한다.
1 2 | [1]> (eq 'fooo 'FoOo) T | cs |
Numbers
리스프는 실수와 정수를 모두 지원한다. 소수점 여부에 따라 정수 또는 실수로 구분된다. 리스프에서 1 과 1.0 은 서로 다른 2개의 개체인 셈이다. 그리고 다음과 같이 1 과 1.0을 더하는 경우, 실수 값인 2.0 이 반환된다.
1 2 | [4]> (+ 1 1.0) 2.0 | cs |
리스프는 다른 언어와 비교했을 때 수 연산시 엄청난 성능을 자랑한다. 다음과 같이 53의 거듭제곱과 같은 계산도 가뿐히 해낸다. 다른 대부분의 언어는 이러하지 못하다.
1 2 3 4 | [7]> (expt 53 53) 24356848165022712132477606520104725518533453128685640844505130879576720609150223301256150373 [8]> (expt 192 192) 2476486193293164125787745262478297346299367120882418788519697384011854444455693429319543570317553024843651212566870339398434758192027055407198387102792920985074213664800126416720074251744141396658131918381148680914792667741962725129454745230380481670711688264792173203485436021198757597793202135233690938297260139838882815721770850966567328664894227411633915827486305380406234981611018043684636753387445092421946989909670710965095771406336 | cs |
그리고 4를 6으로 나누는 경우, 0.66666 을 반환할거라고 흔히 생각하지만 2/3 와 같은 형태로 반환한다는 것도 리스프의 특이한 점이다.
1 2 | [11]> (/ 4 6) 2/3 | cs |
하지만 실수가 개입되면 다음과 같이 다른 결과값을 보여주게 된다.
1 2 | [13]> (/ 4.0 6) 0.6666667 | cs |
Strings
리스프에서 문자열을 나타내기 위해서는 큰 따옴표로 싸야 합니다. 아래에서 보듯이 "Tutti Frutti" 는 유효한 문자열이다.
1 2 3 | [14]> (princ "Tutti Frutti") Tutti Frutti "Tutti Frutti" | cs |
REPL 에서 결과가 2번 반복되는 것을 볼 수 있는데, 위의 것은 princ 명령에 의한 것이다. REPL 은 항상 입력된 표현식의 평가 결과를 반환하기 때문에 아래에서 한 번 더 반복된 결과를 보여주는 것을 볼 수 있다. 그리고 아래에서 큰 따옴표 앞에 백슬래시를 두면 이어지는 따옴표는 문자열을 나타내는 따옴표가 아니라 문자열 상수를 의미한다.
1 2 3 | [17]> (princ "He yelled \"Stop that thief!\" from the busy street.") He yelled "Stop that thief!" from the busy street. "He yelled \"Stop that thief!\" from the busy street." | cs |
'프로그래밍 Programming' 카테고리의 다른 글
Getting Started with CLISP (8) - 콘셀(Cons Cells) (0) | 2017.09.16 |
---|---|
Getting Started with CLISP (7) - 리스프는 코드와 데이터를 어떻게 구분하는가 How Lisp Distinguishes Between Code and Data (0) | 2017.09.15 |
Getting Started with CLISP (5) - 로컬 함수 정의하기 Defining Local Functions in Lisp (0) | 2017.09.08 |
Getting Started with CLISP (4) - 전역함수 정의학기 (2) (0) | 2017.09.08 |
Getting Started with CLISP (3) - 전역함수 정의하기 (1) (0) | 2017.09.07 |