프로그래밍/Common Lisp 28

스트링 배열 정렬(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..

삼각형 출력 예제를 통한 여러 가지 소스 비교 with Common Lisp

콘솔에 삼각형 * * * * * * * * * * * * * * * ***************** 을 출력하는 Common Lisp 소스 코드를 작성해 보자. 이런 소스 코드의 작성은 학원이나 학교에서 프로그래밍 입문자에게 과제로 많이 주어지는 것 중의 하나이다. 코끼리를 보거나 만진 사람들이 저마다 그 생김새를 말할 때 제각기 다르게 표현할 수 있듯이 이런 소스 코드의 작성도 알고 보면 얼마든지 많은 방법이 있을 것이다. 여기서는 쉬운 코드 부터 작성해 보고 차츰차츰 소스를 바꾸어 가면서 Common Lisp 프로그래밍의 기초부분을 터득해 보기로 한다. 모든 소스 코드에서는 삼각형 출력 부분 담당 함수 printTriange를 별도로 구현하였다. 우선 첫번 째 예제는 Common Lisp의 컨솔 출력..

7비트 ASCII 코드표 만들기 예제 with Common Lisp

ASCII(애스키)란 American Standard Code for Information Interchange의 줄임글로서, 영문자에 기초한 문자 인코딩이다. 이 문자 인코딩에는 C0 제어문자(C0 control character)도 포함되어 있다. ( 참고: ASCII - Wikipedia, the free encyclopedia ) 다음은 7bit ASCII 코드표를 만들어 보여주는 Common Lisp 소스 코드이다. 소스 코드 중에 진법변환에 필요한 함수 ()convertItoA number radix) 의 구현도 포함되어 있다. (아래의 소스는 CLisp으로 실행된다.) ;; Filename: makeAsciiTable.lsp ;; Make a table of ascii codes. ;; ;;..

진법(radix) 표 만들기 예제 with Common Lisp

컴퓨터 프로그래밍에서 꼭 알아두어야 할 주요 진법은 당연히 10진법, 2진법, 8진법, 16진법이다. 다음은 0 에서 15 까지의 정수를 10진법, 2진법, 8진법, 16진법의 표로 만들어 보여주는 Common Lisp 소스 코드이다. 진법 변환에 필요한 함수 (convertItoA number radix) 를 Common Lisp 코드로 자체 작성하여 사용하였다. (아래의 소스는 CLisp으로 실행된다.) ;; Filename: makeRadixTable.lsp ;; Show the radix table with 10-, 2-, 8-, 16-radices. ;; ;; Execute: clisp makeRadixTable.lsp ;; ;; Date: 2013. 9. 5. (setf *BASE36* "01..

대화형 모드의 진법(radix) 변환 예제 with Common Lisp

다음은 대화형 모드(interactive mode)에서 진법 변환(radix conversion)하는 Common Lisp 소스 코드이다. 메뉴는 주메뉴 Command: (S)et radix, (A)bout, (Q)uit or E(x)it 와 부메뉴 SubCommand: 'main()' to goto Main menu, 'exit()' or 'quit()' to exit 로 구성되어 있으며, 진법 변환의 핵심은 아래 소스의 52째 줄과 53째 줄에 있는 (setf val (parse-integer s :radix srcRdx)) (setf ret (write-to-string val :base destRdx)) 이다. 지원되는 진법은 2진법에서 36진법까지이다. ;; Filename: convertRad..

황금비율(golden ratio) 구하기 with Common Lisp

다음은 이차방정식 x^2 - x - 1 = 0 의 양의 근 즉 황금비율(golden ratio)을 구하는 Common Lisp 애플리케이션 소스이다. 황금비율을 구하는 비례방정식은 1 : x = x : (x+1) 이며, 이를 이차방정식으로 표현한 것이 x^2 - x - 1 = 0 이다. See: http://en.wikipedia.org/wiki/Golden_ratio 아래의 소스는 CLisp 으로 테스트되었다. ;; Filename: testGoldenRatio.lsp ;; 황금률(즉, 이차방정식 x^2 - x - 1 = 0 의 양의 근)을 계산한다. ;; ;; Execute: clisp testGoldenRatio.lsp ;; ;; Date: 2013. 9. 1. (defun printUsing() ..