layout | title | permalink |
---|---|---|
default |
Simple Values |
/outline/simple_values.html |
{::options parse_block_html="true" /}
{% comment %}
http://clojurebridge.github.io/curriculum/outline/simple_values.html
{% endcomment %}
-
Strings
-
Booleans 과 nil
-
Keywords
-
Numbers
- Arithmetic
-
Assignment:
def
프로그래밍언어에서 무언가를 하기 위해서는 값이 필요합니다. 클로저에서는 simple value로 number, boolean, nil, keyworld를 제공합니다. {: ng-show="block71" .description}
string은 무엇일까요? string은 문자열입니다. string을 만들기 위해서는 이중 따옴표(
"
)로 문장을 감싸야 합니다. 다음 예제를 봅시다. 역슬래시는 문자열 안에서 이중 따옴표 기호를 포함하고 싶을 때 사용합니다. {: ng-show="block21" .description}
참조: String {: ng-show="block21" .description}
"Hello, World!"
"This is a longer string that I wrote for purposes of an example."
"Aubrey said, \"I think we should go to the Orange Julius.\""
boolean은 참값 혹은 거짓값을 가지며 단순하게
true
false
를 입력하면 됩니다. 프로그래밍에선 종종 "이번 학기에 이 수업이 열리나요?"나 "오늘이 생일이니 ?"와 같이 참 혹은 거짓을 물어볼 때가 있습니다. 이때 우리는 boolean값을 반환받게 됩니다. {: ng-show="block31" .description}
또다른 값으로는
nil
이 있는데, 이것은 논리적 참(truthiness)이라는 의미에서는 boolean의 false 값 처럼 사용됩니다. 하지만nil
은 원래 값이 없음을 의미하고, 엄밀한 의미에서 boolean은 아닙니다. {: ng-show="block31" .description}
참조: Truthiness {: ng-show="block31" .description}
true
false
nil
keyworld는 기본적인 타입들 중 가장 이상한 타입입니다. 몇몇 컴퓨터 언어에서도 이와 비슷한 것이 있습니다. 하지만 number, string, boolean 타입처럼 이해하기 쉬운 것은 아닙니다. keyworld는 레이블처럼 사용되는 일종의 특별한 문자열이라고 생각하면 됩니다. keyworld는 maps(자료구조;다음에 배울예정)의 key-value pair에서 키값으로 주로 사용됩니다. {: ng-show="block41" .description}
:trinity
:first
:last
클로저는 여러 종류의 숫자 타입을 가집니다. {: ng-show="block81" .description}
첫번째는 정수 타입입니다. 정수는 0을 포함한 양수, 음수로 구성되어 있으며 평상시에 쓰는 것처럼 사용하면 됩니다. {: ng-show="block81" .description}
0
12
-42
다음으로는 float라고도 불리는 소수가 있습니다. 여기에는 소숫점이 있는 모든 수가 포함됩니다. {: ng-show="block91" .description}
0.0000072725
10.5
-99.9
마지막으로 ratio라고도 불리는 분수 데이터 형식이 있습니다. 컴퓨터는 모든 소수를 완벽하 게 표현하지 못하지만 분수는 가능합니다. 분수는 다음과 같이 슬래시를 이용해서 표현합니다: {: ng-show="block101" .description}
실제 수학에서와 마찬가지로 분수의 분모는 절대 0이 될 수 없음을 주의하세요. {: ng-show="block101" .description}
1/2
-7/3
우리는 수들을 더하고,ㅠ빼고, 곱하고 나누는 것이 가능합니다. 클로저에서는 이 러한 연산이 실제 우리가 종이에 쓰는 방식과는 조금 차이가 있습니다. 다음 예 제를 봅시다:
{: ng-show="block111" .description}
(+ 1 1) ;=> 1 + 1 = 2
(- 12 4) ;=> 12 - 4 = 8
(* 13 2) ;=> 13 * 2 = 26
(/ 27 9) ;=> 27 / 9 = 3
클로저에서는
+
,-
,*
,/
가 피연산자들 앞에 위치합니다. 이런 것을 _pre fix(전위) 표기법_이라고 합니다. 우리가 주로 보는, 두 피연산자 사이에 연산자가 위 치하는 것은 _infix(중위) 표기법_이라고 합니다. {: ng-show="block121" .description}
JavaScript같은 언어는 infix표기법을 사용합니다. Clojure에선 prefix표기법만을 사용합니다. Prefix 표기법은 많은 이유에서 유용합니다. 다음 예제는 infix 표현과 그와 동 일한 prefix 표현을 보여줍니다: {: ng-show="block122" .description}
Infix: 1 + 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9
Prefix: (+ (- (+ (+ 1 (/ (* 2 3) 4)) 5) (/ (* 6 7) 8)) 9)
명확하게 보이지는 않지만, prefix버전에서 더 이상 연산자의 우선순위를 생각할 필요가 없다는 것에 주목하세요. 모든 표현식이, 피연산자 앞에 연산자를 가지며, 전체 표현식이 괄호 안 에 싸여있기 때문에 우선순위가 모두 명시적입니다. {: ng-show="block131" .description}
Infix: 1 + 2 / 3
Prefix: (+ 1 (/ 2 3))
prefix 표기법이 더 좋은 다른 이유는 긴 표현을 덜 반복적으로 만들 수 있 다는 것입니다. 만약 다수의 피연산자에 대해 동일한 연산을 하려할 때 prefix 표기법에서는 연 산자들을 반복해서 쓸 필요가 없습니다. {: ng-show="block132" .description}
Infix: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
Prefix: (+ 1 2 3 4 5 6 7 8 9)
지금까지 정수에 대해서만 산술 연산을 해보았습니다. 하지만, 이러한 연산자들을 소수와 분수에 대해서 사용할 수도 있습니다. 다음 예를 봅시다: {: ng-show="block141" .description}
(+ 4/3 7/8) ;=> 53/24
(- 9 4.2 1/2) ;=> 4.3
(/ 27/2 1.5) ;=> 9.0
만약 같은 값을 반복해서 입력해야 한다면 프로그램을 작성하는 것이 매우 어려울 것입니다. 그렇기 때문에 값에 대한 이름이 필요하고, 우리가 기억할 수 있는 방식으로 그것들을 참조할 수 있습니다. 이것을 할당한다라고 합니다. {: ng-show="block161" .description}
def
를 사용해서 값에 이름을 붙일 수 있습니다. 값에 붙여지는 이름을 symbol이라고 합니다. {: ng-show="block171" .description}
참조: Assignment def {: ng-show="block171" .description}
(def mangoes 3)
(def oranges 5)
(+ mangoes oranges)
;=> 8
symbol에는 단순한 값 이상을 할당할 수 있습니다. 다음을 봅시다. 다음 줄에서는 값을 참조하는데, 어떻게 symbol을 사용하는지를 보여주고있습니다. {: ng-show="block181" .description}
(def fruit (+ mangoes oranges))
(def average-fruit-amount (/ fruit 2))
average-fruit-amount
;=> 4
- 오늘 워크샵에 도착한 이후로 몇 분이나 지났나요?
- 이 값을 분에서 초로 변환하세요.
- 1000초를 분과 초로 변환하세요.
- 분과 초는 별도의 숫자가 됩니다.
(quot x y)
는 y로 나눈 x의 몫을 구해줍니다.(rem x y)
는 y로 나눈 x의 나머지를 구해줍니다.
{% comment %}
🌟 다음 링크는 슬라이드만 있습니다. 대신 README.md로 가세요.:star2:
{% endcomment %}