YongWook's Notes

<인공지능> LISP에 대해 알아보자 2 - LISP의 함수 上 본문

-software/AI

<인공지능> LISP에 대해 알아보자 2 - LISP의 함수 上

글로벌한량 2016. 3. 2. 19:08

LISP에서의 계산

LISP의 계산은 모두 함수적용에 의하여 이루어진다. operator가 앞에 오고 그 뒤에 operand 혹은 Argument가 오는 Prefix Notation으로 사용해야한다. 다음은 3+5의 계산과 (3+(5*6))의 계산이다.

 
> (+ 3 5)

> (+ 3 (* 5 6)


LISP의 함수들 - 上

  • SETQ : 심볼에 값을 저장(Binding)함.
    여기서 Q는 Quote이다. X가 계산되지 않고 Symbol로 처리될 수 있도록 한다. Quote는 `로 쓸 수 있다
     
    > (SETQ X 3);  X에 3을 저장한다.
    


  • +-*/ : 사칙연산 기호

  • LIST : 원소들을 모아서 새로운 리스트 구조를 생성해 내는 함수이다. `를 안붙이면 그 값을 계산해서 리스트에 넣는다.
     
    > (SETQ X 5);  X에 5를 저장함.
    
    > (LIST 'X X 'Y);  (X 5 Y)라는 리스트를 만듦. 
    


  • CAR : 리스트의 첫번째 원소를 가져온다.
     
    > (CAR '(X Y Z));   리스트 (X Y Z)의 첫 번째 원소인 X가 결과로 나옴.
    
    > (CAR ((X) Y Z);  리스트 ((X) Y Z)의 첫 번째 원소인 (X)가 결과로 나옴.
    


  • CDR : 리스트의 첫번째 원소를 제외한 나머지를 결과로 생성한다.
     
    > (CDR '(X Y Z));   리스트 (Y Z)가 결과로 나옴.
    
    ; CAR과 CDR을 혼합하여 사용할 수 있다. 
    
    > (CAR (CDR (CDR X)));  리스트 X에서 세번째 원소를 구하고 싶을때 쓸 수 있는데 이는 
    > (CADDR X);   이렇게 사용할 수  있다.
    


  • NTH : N번째 원소를 반환한다. 두번째 argument가 리스트가 아니면 에러
     
    > (NTH 4 '(0 1 2 3 4 5 6));  4를 반환한다. (숫자를 0부터 셈에 주의)
    > (NTH 3 '(A B);  NIL 반환. 
    


  • CONS : 기존의 리스트에 새로운 원소를 추가하여 리스트를 키워나갈 수 있는 함수이다. 새로 추가되는 원소는 리스트의 첫번째 원소가 된다.
     
    > (CONS 'A '(B C D));  결과로 (A B C D)를 생성함.
    


  • REVERSE : 주어진 리스트 안의 원소의 순서를 거꾸로 바꾼다.
     
    > (REVERSE '(A B C D));  결과로 (D C B A)가 생성됨.
    


  • APPEND : 주어진 여러개의 리스트들을 하나의 리스트로 만든다.
     
    > (APPEND '(A C) '(B D) '(E F));  결과로 (A C B D E F)가 생성됨.
    


  • LENGTH : 주어진 리스트 내의 원소 개수를 값으로 반환한다.
     
    > (LENGTH '(A B C)); 주어진 리스트의 원소의 개수는 A와 B와 C. 총 세 개이다.
    > (LENGTH '((A B C)); 주어진 리스트의 원소의 개수는 (A B C) 하나이다.
    


* 참고로 첨부한 예제의 세미콜론 ';'은 JAVA나 C++에서 주석처리를 위해 쓰는 //와 같은 쓰임새를 가진다. 그 줄의 문장이 끝났음을 알리는 도구이며 주석을 쓰지않는경우 생략해도 좋다.


Comments