본문 바로가기

LISP?

lisp 관련 유용한 사이트


Common Lisp: A Gentle Introduction

to Symbolic Computation

Entire book -- PDF (1 MB file)
 
  • A Gentle Introduction
  • Successful Lisp (See chap. 3 for a "nutshell" summary) 
  •   - http://www.psg.com/~dlamkins/sl/chapter24.html 
      - http://www.psg.com/~dlamkins/sl/chapter12.html
      - http://www.psg.com/~dlamkins/sl/chapter21.html

    Practical Common Lisp
    ANSI common lisp
    On Lisp
    Lisp Cookbook
    Wiki Books
    SFU tutorial
    Euler Project
    L99 problems in lisp

     
    http://lispdoc.com/   검색기능 막강
    And this (Scheme) book may be useful too:
    http://www.htdp.org/2003-09-26/Book/
     
    http://cl-cookbook.sourceforge.net/ COOK BOOK

    ==============================================================================

    To use LispWorks for Windows

    1. Read the Release and Installation Notes (1.0MB).
    2. Download and install LispWorks Personal Edition (43.9MB).


    ------------------------------------------------------------------------------

    http://www.nicklevine.org/declarative/lectures/

    http://www.cs.sfu.ca/CC/310/pwfong/Lisp/



    http://www.adampetersen.se/articles/lispweb.htm

    http://weitz.de/hunchentoot/


     

    http://www.xach.com/lisp/vecto/
    http://www.cliki.net/CL-PDF
    http://joeganley.com/code/jslisp.html
    Using the Win32 API



    (defun lott ()
    (dotimes (n 6 listvalue)
     (if (zerop n) (setf listvalue (list (+ 1 (random 45))))
       (sort (setf listvalue (cons (+ 1 (random 45)) listvalue)) #'<)))) 

    (defun lott ()
     (dotimes (n 6 lotto-value)
      (let ((selected-number (+ 1 (random 45))))
       (if (zerop n) (setf lotto-value (list selected-number))
        (loop
         (if (member selected-number lotto-value)
             (setf selected-number (+ 1 (random 45)))
             (return (setf lotto-value (sort (cons selected-number lotto-value) #'<))) ))))))

    (defun lotto-game (num)
     (defun lott ()
       (dotimes (n 6 lotto-value)
        (let ((selected-number (+ 1 (random 45))))
         (if (zerop n) (setf lotto-value (list selected-number))
          (loop
            (if (member selected-number lotto-value)
                (setf selected-number (+ 1 (random 45)))
                (return (setf lotto-value (sort (cons selected-number lotto-value) #'<))) ))))))
      (dotimes (n num)
       (print (lott)) )) 

    (defun lotto-draw (&optional &rest this-list)
     (let ((alist (append '(0) this-list)))
     (defun draw-star (num num+1)
      (dotimes (n (- num+1 num 1)) 
      (format t "~2a" '-)) 
      (format t "~2a" num+1)) 
     (defun draw-p (tlist)  
      (when (> (length tlist) 1)
       (draw-star (first tlist) (first (rest tlist)))
               (draw-p (rest tlist))))
     (draw-p (sort alist #'<))))


    (dotimes (m 8 "The End")  ;; 구구단 2~9단
     (dotimes (n 9 t)
       (format t "~%~2a x ~1a = ~2a" (+ m 2) (+ n 1) (* (+ m 2) (+ n 1)))
       (if (and (< m 7) (= n 8)) (format t "~%")) ))


    (defun gugu-dan (x)
     (dotimes (n 9 "The End")
      (format t "~2a x ~1a = ~2a~%" x (+ n 1) (* x  (+ n 1))) ))


    (defun factors-of (num) ;; 약수 구하기1
     (dotimes (n num "Done")
             (if (= 0 (rem num (+ n 1))) (print (+ n 1))) ))

    (defun factors-of (num) ;; 약수 구하기 2
     (dotimes (n num "Done")
             (if (= 0 (rem num (+ n 1))) (format t "~a " (+ n 1))) ))

    (defun factors-of (num) ;; 약수를 리스트로 보여줌
     (let ((result nil)) 
     (dotimes (n num (reverse result))
             (if (= 0 (rem num (+ n 1)))
                 (push (+ n 1) result)))))

    (defun prime-numbers (&optional (from 2) (to 10)) ;; 두 수 사이의 소수 모두 구하기1
       (let ((result nil))
         (dotimes (n (- (+ to 1) from)
                     (format nil "~&The prime numbers from ~a to ~a are ~a"
                             from to (reverse result)))
           (if (= (length (factors-of (+ n from))) 2)
               (push (+ n from) result)))))

    (defun prime-numbers (&optional (from 2) (to 10)) ;; 두 수 사이의 소수 모두 구하기2
       (let ((result nil))
         (dotimes (n (- (+ to 1) from) (reverse result))
           (if (= (length (factors-of (+ n from))) 2)
               (push (+ n from) result)))))

    (defun length-prime-numbers (&optional (from 2) (to 10)) ;; 두 수 사이의 소수의 개수
     (length (prime-numbers from to)))


    (defun factorize (num)  ;; 소인수분해해서 리스트로 출력하기 - 재귀호출 활용
      (Let ((prime-set (prime-numbers 2 num)) (result ()))
        (dolist (e prime-set result)
          (if (= (rem num e) 0)
              (setf result (sort (append (list e) (factorize (/ num e))) #'<))))))

    (defun root (x)
                  (let* ((a (floor (sqrt x))) (b (rem x (* a a))))
                    (format t "~&~a (root~a)" a b)))
    ;; 수학처럼 20 = 2 root 5로 표현할 수 있도록 하려면?
    ;; 정수부분과 무리수 부분을 따로 구분해서 표현하려면?
    ;; (sqrt 20 = 4.472136을 활용할 수 있는 방법은?
    ;; 어떤 수의 거듭제곱으로 구성된 수인가?


    (defun root (x)
      (defun good-enoughp (guess)
        (< (abs (- (* guess guess) x)) 0.001))
      (defun improve (guess)
        (average guess (/ x guess)))
      (defun average (x y)
        (/ (+ x y) 2))
      (defun root-iter (guess)
        (if (good-enoughp guess)
            guess
            (root-iter (improve guess))))
      (root-iter 1.0))

    ;;;Ackemann Function
    (defun A (x y)
      (cond ((= y 0) 0)
            ((= x 0) (* 2 y))
            ((= y 1) 2)
            (t (A (- x 1)
                     (A x (- y 1))))))

    ;; 피보나치 수열 
    (defun fibo (n)
      (defun fibo-iter (a b n)
        (if (= n 0) b
            (fibo-iter (+ a b) a (- n 1))))
      (fibo-iter 1 0 n))

    CL-USER> (mapcar #'fibo '(1 2 3 4 5 6 7 8 9 10))
    (1 1 2 3 5 8 13 21 34 55)