갈루아의 반서재

실행준비


아나콘다 가상환경설정 + 자바 설치 + Leiningen 설치 + 새 프로젝트 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
~# su - fukaerii
~$ conda create --name marie python=3
~$ . activate marie
(marie) ~$ sudo apt-get update
[sudo] password for fukaerii:
(marie) ~$ sudo apt-get install git
(marie) ~$ pwd
/home/fukaerii
(marie) ~$ java -version
openjdk version "10.0.1" 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)
(marie) ~$ lein -version
Leiningen 2.8.1 on Java 10.0.1 OpenJDK 64-Bit Server VM
(marie) ~$ lein new wonderland
Generating a project called wonderland based on the 'default' template.
The default template is intended for library projects, not applications.
To see other templates (app, plugin, etc), try `lein help new`.
cs

새로 만든 프로젝트로 진입

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(marie) ~$ cd wonderland
(marie) ~/wonderland$ lein repl
nREPL server started on port 45901 on host 127.0.0.1 - nrepl://127.0.0.1:45901
REPL-0.3.7, nREPL 0.2.12
Clojure 1.8.0
OpenJDK 64-Bit Server VM 10.0.1+10-Ubuntu-3ubuntu1
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+or (exit) or (quit)
 Results: Stored in vars *1*2*3, an exception in *e
 
user=>
 
cs


클로저 식의 기본 구조 이해하기 (단순값)


클로저 코드는 식으로 구성되며, 그 식이 평가된 결과가 반환된다. 이들 중 자기 자신으로 평가되는 식을 단순값(simple value) 또는 리터럴(literal)이라고 부른다.

분수는 평가될 때 실수로 변환되지 않는다. 이로써 잘림 현상을 방지할 수 있다. 분수의 분모와 분자에는 정수만 올 수 있다. 약분이 가능한 경우 다음과 같이 약분된다.

1
2
3
4
5
6
7
8
9
user=> 1/3
1/3
user=> 4/2
2
user=> 4.0/2
 
NumberFormatException Invalid number: 4.0/2
clojure.lang.LispReader.readNumber (LispReader.java:330)
user=>
 
cs

산술연산을 할려면 괄호로 둘러싼 식이 필요하다. 클로저에서는 함수나 연산자가 먼저 오고, 필요한 인수들이 뒤에 온다. 아래의 나누기 예제에서 인수 중 하나가 실수인 경우에는 실수로 반환된다.

1
2
3
4
5
6
7
8
 
user=> (/ 1 3.0)
0.3333333333333333
 
user=> (/ 1 3)
1/3
user=>
 
cs

클로저의 문자열은 큰따옴표로 둘러싸서 만든다. 키워드는 콜론(:) 으로 시작하는 식별자이다. 

1
2
3
4
5
6
7
 
user=> "zoo"
"zoo"
user=> :zoo
:zoo
user=>
 
cs

문자 하나만 표현하기 위해서는 \j 와 같이 사용한다. 이 경우 "j"와 같이 문자열로 표현하는 것에 비해 부하가 줄어드는 장점이 있다.

1
2
3
4
5
6
 
 
user=> \j
\j
user=>
 
cs

불린값 True 와 False 

1
2
3
4
5
6
7
 
user=> true
true
user=> false
false
user=>
 
cs

nil 은 클로저에서 값이 없음을 표현한다. 

1
2
3
4
5
6
 
user=> nil
nil
user=>
 
 
cs