googleAdsense_widever


Scheme 기본 정리 LISP

(even? A)
A가 짝수이면 #t, 아니면 #f를 내어놓는다.

(odd? A)
홀수에 대해 검사한다.

(sqrt A) 
computes (A)1/2

(expt A B) 
computes AB

(remainder A B) 
computes the remainder of the integer division A/B

(modulo A B)
remainder와 동일

(log A) 
computes the natural logarithm of A

(sin A) 
computes the sine of A radians

(display A)
A를 결과로 내어놓는다. 문자라면 "A"로 입력해야 한다.

(list 1 2 3)
(1 2 3)이라는 리스트(List)만든다. '(1 2 3)으로 입력해도 된다.

(apply A B)
B리스트에 A라는 operation을 적용한다.
(apply + (list 1 2 3))의 경우 결과를 (+ 1 2 3)으로, 6이 된다.

(length A)
A리스트의 길이를 리턴한다. (length '(1 3 6 7))의 경우 4를 리턴한다.

(car '(1 2 3 4 5))
> 1

(cdr '(1 2 3 4 5))
> (2 3 4 5)

(cadr '(1 2 3 4 5))
> 2

(cddr '(1 2 3 4 5))
> (3 4 5)

(cons A B)
A, B 두 값으로 페어(pair)를 만든다.
> (A . B)
간단히 '(A . A)로 쓸 수 잇다.
> (A . B)
car와 cdr 역시 페어에도 적용된다.
(car '(A . B))
> A
(cdr '(A . B))
> B

(reverse (list a b c))
> (c b a)
리스트의 원자들의 순서를 반대로 바꾼다.

리스트와 페어의 관계
(1 2 3 4) <=> (1 . (2 3 4)) <=> (1 . (2 . (3 . 4)))
(2)<=> (2 . ()) 
()는 빈 리스트를 의미한다.

(boolean? A)
A가 불 값(boolean)인지 확인한다. #t 혹은 #f의 경우 #t를 반환하고,
그렇지 않은 경우 #f를 반환한다.

(integer? A)
정수인지 확인한다. 결과는 역시 불 값으로 반환한다.

(rational? A)
유리수인지 확인한다.

(real? A)
실수인지 확인한다.
(real? 1.5)
> #t

(complex? A)
복소수인지 확인한다.
(complex? 2+3i)
> #t

#b~, #o~, #x~
각각 2진수, 8진수, 16진수를 나타낼때 숫자 앞에 붙는다.
#b1010
> 10
#o17
>15
#x1E
>30

#\~
문자 앞에 붙는다.

(string A B)
문자 A, B를 합쳐서 문자열을 만든다.
(string #\a #\b)
> "ab"

(string-append "A" "B" "C")
문자열 "A", "B", "C"를 합친다.
(string-append "문자열을" " " "합친다" ".")
> "문자열을 합친다."

(string-ref "A" b)
"A'문자열에서 (b+1)번째의 문자를 리턴한다.
(string-ref "문자열" 1)
> #\자

(quote ABC)
ABC를 심볼(symbol)로 만든다.
(quote Man)
> Man
'Man
>Man

(eval (quote ABC))
심볼을 변수나 함수로 해석한다.

예)
(define a 1)
a
> 1
'a
> a
(eval 'a)
> 1
('+ 1 2)
>(+ 1 2)
(eval '(+ 1 2))
> 3
(eval 'Man)
>reference to undefined identifier: Man

(number->string 16)
> "16"
수를 문자열로 자료형을 변환한다.

(string->number "16")
> 16
문자를 숫자로 자료형을 변환한다.

(char->integer #\a)
> 97
문자를 정수로 자료형을 변환.

(integer->char 104)
> #\h
정수를 문자로 자료형을 변환.

(string->list "abcd")
>(#\a #\b #\c #\d)
문자열을 리스트로 자료형을 변환.

(list->string (list #\a #\b #\c #\d))
> "abcd"
리스트를 문자열로 자료형을 변환.

(symbol->string 'human)
> "human"

(string->symbol "excalibur")
> excalibur

(map A B)
B리스트의 원소들 각각에 A함수를 적용시킨다.
(define (inc x) (+ x 1))
(map inc (list 1 2 3))
> (2 3 4)
람다함수를 적용하면 다음과 같다.
(map (lambda (x) (+ x 1)) (list 1 2 3))
> (2 3 4)

람다함수의 사용
(lambda <formal-parameters> <body>)
(define (add x y) (+ x y)) <=> (define add (x y) (+ x y))

(let

(let*

(greeting

(fluid-let

(if (조건) (#t일때 리턴값) (#f일때 리턴값))

(cond ((조건1) (처리1)) ((조건2) (처리2)) (else (처리3)))

(case 변수 ((조건1) (처리1)) ((조건2) (처리2) (else (처리3)))
변수가 조건1과 같다면 처리1을 내보내고, 조건2와 같다면 처리2를 내보내고
나머지의 경우라면 처리 3을 내보낸다.

(set! (변수이름) (변화내용))
변수의 값을 바꾼다.
(define state 1)
state
> 1
(set! state (+ state 1))
state
> 2
(define (inc!) (state (+ state 1)))
(inc!)
state
> 3
(inc!)
state
> 4

(newline)
줄을 바꿔준다.

(begin (명령1) (명령2) (명령3))
명령1, 명령2, 명령3의 순서대로 샐행을 한다.
define으로 함수를 정의할 때는 begin을 따로 쓸 필요가 없다.




(char=? #\a #\b)
#\a와 #\b가 같은 글자라면 #t를, 다른 글자라면 #f를 리턴한다.




define은 변수를 정의하는 키워드(Keyword)이다.
(+ a b c) 나 (- a b c) 들 처럼 함수(Function)가 아니다.

덧글

댓글 입력 영역


공지

어서오십시오.
트위터 : @FCliver
기저심리학 : 네이버카페
카카오톡 : FCliver
페이스북 : Fredric Cliver

통계 위젯 (화이트)

714
96
288608

접속자 위치