Lambda 함수
함수가 defun으로 정의될 때 , 그 함수명과 주소는 프로그램 안에서 다음의 호출을 대비하여 상징 테이블 (symboric table)에 저장된다. 그러나 때로는 프로그램 안에서 어떤 함수가 오직 한번만 쓰여지는 경우가 많다. 이것은 첫번째 인수로 부함수를 취하는 mapcar에서 자주 사용되어 지는 것을 볼 수 있는데 , LISP는 이것을 위하여 이름없는 혹은 무기명 함수의 사용을 가능하게 하는 기능을 제공하고 있다. 그러한 함수들이 lambda 함수인데 , 그 함수의 일반 형식은 다음과 같다.
(lambda (arguments) <function-body>)
예를 들어서 보자 .
세제곱(3승) 값을 계싼하기 위해 lambda 함수를 이용하는 예를 들어 보자.
이것은 mapcar 함수와 숫자들의 리스트에 lambda 3승 함수를 적용하여 수행할 수 있다.
다른 함수에 의해서 또 다른 함수가 호출될 때 문자 #를 함수 앞에 붙여준다
하나의 수의 3승을 구하는 lambda 함수는 ( lambda (x) (* x x x)) 이다.
숫자 리스트(1 2 3 4)의 3승 값들을 구하기 위해서는 다음과 같이 mapcar 함수와 함께 작성하여 수행할 수 있다.
(defun cube-list(lst)
(mapcar #’(lambda (x) (* x x x)) lst))
(cube-list( 1 2 3 4))
è 1 8 27 64
3가지 예를 더 들어 보겠다.
(funcall #’(lambda (x) (* x x)) 4) à 16
(apply #’(lambda (x y) (+(* x x ) y )) ‘(2 3)) à 7
(funcall #’(lambda (x) (append x x)) ‘(a b c)) à (A B C A B C)
'학부공부 > 인공지능' 카테고리의 다른 글
Jess 기초 실습 (0) | 2018.11.23 |
---|---|
Jess_Download + eclipse plugins (0) | 2018.11.20 |
LISP의 대응함수 ( Mapping Functions) (0) | 2018.10.12 |
LISP의 배열(Arrays) (0) | 2018.10.12 |
LISP의 특성리스트(Property Lists) (0) | 2018.10.12 |
#IT #먹방 #전자기기 #일상
#개발 #일상