Common Lisp
Środowisku :
- OS : linux
- Ubuntu
- windows
- IDE : Emacs 22.2.1
- mode :
- major mode : inferior-lisp
- minor mode : slime
- mode :
Spis treści |
[edytuj] Przygotowania
[edytuj] praca w konsoli
Aby zainstalować Common Lispa ( tu SBCL) należy w konsoli wpisać :
sudo apt-get install sbcl
Uruchomiamy sbcl poprzez wpisanie w konsoli :
sbcl
Otrzymujemy :
This is SBCL 1.0.29.11.debian, an implementation of ANSI Common Lisp. More information about SBCL is available at <http://www.sbcl.org/>. SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. *
Aby zakończyć SBCL możemy nacisnąć Ctrl-z
Jeśli w programie zostanie wykryty błąd to włączy się odpluskwiacz i zmieni znak zachęty :
0]
aby wyjść z niego wprowadź "0" :
0] 0 *
Czasem włączy się niskopoziomowy odpluskwiacz :
Welcome to LDB, a low-level debugger for the Lisp runtime environment. ldb>
Aby wyjść wprowadź "quit" i potem "y" :
ldb> quit Really quit? [y]
[edytuj] praca z IDE ( Emacs)
Można wykorzystać Emacsa jako edytor oraz IDE. Jest to omówione w podręczniku Emacsa
[edytuj] Technika pracy w Lispie
[edytuj] Wprowadzanie poleceń
Mamy kilka sposobów :
- wprowadzać pojedyncze polecenia ( patrz wyżej)
- wczytać plik z programem ( tryb wsadowy , ang. batch mode )
- wczytać biblioteki, a następnie wprowadzić polecenia
[edytuj] Tryb wsadowy
[edytuj] Tworzenie i edycja pliku
[edytuj] Wczytywanie pliku
Sparawdzamy domyslny katalog :
*default-pathname-defaults*
Jeli plik q.lisp znajduje się w tym katalogu to możemy go wczytać :
(load "q.lisp")
Lepiej użyć makra definiującego ścieżkę :[1]
(load #p("/path/to/file"))
W środowisku windows :[2]
(load "c:\\temp\\testload")
lub funkcji make-pathname:[3]
(load (make-pathname :device "c" :directory '(:absolute "temp") :name "testload"))
lub :
(load (make-pathname :device "c" :directory '(:absolute "temp") :name "testload") :if-does-not-exist (load (make-pathname :device "c" :directory '(:absolute "temp") :name "testload2"))
[edytuj] Kompilacja
Jeśli wczytujemy plik z kodem w lispie ( źródłowy) za pomocą funkcji load to po wczytaniu następuje automatyczna kompilacja [4]
Kompilacja pojedynczej funkcji :
(compile 'nazwa-funkcji)
Kompilacja pliku :
(compile-file "l.lisp" :output-file "l")
Otrzymujemy plik l.fasl. Możemy go uruchomić z linii poleceń :
chmod +x l.fasl ./l.fasl
[edytuj] Uruchomienie programu
(nazwa-funkcji lista-parametrów)
[edytuj] Profilowanie programu
Możemy użyć makra time aby sprawdzić czas wykonania wyrażenia exp [5]
(time < exp>)
Profiler nie jest częścią standardową Common Lispa,[6] ale powinien być w każdej wersji. Np w SBCL jest sb-sprof [7]
[edytuj] Programowanie
[edytuj] Stałe
Stałe globalne definiujemy za pomocą makra defconstant :
(defconstant iSide 33 "side of rectangular plane / viewport / image in pixels ")
[edytuj] Pętle
Pętla z użyciem makra loop : [8]
(loop for y from -1.5 to 1.5 by 0.5 do (format t (concatenate 'string "y= " (write-to-string y) "~%")))
wynik działania :
y= -1.5 y= -1.0 y= -0.5 y= 0.0 y= 0.5 y= 1.0 y= 1.5 NIL
Inne parametry :
(loop for y from -1.5 to 1.5 by 0.4 do (format t (concatenate 'string "y= " (write-to-string y) "~%")))
Wynik działania :
y= -1.5 y= -1.1 y= -0.70000005 y= -0.30000004 y= 0.099999964 y= 0.49999997 y= 0.9 y= 1.3 NIL
Jak widać w tym przykładzie końcowy parametr 1.5 nie został osiągnięty.
[edytuj] Żródła
- ↑ Sharpsign dokumentacja
- ↑ Lisp Load Function w daniweb
- ↑ make-pathname dokumentacja
- ↑ HyperSpec funkcji load
- ↑ Profiling Lisp programs z Uniwersytetu Minnesota
- ↑ Successful Lisp: How to Understand and Use Common Lisp by David B. Lamkins, Chapter 28 - Practical Techniques for Programming
- ↑ Podręcznik SBCL, Statistical Profiler
- ↑ hcomparing-loop-and-iterate by Stephen Bach