Lisp

Aus Uncyclopedia

Wechseln zu: Navigation, Suche

Mit Lisp wird ein Programmiersprachenstamm bezeichnet, der 1958 entwickelt wurde, um den veralteten Lambda-Kalkül abzulösen, da dessen Syntax fünf Steuerzeichen (\lambda, ., ;) brauchte, während Lisp nur zwei Steuerzeichen benötigt, nämlich eine öffnende und eine schließende Klammer. Somit wurden nur zwei Byte-Werte verbraucht, die restlichen Byte-Werte standen zur freien Verfügung, was eine immense technische Vereinfachung darstellte. Lisp steht aus diesem Grund für Lots of Irritating and Superfluous Parentheses, da es sehr klammerungsintensiv ist.

[Bearbeiten] Geschichte

Der Lambda-Kalkül wurde von Antianalytikern erfunden, um, ähnlich wie die Analysis für Physiker, eine Kommunikationsmöglichkeit zu haben, die nur von eingeweihten Personen verstanden werden kann. Im Gegensatz zur Analysis, die dies durch die Verschleierung in vielen Formeln und Pfeilen erreichen wollte, war es der Ansatz des Lambda-Kalküls, Aussagen so stark zu verschachteln, dass man sie nicht mehr erkennt, aber dennoch in eine hinreichend lange Zeile schreiben konnte und somit in reinen Textdaten ausdrücken kann und keine Bilddaten benutzen muss; was sich zur Entstehungszeit als für den effizienten elektronischen Datenaustausch als unverzichtbar erwies, denn während Physiker eher auf postalischem Wege kommunizierten, nutzten Antianalytiker schon früh das Internet. Als sich die zu übertragenden Informationen anzuhäufen begannen, sah man sich gezwungen, auf ein effizienteres Medium umzusteigen, und so entwickelte man Lisp, das mit nur zwei Steuerzeichen statt mit fünf Steuerzeichen (siehe oben) auskommt, mit dem man somit also mehr Information in den nicht-syntaktischen Teil des Codes platzieren kann. Als die Computer leistungsstärker wurden und das Internet stetig höhere Datendurchsatzraten erzielte, wurde dieses Verfahren nach und nach durch kryptographische Verfahrenstechniken ersetzt, und Lisp wurde immer mehr zur reinen Programmiersprache und wird heute fast ausschließlich zur Programmierung benutzt.

[Bearbeiten] Nutzer

Da Lisp-Code aus historischen Gründen (siehe Geschichte) sehr unübersichtlich und für Laien kaum lesbar ist und die meisten Interpreter und Compiler viel zu langsamen Code erzeugen, als dass man ihn wirklich ausführen wollen würde, beschränkt sich die Nutzergemeinschaft hauptsächlich auf Nerds, die sich mit C nicht anfreunden können, und darauf bestehen, dass ihre Programme möglichst unportabel sind.

[Bearbeiten] Dialekte

Es gibt zahlreiche Lisp-Dialekte, die sich für verschiedene Zwecke eignen. Ein Auszug einiger wichtiger Dialekte:

[Bearbeiten] Scheme

Scheme ist ein Dialekt, der hauptsächlich an Universitäten im Bereich der Forschung von älteren Professoren eingesetzt wird, die der modernen Kryptographie entweder nicht vertrauen, oder sich nicht mit ihr anfreunden können, und dementsprechend Lisp noch zu seinem ursprünglichen Zweck (siehe Geschichte) nutzen, und mit anderen Gleichgesinnten heimlich zu kommunizieren.

