프로그래밍 605

Common Lisp 언어로 복소수 계산하기

아래는 GNU CLisp 로 실행한 것인데. Clozure CL 로 실행해도 거의 같은 결과를 얻는다. 명령프롬프트> clisp i i i i i i i ooooo o ooooooo ooooo ooooo I I I I I I I 8 8 8 8 8 o 8 8 I \ `+' / I 8 8 8 8 8 8 \ `-+-' / 8 8 8 ooooo 8oooo `-__|__-' 8 8 8 8 8 | 8 o 8 8 o 8 8 ------+------ ooooo 8oooooo ooo8ooo ooooo 8 Welcome to GNU CLISP 2.49 (2010-07-07) Copyright (c) Bruno Haible, Michael Stoll 1992, 1993 Copyright (c) Bruno Haible, Ma..

Common Lisp 를 이용한 간단한 수학식 계산하기

Commonn Lisp 언어는 S-신택스라고 불리우는 구문 즉, (함수명 파라미터1 파라미터2 ... 파라미터n) 인 형태의 구문을 사용한다. 예를 들어 뺄셈을 할 때에도 (- 2 3 5 7) 라는 구문은 수학식 2 - 3 - 5 - 7 을 계산한 결과를 얻는다. * CLisp 용 소스 파일: first-sample-2.lsp #!/usr/bin/env clisp ;; 파일명: first-sample-2.lsp (defun lg(x): (/ (log x) (log 2)) ) (defun log10(x): (/ (log x) (log 10)) ) (format t "이 소스는 CLisp 를 이용하여 실행됨!~%") (format t "----------------~%") (format t "수학식 계산하기..

조립제법(Horner의 방법) 예제 2 for Common Lisp

다항식 p(x) 를 1차 다항식 ax - b 로 나눌 때의 몫과 나머지를 구하는 조립제법을 Python 언어로 구현해 보았다. 조립제법은 일명 Horner의 방법이라고도 불리우는데, 이는 x = a 에서 다항식 p(x)의 값 p(a)을 계산하는 가장 빠른 알고리즘이기도 하다. p(x) = (ax - b)q(x) + r 여기서 r은 나머지이며 r = p(b/a) 이다. 또 q(x)는 몫이다. [참고] * 온라인으로 조립제법 표 만들기 손으로 계산하는 조립제법 표 * 온라인으로 구하는 다항식의 도함수: 조립제법을 이용한 다항식의 도함수 아래의 소스파일은 이전에 작성했던 파일 testSyntheticDivision.lsp 를 수정한 것이다. ;; Filename: testSyntheticDivision2.ls..

숫자 맞추기 게임 with Common Lisp

Common Lisp 언어로 숫자 맞추기 게임을 작성해 보았다.아래 소스의 18째 줄 (setf guess (parse-integer sbuf)) 는 스트링을 정수로 변환하는 과정이다.소스 파일명: guessNumber01.lsp#!/usr/bin/env clisp;;   Filename: guessNumber01.lsp ;;   Purpose:  Interatice game guessing a given number. ;;                 (if condition ;;                     (........)    ; when condition is true;;                     (........)    ; when condition is flase;;   ..

스트링 리스트에서 스트링 찾기(find) with Common Lisp

[파일명: testStringFindInList.lsp]------------------------------------------------ (defun my-find(arr s) (let ((k -1) (r -1)) (loop for i from 0 below (length arr) do (setf k (search s (nth i arr))) (if k (progn (setf r i) (return i))) ) r ) ) (defun printList(arr) (format t "[") (loop for i from 0 below (1- (length arr)) do (format t "~A, " (nth i arr)) ) (if (plusp (length arr)) (format t "~A" (n..

스트링 배열 정렬(sorting)하기 with Common Lisp

[파일명: testSort.lsp]------------------------------------------------ (defun printArray(a) (format t "[") (loop for i from 0 below (1- (length a)) do (format t "~A, " (nth i a)) ) (if (plusp (length a)) (format t "~A" (nth (1- (length a)) a)) ) (format t "]~%") ) (setf list ext:*args*) (sort list #'string clisp testSort.lsp one two three four five [five, four, one, three, two] 실행> clisp testSort.l..

Pollard's rho method 소개: 정수의 인수분해(factorizing integers) with Common Lisp

정의 (소수와 합성수) 1보다 큰 양의 정수 n에 대하여 (i) n = a * b 를 만족하고 1보다 큰 두 양의 정수 a와 b가 존재하면, n을 합성수(合成數, composite number)라고 한다. 참고로 이 경우, a, b 중에 적어도 하나는 sqrt(n) 보다 작거나 같다. 합성수의 예로는 4, 6, 9, 24, 143 등이 있다. (ii) n = a * b 를 만족하고 1보다 큰 두 양의 정수 a와 b가 존재하지 않으면, 즉 n을 두 양의 정수의 곱으로 표현하는 방법이 1*n과 n*1 두 가지 뿐이면, n을 소수(素數, prime number)라고 한다. 소수의 예로는 2, 3, 5, 7, 11 등이 있다. n이 소수인지 아닌지 확인하려면, n을 2 보다 크거나 같고 sqrt(n) 보다 작거..

손으로 계산하는 긴자리 곱셈표 만들기 with Common Lisp

초등학교 때 배우는 두 정수의 곱셈표를 만들어 주는 Common Lisp 소스이다. (이 소스는 CLisp으로 잘 실행됨을 확인하였다.) Common Lisp 언어로, 양의 정수 a를 양의 정수 b로 나는 몫을 구하려면 (setf q (floor (/ a b))) 한다. 그 몫은 변수 q에 저장된다. 이렇게 하는 이유는 (setf q (/ a b)) 로 한 경우 q에는 분수 a/b가 저장되기 때문이다. ;; Filename: makeMultTable.lsp ;; ;; Print a multiplication table. ;; ;; Execute: clisp makeMultTable.lsp 230 5100 ;; ;; Date: 2013, 9. 6. (defun printUsing() (format t "U..

문자열 거꾸로 하기 with Common Lips

▒ Common Lips 소스: testStringReverse.lsp #!/usr/bin/env clisp (defun my-string-reverse (s) (let* ((arr (concatenate 'list s)) (arr2 (reverse arr))) (format nil "~{~A~^~}" arr2) ) ) (setf s "Hello, world!") (setf s2 "안녕하세요?") (format t "s = ~A~%" s) (format t "(reverse s) = ~A~%" (reverse s)) (format t "(my-string-reverse s) = ~A~%" (my-string-reverse s)) (format t "s2 = ~A~%" s2) (format t "(reve..

손으로 만드는 나눗셈 계산표 with Common Lisp

다음은 초등학교에서 배우는 나눗셈 계산표를 만들어주는 Common Lisp 소스 코드이다. 나눗셈 계산표를 완성하고 나서 약수, 배수 관계를 알려준다. 아래의 소스는 CLisp으로 실행되도록 작성되었다. #!/usr/bin/env clisp ;; Filename: makeDivisionTable.lsp ;; ;; Purpose: Make a division table in a handy written form. ;; ;; Execute: clisp makeDivisionTable.lsp 12345 32 ;; clisp makeDivisionTable.lsp 500210 61 ;; ./makeDivisionTable.lsp 500210 61 ;; ;; Date: 2013, 9. 5. (defun print..