lisp

· Major/Lisp
- 전에 있던 함수에서 컴퓨터가 더 똑똑하게 play하는 함수를 만든다. [Lisp] Tic-Tac-Toe 게임 실습(1) (tistory.com) 1. squeeze-play와 two-on-one 상황 1) squeeze란 양 대각선에 상대말이 있고 내 말이 중간에 있는 상황을 이야기한다. 여기서 x가 이기 위해서는 대각선에 두면 안되고 변에 둬야한다. 2) two-on-on 상황은 대각선에서 연속으로 o(or x)가 두 개 있고 나머지에 x말이 있는 상황을 말한다. 여기서 x가 이기기 위해서는 변에두면 안되고 대각선에 둬야한다. 2. 함수 * 전역변수 선언 (defvar *Corners* '(1 3 7 9)) (defvar *Sides* '(2 4 6 8)) 1) block-squeeze-play (..
· Major/Lisp
1. Types - type & type-of : 어떤 데이터 타입인지 - (typep '변수 '데이터타입) = t/nil - (type-of '변수) = 데이터 타입리턴 - (typep #'list 'funtion) 함수는 #' 붙여줘야함 2. Structures - Structures: 내가 정의한 데이터타입 - DEFSTRUCT: 새로운 데이터 타입 정의 (defstruct starship (captain nil) (name nil) (speed 0) (condition ‘green) (shields ‘down)) (setf s1 (make-starship)) //구조체 선언 (starship-captain) //구조체안 변수 접근 - 응용 (defun alert (x) ;; causing a st..
· Major/Lisp
1. Tic-Tac-Toe 게임이란? - 위와 같은 3*3 보드가 있을 때, O와 X가 차례대로 두면서 O나 X가 가로/세로/대각선으로 연속 3개를 두면 이기는 게임이다. (자세한 설명은 : 틱택토 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)) 2. 구현 1) 전역변수/ 상수 선언 (defconstant One 1) (defconstant TheOther 10) (defvar *Opponent* One) (defvar *Computer* TheOther) 2) makeBoard : 보드를 만드는 함수 (defun makeBoard () (list ‘Board 0 0 0 0 0 0 0 0 0)) 3) convert-to-letter : one을 0로, the other을 x로 바꾸는 함..
· Major/Lisp
1. Updating a variable (defvar *total-glasses* 0) (defun sell (n) "전역 변수 사용" (setf *total-glasses* (+ *total-glasses* n)) (format t "~&Total ~S glasses." *total-glasses*)) - total-glasses 라는 전역변수를 선언하고, sell이라는 함수로 전역 변수의 값을 바꿔준다. - 변수의 값을 변경시키는 방법은 보통 3가지가 있다. ⓐ (setf NumVar (+ NumVar 5)) ⓑ (incf NumVar 5) ⓒ (decf NumVar) 2. Destructive Operations 1) Destructive Operations는 값을 변경 시켜주는 오퍼레이션이다. ..
· Major/Lisp
1. 문자열 - 문자열은 symbol이 아님 - SRINGP는 문자열임을 판단해주는 함수 2. Format - 기본 반환값은 nil 이다 - 사이드 효과로 화면이나 파일에 쓰여진 글을 출력함 - 첫번째 매개변수는 format을, 두번째 매개변수는 문자열이다. 🧀 기본 format (format t “Hi, mom!”) //t: format(T에 출력하고 싶은 문자열을 두번째 매개변수에 넣는다.) 🧀 서식문자 ~%: new line 줄바꿈 ~&: new line if it is not at the beginning of a new line 새로운 줄이 아니면 줄바꿈 ~S: S-expression being inserted, 삽입할 거 ~A: without using escape characters 제어문자..
· Major/Lisp
🥝 홀수찾는 함수(anyoddp) (defun anyoddp (x) (cond ((null x) nil) //x가 null이라면 nil 출력 ((oddp (first x)) t) //x의 첫번째 원소가 홀수라면 출력 (t (anyoddp (rest x))))) //둘다 아니라면 rest x가 재귀로 들어감 🥝 팩토리얼 함수(factorial) (defun fact (n) (cond ((zerop n) 1) (t (* n (fact (- n 1)))))) 🥝 리스트 원소개수(count-slices) (defun count-slices (loaf) (cond ((null loaf) 0) (t (+ 1 (count-slices (rest loaf)))))) 🥝 첫번째 원자 찾는 함수(find-first-ato..
· Major/Lisp
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*) (d..
· Major/Lisp
1. 빌트인 함수 1) CONS : 콘즈셀을 만든다 2) LIST : 새로운 리스트를 만든다. 3) APPEND : 리스트에 추가한다. 4) ASSOC : 전체 테이블에서 그것의 키를 받으면 그 키와 값을 출력한다. 5) PUSH, POP : 스택구조에서 PUSH 와 POP이랑 같다. 6) REVERSE : 리스트안 원소들을 뒤집는다. 7) NTH : 리스트중 N번째 원소를 출력한다. 8) NTHCDR : CDR을 N번 적용한 값을 출력한다. 9) LAST : 리스트의 맨 마지막 원소를 출력한다. 8) REMOVE : 리스트에서 원소를 제거한다. 9) KEYWORDP : 키워드인지 확인한다. 10) MEMBER : 리스트의 멤버인지 확인하는 함수(주소를 확인) * 요소 자체를 비교하려면 :TEST #'E..
· Major/Lisp
1. DOTIMES 와 DOLIST 함수 1) DOTIMES - 리슾의 내장함수로서 반복문으로 사용된다. - 구조 (DOTIMES (i n 결과값) ...) ex) (DOTIMES (i 4 'end) (format t "~&I is ~S." i)) - 출력 화면 * 시작변수 값 0부터 시작하여 4회 반복한다는 의미 * format문(9Chpter 내용) (format t "입력값") = "입력값" (반환값으로 기본값 nil도 같이 출력) ~& : 줄의 맨 앞으로 가라 / ~% : 엔터 / ~S : 변수 지시어 2) DOLIST - 리스트안의 내용을 반복하는 함수 - 구조 (DOLIST (index-var 리스트 [결과 값(result-form)]) 반복할 내용) ex) 색깔 리스트를 입력받아 꽃의 색깔 ..
BeNI
'lisp' 태그의 글 목록