갈루아의 반서재

728x90



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


728x90