網頁

顯示具有 lisp 標籤的文章。 顯示所有文章
顯示具有 lisp 標籤的文章。 顯示所有文章

2013年11月30日 星期六

Balance partion problem

 (defun balpart (lst)
   "balace partion problem " 
   (let* ((sum (apply #'+ lst))
         (halfsum (floor (/ sum 2)) )
         (sol (make-list (+ halfsum 1) :initial-element nil )) 
         )
     (setf (first sol ) t ) 
     (dolist (i lst ) 
       (do ((j halfsum (decf j)))
          ((< j i))
        (if (nth (- j i) sol)
            (setf (nth j sol) t))))
 
     (let ( (halfcloser (do ((i halfsum (decf i) )) ((nth i sol) i ) )))
       (return-from balpart (- sum halfcloser halfcloser)))
     ))
 
 (format t "Please input a number list: ~%")
 (finish-output t ) 
 (format t "The minimum difference is : ~A~%" (balpart (read) )  )

 
詳細過程請參考此連結

2013年6月29日 星期六

quicklisp and slime installation

 
quicklisp :quicklisp官網 http://www.quicklisp.org/beta/ 有教學,不多說:
slime:下載最新slimehttp://common-lisp.net/project/slime/#downloading
.emacs設定
(set-language-environment "utf-8")
;(setq inferior-lisp-program "/usr/share/emacs/24.0.94/ccl/lx86cl64") ;your Lisp system
(setq inferior-lisp-program "/usr/bin/sbcl") ;your Lisp system
(add-to-list 'load-path "/usr/share/emacs/24.2/slime-2013-04-05/") ;your SLIME directory
(require 'slime)
(slime-setup)
(setq slime-net-coding-system 'utf-8-unix)
(slime-setup '(slime-fancy))
;(require 'slime-autoloads)
(defun lisp-indent-or-complete (&optional arg)
  (interactive "p")
  (if (or (looking-back "^\\s-*") (bolp))
      (call-interactively 'lisp-indent-line)
      (call-interactively 'slime-indent-and-complete-symbol)))
(eval-after-load "lisp-mode"
  '(progn
     (define-key lisp-mode-map (kbd "TAB") 'lisp-indent-or-complete)))

2013年6月26日 星期三

quicklisp 與 cl-opengl

.sbclrc 加入 (ql:quickload "cl-opengl") (ql:quickload "cl-glu") (ql:quickload "cl-glut")

;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
                                       (user-homedir-pathname))))
  (when (probe-file quicklisp-init)
    (load quicklisp-init)))

(ql:quickload "cl-opengl")
(ql:quickload "cl-glu")
(ql:quickload "cl-glut")
sample.lisp
(cffi:defcallback renderscene :void ()
  (gl:clear :color-buffer-bit)
  (gl:flush))
(defun setuprc ()
  (gl:clear-color 0.0 0.0 1.0 1.0))

(defun main()
  (glut:init-display-mode :single :RGB)
  (glut:init)
  (glut:create-window "hello")
  (glut:display-func  (cffi:callback renderscene) )
  (setuprc)
  (glut:main-loop))
後來發現(ql:quickload "cl-opengl") (ql:quickload "cl-glu") (ql:quickload "cl-glut")只用做一次就好了, 之後只用(require 'cl-opengl) (require 'cl-glut) (require 'cl-glu)便可以了。
.sbclrc

;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
                                       (user-homedir-pathname))))
  (when (probe-file quicklisp-init)
    (load quicklisp-init)))

sample.lisp
(require 'cl-opengl)
(require 'cl-glut)
(require 'cl-glu)
(cffi:defcallback renderscene :void ()
  (gl:clear :color-buffer-bit)
  (gl:color 0.0 0.0 1.0 )
  (gl:rect 100 150 150 100)
  (gl:flush))

(cffi:defcallback changeSize :void ((w :int) (h :int))
  (if (= h 0) (setf h 1))
  (gl:viewport 0 0 w h )
  (gl:matrix-mode :projection )
  (gl:load-identity)
  (if (<= w h)
      (gl:ortho 0 250 0 (/ (* 250 h ) w) 1 -1)
      (gl:ortho 0 (/ (* 250 w ) h) 0 250 1 -1))
  (gl:matrix-mode :modelview )
  (gl:load-identity))

(defun setuprc ()
  (gl:clear-color 0.0 0.0 0.0 1.0))
(defun main()
  (glut:init-display-mode :single :RGB)
  (glut:init)
  (glut:init-window-size 250 250)
  (glut:create-window "hello")
  (glut:display-func (cffi:callback renderscene) )
  (glut:reshape-func (cffi:callback changesize) )
  (setuprc)
  (glut:main-loop))

2013年5月22日 星期三

為何Lisp語言流行不起來?

為何Lisp語言流行不起來?

因素1:Lisp真的不是很好學,與C相比,它的變化性實在是太大了,有時候真的會有不知道怎麼寫才是最好的寫法!!

因素2:現代大部份的程式設計師,應該不太能叫做程式設計師了!為什麼不能叫「程式設計師」呢?
       因為現在大部份的設計工作其實都是交給專業的設計師去設計的,而「程式設計師」只是負責
       針對設計師的設計規格實踐出來而已。所以我覺得現代大部份的「程式設計師」已經不能稱為
       「程式設計師」了,應該稱為「程式實踐者」。做為一個稱職的「程式實踐者」來說,他們需要
       一套簡潔、明了的程式語言來完成他們的工作,像C、C++、Java等等,這些語言在我看來易讀、
      易懂、變化不大,並且大部份的「有程式經驗的人」,都應該會使用過這些語言,這樣一來在合作
      與溝通上也會比較方便與快速。由於以上這些原因,C、C++、Java便成為了「程式實踐者」的主流
      語言,然而Lisp呢?因為Lisp是針對「程式設計師」設計的語言,是一種富有創造性的語言,但相對
      來說,Lisp對一般的「程式實踐者」並沒有太大的幫助,反而因為變化性太大而沒辦法讓他們掌握,
      反而導致他們投入其它程式語言的懷抱!

可惜我好像連「程式實踐者」都達不太到