728x90
1. Applicative Operators(연산자)
🟡 #’ (또는 ‘‘sharp quote’’)은 리슾안의 함수를 인용하는 적절한 방법이다.
* the correct way to quote a function in Common Lisp.
* 함수만 되고 Symbol은 안됨
1) FUNCALL: 일부 입력에 대한 함수를 호출한다.
(funcall #'cons 'a 'b) -> (a . b)
2) MAPCAR: 각 요소마다의 함수값을 리스트의 형태로 출력한다 (인풋값을 여러개 하고싶을 때 사용)
(mapcar #'함수이름 인풋리스트)
(defvar *words*
'((one uno) (two deux) (three trois) (four quatre)))
(mapcar #'first *words*)
(defun translate (x)
(second (assoc x *words*)))
3) LAMBDA: 함수 이름 없이 사용 가능
(lambda (n) (* n n))
4) FIND-IF: 조건에 만족하는 첫번째 원소를 찾으면 true를 return 하고 종료
(find-if #'(lambda (x) (> x 3)) '(2 4 6 7 8 9))
//find-if로 assoc 구현하기
(defun my-assoc (key table)
(find-if #'(lambda (entry) (equal key (first entry))) table))
5) REMOVE-IF : 조건에 만족하는 원소를 삭제
(remove-if #’numberp ‘(2 for 1 sale))
-> (FOR SALE)
(remove-if #'(lambda (x) (not (plusp x))) '(2 0 -4 6 -8))
-> (2 6)
* plusp : 양수임을 확인
6) REMOVE-IF-NOT : REMOVE-IF의 반대
7) REDUCE: 리스트의 여러 요소들을 연산하여 하나의 결과로 만듬
(reduce #'+ '(1 2 3)) -> 6
(reduce #'append '((one uno) (two deux) (three trois))) -> (ONE UNO TWO DEUX THREE TROIS)
8) EVERY : 모든 원소에 대해 t면 t출력 아니면 f
(every #'numberp ‘(1 2 3)) -> T
9) Trace: 함수의 과정을 출력할 수있다. 안보려면 untrace
728x90
'Major > Lisp' 카테고리의 다른 글
[Lisp] Ch 9 - Input/Output (0) | 2021.06.01 |
---|---|
[Lisp] CH 8 - Recursion(재귀) (0) | 2021.06.01 |
[Lisp] Ch 6 - 리스트 자료구조 (List Data Structures) (0) | 2021.04.21 |
[Lisp] Ch 11 - 반복문과 블록구조 (Iteration and Block Structure) (0) | 2021.04.15 |
[Lisp] Ch 5 - Variables and Side Effects (0) | 2021.04.13 |