Eine typische Scheme-Session (am Beispiel des Scheme-Interpreters Guile):

 lispnoob@cliki:~$ guile
 guile> (print "hello world")
 
 Backtrace:
 In standard input:
    1: 0* (print "hello world")
 
 standard input:1:1: In expression (print "hello world"):
 standard input:1:1: Unbound variable: print
 ABORT: (unbound-variable)
 guile> (printf "hello world")
 
 Backtrace:
 In standard input:
    2: 0* (printf "hello world")
 
 standard input:2:1: In expression (printf "hello world"):
 standard input:2:1: Unbou^H^Hariable: printf
 ABORT: (unbound-variable)
 guile> ^[[A^[[A^[[A^H^H
 ERROR: Unbound variable: 
 
 test
 ERROR: Unbound variable: test
 ABORT: (unbound-variable)
 guile> ERROR: User interrupt
 ABORT: (signal)
 guile> ERROR: User interrupt
 ABORT: (signal)
 guile> ERROR: User interrupt
 ABORT: (signal)
 guile> lispnoob@cliki:~$
 lispnoob@cliki:~$ kolf

[Bearbeiten] RPL (Reverse Polish Lisp)

Ein speziell für Linkshänder entwickelter Lisp-Dialekt, bei dem die Befehle in umgekehrter Reihenfolge eingegeben werden können.

Ein typischer RPL-Code für den RPL-Interpreter VaginalISP:

 )))us to:( belong( are base your all(

[Bearbeiten] Common Lisp

Common Lisp ist ein sehr Umfangreicher ANSI-Standardisierter Lisp-Dialekt, voller sinnloser Funktionen, der so groß ist, dass es fast unmöglich ist, ihn zu implementieren, und das, obwohl er nicht von Microsoft entwickelt wurde. Er enthält so viele Instruktionen, dass es nahezu unmöglich ist, sich alle zu merken. Die meisten Instruktionen sind für die meisten erdenklichen Situationen unbrauchbar, und an den Stellen, wo sie doch brauchbar wären, benutzt sie niemand, da sie dann niemand kennt.

Eine typische Common-Lisp-Session am Beispiel des Common-Lisp-Compilers SBCL:

 lispboob@cliki:~$ sbcl
 This is SBCL 1.0.12.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.
 * (forma tt "hello world")
 
 ; in: LAMBDA NIL
 ;     (FORMA TT "hello world")
 ; 
 ; caught STYLE-WARNING:
 ;   undefined function: FORMA
 ; 
 ; caught WARNING:
 ;   undefined variable: TT
 
 ; 
 ; caught WARNING:
 ;   This variable is undefined:
 ;     TT
 
 ; 
 ; caught STYLE-WARNING:
 ;   This function is undefined:
 ;     FORMA
 ; 
 ; compilation unit finished
 ;   caught 2 WARNING conditions
 ;   caught 2 STYLE-WARNING conditions
 
 debugger invoked on a UNBOUND-VARIABLE in thread #<THREAD "initial thread" {A867639}>:
   The variable TT is unbound.
 
 Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
 
 restarts (invokable by number or by possibly-abbreviated name):
   0: [ABORT] Exit debugger, returning to top level.
 
 (NIL)
 0] 0
 
 * ^[[A^[[A^H^H
                 ^H^H| is unbound.
 debugger invoked on a UNBOUND-VARIABLE in thread #<THREAD "initial thread" {A867639}>:
 Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
 
 restarts (invokable by number or by possibly-abbreviated name):
   0: [ABORT] Exit debugger, ret^H^H| #<NULL-LEXENV>)
 0] 0
 (SB-INT:SIMPLE-EVAL-IN-LEXENV |
 * (quit)
 lispboob@cliki:~$ rlwrap sbcl
 bash: rlwrap: command not found
 lispboob@cliki:~$ su
 motherfPassword: 
 cliki:/home/lispnoob# aptitude install rlwrap
 Reading package lists... Done
 Building dependency tree       
 Reading state information... Done
 Reading extended state information      
 Initializing package states... Done
 Reading task descriptions... Done  
 Building tag database... Done    
 The following NEW packages will be installed:
   rlwrap 
 0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
 Need to get 0B/35.1kB of archives. After unpacking 127kB will be used.
 Writing extended state information... Done
 Selecting previously deselected package rlwrap.
 (Reading database ... 227076 files and directories currently installed.)
 Unpacking rlwrap (from .../rlwrap_0.28-2_i386.deb) ...
 Setting up rlwrap (0.28-2) ...
 Reading package lists... Done             
 Building dependency tree       
 Reading state information... Done
 Reading extended state information       
 Initializing package states... Done
 Writing extended state information... Done
 Reading task descriptions... Done         
 Building tag database... Done    
 cliki:/home/lispnoob# exit
 lispboob@cliki:~$ rlwrap sbcl
 This is SBCL 1.0.12.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.
 * (format t "hello world")
 hello world
 NIL
 * (quit)
 lispboob@cliki:~$
Spezialprojekte
projects