Common Lisp

Z Wikibooks, biblioteki wolnych podręczników.
Skocz do: nawigacji, wyszukiwania
Common Lisp Wiki-okładka książki


Środowisku :

  • OS : linux
    • Ubuntu
  • windows
  • IDE : Emacs 22.2.1
    • mode :
      • major mode : inferior-lisp
      • minor mode : slime

Przygotowania[edytuj]

praca w konsoli[edytuj]

Aby zainstalować Common Lispa ( tu SBCL) w Ubuntu 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]

praca z IDE ( Emacs)[edytuj]

Można wykorzystać Emacsa jako edytor oraz IDE. Jest to omówione w podręczniku Emacsa

Technika pracy w Lispie[edytuj]

Wprowadzanie poleceń[edytuj]

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

Tryb wsadowy[edytuj]

Tworzenie i edycja pliku[edytuj]

Wczytywanie pliku[edytuj]

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"))

Kompilacja[edytuj]

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

Uruchomienie programu[edytuj]

(nazwa-funkcji lista-parametrów)

Profilowanie programu[edytuj]

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]

Programowanie[edytuj]

Stałe[edytuj]

Stałe globalne definiujemy za pomocą makra defconstant :

(defconstant iSide 33 "side of rectangular plane / viewport / image in pixels ")

Pętle[edytuj]

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.

zobacz również[edytuj]

zastosowanie peflags ( mały program z Cygwin) do zwiększanie wielkości stosu i sterty :[9]

peflags --stack-reserve sbcl.exe 
sbcl.exe: stack reserve size : 2097152 (0x200000) bytes 
peflags --stack-reserve=0x1000000 sbcl.exe 
sbcl.exe: stack reserve size : 16777216 (0x1000000) bytes


Żródła[edytuj]

  1. Sharpsign dokumentacja
  2. Lisp Load Function w daniweb
  3. make-pathname dokumentacja
  4. HyperSpec funkcji load
  5. Profiling Lisp programs z Uniwersytetu Minnesota
  6. Successful Lisp: How to Understand and Use Common Lisp by David B. Lamkins, Chapter 28 - Practical Techniques for Programming
  7. Podręcznik SBCL, Statistical Profiler
  8. hcomparing-loop-and-iterate by Stephen Bach
  9. Dyskusja o peflags na grupie dyskusyjnej Maxima CAS