반응형

Prime 구하기 소스 올립니다.


(defun tf_prime(n i)
       (setq j 1)
       (loop
            (cond ((= (- n (* i j)) 0) (return nil))
                  ((< (- n (* i j)) i) (return t)))
            (setq j (+ j 1))))


(defun p_prime(n)
       (let ((nmt (/ (+ n 1) 2)) (counting 2))
            (loop
                (cond ((< n 4) (return t))
                      ((NOT (tf_prime n counting)) (return nil))
                      ((= counting nmt) (return t)))
                (setq counting (+ counting 1)))))


실행 방법 : ( p_prime 17) <- 요렇게 하시면 됩니다.

이렇게 되구요... 입력수가 Prime이면... T를... 아니면 nil을 반환 합니다.

사용자 지정구간에 대한 Prime은 어디가 문제 인지 모르겠는데.. 결과 도출이 또 제대로 안되네요 ㅡㅡ;

관련 부분은 소스 코드 점검을 해봐야 될거 같습니다.

구간 점검을 위한 prime 구하는 소스는 다음 번에 올려 드리겠습니다.

반응형
Posted by onlyTheOne
,
반응형

안녕하세요 생각 보다 Lisp 언어를 많이 찾아 보시는거 같으시네요 ^^:

반응이... Lisp 생각 보다 어렵고 자료구하기도 힘든거 같습니다.

이번 소스는 소수 구하기 입니다. 소수가 소숫점  1.234 이게 아니라

X라는 숫자를 나누어 떨어지는 수가 1과 자기 자신인 수 입니다.

즉, 2, 3, 5, 7, 11같은 (1 은 소수가 아니라고 합니다. 궁금하신분은 검색해 보시길...)

이 소스는 사용자로 부터 2개의 수를 입력 받아

두 수 사이의 소수를 모두 구해 내는 프로그램 입니다.

그래서!~~ 이렇게 소스를 올리고 있습니다. 물론 소스에 있는 내용을

공부도 안하면서 그냥 배끼면 안되기 때문에.!!!

저는 소스의 일부를 지워 둡니다.

정 공부하다가 모르겠다 하시는 분은 방명록이나

다른 방법으로 연락을 주신다면 힌트나 완전체 소스를 드리도록 하겠습니다.

(세상에서 가장 비싼건 공짜 이다.! )

------------------------- 아래 는 해당 소스 입니다.---------------------------------------------
1. prime 확인 함수 (인자 사용자 입력수, 나누는 수)
(defun tf_prime(n i)
(setq j 1)
/* 이 구간을 삭제 합니다.
*/
(setq j (+ j 1))))

2. prime 중간 함수 사용자로 부터 값을 받아... 해당 결과를...
prime이 아니면 nil을... prime이면 숫자를 반환
(defun p_prime(n)
(let ((nmt (/ (+ n 1) 2)) (counting 2))
(loop
/* 여기도 삭제 합니다.  */
(setq counting (+ counting 1)))))

3. (사용자 입력 받고 값 내주는 함수)
// n 부터 m까지의 prime number중 최고 높은 값 구하기
(defun primes(n m)
(let ((at n) (max_n nil))
(loop
/*  여기도 삭제 합니다.
*/
(setq at (+ at 1)))))

반응형
Posted by onlyTheOne
,
반응형
이번학기 Artificial Intelligence 수업을 듣고 있습니다.

수업 내용 중에 Lisp이라는 언어를 배우게 되었는데요

음 이 Lisp에 대한 자료를 조사해 보니...

그리 많지는 않았습니다. 우선 제가 아는 lisp은

xlisp 이라 하여 오리지날 lisp과 요즘 많이 쓰여진다고 보여지는

common lisp입니다...

common lisp에 대한 부분은 한국리습사용자모임을 방문하시면 도움이 많이 되실 겁니다.

과제로 나왔던 문제 중 하나를 코딩 한 걸 올려 둡니다.

xlisp을 이용한 sorting 이구요...

기본 알고리즘은 시간 복잡도가 linear인... 버킷 sort 입니다.

주의사항 !! 100% 완벽 지원 아닙니다.

간단히 버킷 정렬에 대해 말씀 드리면

정렬 속도를 극대화 시키기 위한 방법으로 저장공간을 사용자 입력한 데이터 만큼 이용합니다.

데이터 숫자만큼의 배열 또는 데이터를 받는 공간을 만들고 loop를 한번 돌면서..

각 공간에 매칭되는 데이터를 집어 넣고 그 결과값을 보여줍니다.

여기서 구현한건 일부 제약조건이 있지만 버킷정렬과 비슷하다고 보시면 됩니다.

어찌되었든 정렬은 되니깐요 ㅋㅋ

거의 무지 막지하게 만든 거라서요...

소스는 아래와 같습니다...

아! 그 전에 이 자료를 찾는 목적이 단순한 copy를 통한 레포트 제출용을 방지 하기 위해서

코드의 일부를 지워 두었습니다.

이 자료를 바탕으로 정렬을 만드는 법에 대해 익히는것을 바라지만...

레포트 제출용이라면 볼 필요가 없다고 생각합니다...

혹시 완전한 소스를 필요로 하신다면 방명록에 메일 주소를 남겨주시면 알려드리도록 하겠습니다.

1. array에 data를 저장 하는 함수
(defun add_arre(number)
  (setf (aref s_arr (- number 1)) number))

2. 여러 data를 array 함수로 보내는 loop용 함수
(defun sorts (l n)
  (dotimes (i n) (.....))))

3. 배열에 저장된 값을 다시 list로 반환 보여 주는 함수
(defun print_arr(n)
  ...

4. 메인 함수로 위에 선언된 함수를 호출하여 sort를 합니다.
(defun sorting (l)
  (setq num (length l)) // list의 length를 구함
  (setq s_arr (make-array num)) // array 생성
  (sorts l num) // sort 함수 호출 sorting
  (print_arr num)) // array에 저장된 값을 list 변환 출력

이렇게 코딩하시면 됩니다. 여기서 3번 함수중 맨마지막 줄을 수정하신다면 내림차순 정렬을 보실수가
있습니다.

이 소스의 단점이 하나 있는데요 바로 연속 된 수만 집어 넣어야 한다는 부분이구요
연속된 수가 1부터 시작해야 한다는 것입니다...

다음에도 xlisp에서 작성된 프로그램 예제 몇가지를 더 올리도록 하겠습니다.



반응형
Posted by onlyTheOne
,