Przejdź do zawartości

Common Lisp

50% Status
Z Wikibooks, biblioteki wolnych podręczników.
Common Lisp Wiki-okładka książki

Środowiska:

  • 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ęcznikuEmacsa

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]

Sprawdzamy domyślny katalog:

*default-pathname-defaults* 

Jeśli 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.

peflags

[edytuj]

zastosowanie peflags (mały program z Cygwin) do zwiększania 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

Linki zewnętrzne

[edytuj]