YongWook's Notes

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

-software/AI

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

글로벌한량 2016. 3. 4. 20:48

이틀 전 작성했던 게시글에서 다뤘던 인공지능에서 쓰이는 아주 오래된 언어인 LISP. 그 함수에 대해서 계속해서 정리해보자.



LISP의 함수들 - 下

  • MEMBER : 주어진 리스트 내에 어떤 원소가 있는지 확인하는 함수이다. 만약 찾고자 하는 원소가 주어진 리스트 내에 존재하면 그 원소부터 리스트 끝까지가 결과 값으로 반환된다. 리스트 내에 찾고자 하는 원소가 없을 경우 NIL이 반환된다.
    > (SETQ CLUB '(TOM HARRY JOHN DANIEL))
    > (MEMBER 'HARRY CLUB)
       (HARRY JOHN DANIEL) ;  리스트  CLUB내의 원소 HARRY부터 그 리스트의 끝까지 반환됨
    


  • ASSOC : 리스트를 원소로 같는 리스트에서 원소 리스트의 첫번째 원소를 데이터베이스에서의 KEY처럼 사용하여 원하는 리스트를 찾을 수 있는 함수이다. 작은 데이터베이스 구축에 용이하게 쓸 수 있다.
    > (ASSOC 'TWO '((ONE 1)(TWO 2)(THREE 3)))
       (TWO 2) ; 첫번째 원소가 TWO인 리스트를 찾아내서 리턴함.
    

  • REMOVE : 첫 번째 인자를 두 번째 인자로 받는 리스트에서 찾아 모두 제거하는 함수이다.
    제거한 결과를 보여주기만 할 뿐, 그 결과값으로 리스트를 새로 저장하지는 않는다.
    > (SETQ MYLIST '(A B C D E F))
    > (REMOVE 'D MYLIST)
       (A B C E F) ;  D가 삭제되었다.
    > (SETQ MYLIST '(A D B C D E D F))
    > (REMOVE D MYLIST)
       (A B C E F) ;  D가 중복되어 여러개가 있어도 모두 삭제한다.
    

  • SUBST : 세 번째 인자에서 두 번째 인자를 찾아 첫 번째 인자로 대치한다.
    > (SUBST 'GOOD 'BAD '(I AM BAD))
      (I AM GOOD) ;  BAD가 GOOD으로 대치되었다.
    

  • GENSYM : 새로운 변수로 심볼(atomic symbol)을 하나 만든다. 인자 없이 사용되며 새로이 생성된 변수는 Gn의 이름을 갖는다. 이 때 n은 1부터 시작한다.
    > (GENSYM)
       G1
    > (GENSYM)
       G2
    

  • LISP의 Predicate 함수들 : T(true)나 NIL(false)를 반환하는 함수이다. LISP에서 Predicate가 NIL을 반환하면 거짓(false)로 인정하고 NIL이 아닌 다른 어떤 값을 반환하면 참(true)으로 인정한다. 함수 이름 뒤에 Predicate의 P를 붙인 것들이 많다.
    > (ATOM X) ;  X가 ATOM(심볼)일 때만 참(true)를 반환함.
    > (NULL X) ;  X가 NIL일 때만 참(true)을 반환함.
    > (NUMBERP X) ;  X가 숫자일 때만 참(true)을 반환함.
    > (ZEROP X) ;  X가 0일 때만 참(true)을 반환함. X가 숫자가 아니면 ERROR 발생.
    > (MINUSP X) ; X가 음수일 때만 참(true)을 반환함. X가 숫자가 아니면 ERROR 발생.
    > (EQUAL X Y) ;  X와 Y가 같으면 참(true)을 반환함.
    > (< X Y) ;  X < Y 이면 참(true)을 반환함.
    > (>= X Y) ;  X >= Y 이면 참(true)을 반환함.
    > (STRINGP X) ;  X가 STRING일 때만 참(true)을 반환함.
    > (STRINGP "A")
       T
    > (SETQ A "HI THERE")
    > (STRINGP A)
       T
    > (STRINGP #\A) ;  문자
       NIL
    > (STRINGP '(A B C)) ;  리스트
       NIL
    > (STRINGP 1.2) ;  숫자
       NIL
    > (STRINGP 'A) ;  심볼
       NIL
    > (STRINGP #(0 1 2)) ;  배열
       NIL
    > (STRINGP NIL)
       NIL
    

LISP의 조건문

  • IF
    > (IF (> X 3) (PRINT X)) ;  X값이 3보다 크면 X값을 프린트.
    > (IF (> X 3) (PRINT X) (+ X 5) ; X값이 3보다 크면 X값이 프린트되고
                                    ; 그렇지 않으면 X에 5를 더하게 됨.
    
  • COND
    > (COND (<제 1 조건문> <수행문1>)
            (<제 2 조건문> <수행문2>)
            (<제 3 조건문> <수행문3>)
    




Comments