프로그래밍/Common Lisp 28

(Common Lisp 언어로 구현해 보는) 십진법의 신비: 숫자 계산 피라미드 세 가지

다음 소스는 GNU CLisp 으로 실행됨을 확인하였다. 세 함수 pyra1(int int), pyra2(int int), pyra3(int int) 는 재귀호출을 사용하였고, 세 함수 pyramid1(), pyramid2(), pyramid3() 은 loop for 반복문을 사용하였다. #!/usr/bin/env clisp ;; Filename: pyramidOfDigits2.lsp ;; ;; Execute: clisp pyramidOfDigits2.lsp ;; ;; Or ;; ;; Execute: ./pyramidOfDigits2.lsp ;; ;; See: http://darvish.wordpress.com/2008/03/16/the-beauty-of-mathematics-and-the-love-of..

Common Lisp 언어로 한 번의 floor 함수 호출로 몫과 나머지 구하기

(실수) = (정수부) + (소수부) (단, 0 (q, r) = divmod(23, 7) >>> q 3 >>> r 2 >>> divmod(-20, 7) (-3, 1) >>>>>> quit() 이제 CLisp 의 경우에 대해서 알아 보자. Common Lisp 언어의 floor 함수는 몫과 나머지를 함께 리턴하지만 리턴된 값들을 받으려면 다소 까다롭다. setq 나 setf 로는 안 되고 multiple-value-setq 를 사용해야 한다. 명령 프롬프트> 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 `-__|__-' ..

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

[파일명: testStringFindInVector.lsp]------------------------------------------------ #!/usr/bin/env clisp ;; Filename: testStringFindInVector.lsp ;; ;; Approximate square roots, cubic roots and n-th roots of a given number. ;; ;; Execute: clisp testStringFindInVector.lsp ;; Or ;; Execute: ./testStringFindInVector.lsp ;; ;; Date: 2013. 9. 12. (defun my-exact-find(arr s) ; (position s arr)) (let ((r ..

Common Lisp 언어로 역삼각함수, 역쌍곡선함수 값을 구하는 예제

역삼각함수란 삼각함수의 역함수를 의미하고, 역쌍곡선함수란 쌍곡선함수의 역함수를 의미한다. 수학에서 sin 함수의 역함수는 arcsin 으로 표기되는데, Common Lisp 언어에서는 asin 함수로 이미 구현되어 있다. 마찬가지로 쌍곡선 함수 sihh, cosh 들의 역함수들도 각각 asinh, acosh 라는 이름으로 이미 구현되어 있다. #!~/usr/bin/env clisp ;; Filename: testArcSine.lsp ;; ;; Execute: clisp testArcSine.lsp ;; Or ;; Execute: ./testArcSine.lsp ;; ;; Date: 2013. 9. 12. #| def asinh(x): y = math.log(x + math.sqrt(x*x + 1)) re..

감마함수(gamma function)의 값을 (유효수자 15자리 까지 정밀하게) 계산하는 Common Lisp 언어 소스

Lanczos 알고리즘은 Stirlng 공식에 의한 알고리즘 보다 정밀하며, 십진수로 유효숫자 약 15자리 까지는 정확하게 계산해 준다. 단지 exp 함수를 이용하는 부분에서는 exp 함수의 구현에 따라 오차가 더 있을 수 있다. 단, Common Lisp 언어의 float 타입은 유효숫자를 약 7개~8개 밖에 알아내지 못한다. Comon Lisp 언어의 디퐁트 부동소수점수는 단정밀도 부동소수점수이다. 단정밀도 부동소수점수는 그 처리 가능한 양수의 범위가 최소 2−126 ≈ 1.18 × 10−38 부터 최대 (2−2−23) × 2127 ≈ 3.4 × 1038 밖에 되지 않는다. 이 범위를 벗어나는 양수에 대해서는 overflow 에러가 나게 마련이다. 이런 이유로 100! 을 계산하기 위해 (gamma ..

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..