프로그래밍 605

삼각형 출력 예제를 통한 여러 가지 소스 비교 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() ..

현재 시각 알아내기 for Common Lisp

현재 시각을 컨솔에 보여주는 간단한 애플리케이션의 Python 언어 소스 코드이다. UTC란 1970년 1월 1일 0시 0분 0초를 기준으로 하여 경과된 초 단위의 총 시간을 의미한다. * UTC(Universal Time Coordinated, 협정세계시, 協定世界時) Common Lisp 언어에서 (get-universal-time) 하여 얻은 값은 UTC(1970년 1월 1일 0시 0분 0초를 기준으로 하여 경과된 초)가 아니라, 1900년 1월 1일 0시 0분 0초를 기준으로 하여 경과된 초이다. 따라서 이 값을 기준으로 UTC를 구하려면 1900년 1월 1일 0시 0분 0초부터 1970년 1월 1일 0시 0분 0초까지 경과된 초를 구하여 빼 주어야 나온다. 그런데 Common Lisp 언어에서는..

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

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

80컬럼 컨솔에 19단표 출력하기 예제 for Common Lisp

다음은 Python용 소스파일 testForFor.py를 Common Lisp용으로 수정한 것이다. Common Lisp 언어에서 format 함수로 출력할 때 ~% 는 개행문자를 의미한다. Python 언어에서 쓰이는 조건 분기 구문 if 조건식1: 블럭1 elif 조건식2: 블럭2 elif 조건식3: 블럭3 else: 블럭4 에 해딩하는 Common Lisp 언어의 구문은 (cond ((조건식1) 블럭1) (조건식2) 블럭2) (조건식3) 블럭3) (t 블럭4) ) 이다. Comon Lisp 언어에서 t와 nil은 각각 Java 언어의 true와 false에 해당하는 불리란 타입의 상수이다. 그러므로 Comon Lisp 언어에서 t와 nil을 변수명으로 사용할 수 없다. #!/use/bin/env c..

(최대공약수 구하기) while... 반복문 예제 for Common Lisp

소스 파일명: testWhile.lsp #!/usr/bin/env clisp ;; Filename: testWhile.lsp ;; ;; Purpose: Example using the while loop syntax ;; (loop while (cond) do .... ) ;; ;; Execute: clisp testWhile.lsp -200 300 ;; 사용법 표시 (defun printUsage() (format t "Usage: clisp testWhile.lsp [integer1] [integer2]~%") (format t "This finds the greatest common divisor of the given two integers.~%") ) ;; 스트링을 부동소수점수로 변환하는 함수 ..

if...else... 조건문 사용 예제 for Common Lisp

소스 파일명: testIf.lisp #!/usr/bin/env clisp #| Filename: testIf.lisp Purpose: Example using the conditional control structure syntax (if cond block1 block2) Execute: clisp testIf.lisp [number] |# ;; 사용법을 보여주는 함수 (defun printUsing() (format t "Using: clisp testIf.lisp [number]~%") (format t "This determines whether the number is positive or not.~%") ) ;; 스트링을 부동소수점수로 변환하는 함수 (defun parse-number (v) ..