b'\n_START_ARTICLE_\nPor\xc3\xb3wnanie dialekt\xc3\xb3w Lispu\n_START_PARAGRAPH_\nJ\xc4\x99zyk programowania Lisp ma kilka odmian, r\xc3\xb3\xc5\xbcni\xc4\x85cych si\xc4\x99 elementami sk\xc5\x82adni, nazywanych dialektami Lispu._NEWLINE_Poni\xc5\xbcej przedstawiono pogl\xc4\x85dowe zestawienie przyk\xc5\x82ad\xc3\xb3w kodu w j\xc4\x99zyku Lisp, w jego 4 dialektach: Scheme, Emacs Lisp, Common Lisp i Clojure.\n_START_SECTION_\nPodstawowe sta\xc5\x82e symboliczne\n_START_PARAGRAPH_\nSta\xc5\x82e kt\xc3\xb3re wyst\xc4\x99puj\xc4\x85 w ka\xc5\xbcdym Lispie to prawda, fa\xc5\x82sz i lista pusta.\n_START_SECTION_\nDefinicje\n_START_PARAGRAPH_\nW Scheme i Clojure  istnieje tylko jedna przestrze\xc5\x84 nazw obejmuj\xc4\x85cy sta\xc5\x82e i funkcje oraz zmienne i zmienne funkcyjne, dzi\xc4\x99ki czemu w tych dialektach nie trzeba cytowa\xc4\x87 funkcji kt\xc3\xb3r\xc4\x85 przekazuje si\xc4\x99 do funkcji wy\xc5\xbcszego rz\xc4\x99du. _NEWLINE_W Common Lisp i Emacs Lisp funkcje i sta\xc5\x82e traktowane s\xc4\x85 inaczej, w tych dialektach przekazuj\xc4\x85c funkcj\xc4\x99 jako parametr nale\xc5\xbcy poprzedzi\xc4\x87 j\xc4\x85 znakami cytowania funkcji (#\')._NEWLINE_W Clojure parametry funkcji zapisuje si\xc4\x99 wektorze, za pomoc\xc4\x85 nawias\xc3\xb3w kwadratowych._NEWLINE_Dla przyk\xc5\x82adu zdefiniujmy sta\xc5\x82\xc4\x85 2\xcf\x80 oraz funkcj\xc4\x99 wy\xc5\xbcszego rz\xc4\x99du, kt\xc3\xb3ra przekazan\xc4\x85 funkcj\xc4\x99 aplikuje na argumentach 2 i 3.\n_START_SECTION_\nScheme\n_START_PARAGRAPH_\n(define two_pi 6.28318)(define (apply2_3 f) (f 2 3))(/ two_pi 3.14159);; 2.0(apply2_3 +);; 5(apply2_3 >);; #f\n_START_SECTION_\nCommon Lisp\n_START_PARAGRAPH_\nIstniej\xc4\x85 osobne systemy definiowania funkcji i definiowania sta\xc5\x82ych._NEWLINE_Funkcje przekazywane jako argumenty trzeba poprzedzi\xc4\x87 #\'_NEWLINE_(defconstant two_pi 6.28318)(defun apply2_3 (f) (funcall f 2 3))(/ two_pi 3.14159);; 2.0(apply2_3 #\'+);; 5(apply2_3 #\'>);; nil\n_START_SECTION_\nEmacs Lisp\n_START_PARAGRAPH_\n(defconst two_pi 6.28318)(defun apply2_3 (f) (funcall f 2 3))(/ two_pi 3.14159);; 2.0(apply2_3 #\'+);; 5(apply2_3 #\'>);; nil\n_START_SECTION_\nClojure\n_START_PARAGRAPH_\n(def two_pi 6.28318)(defn apply2_3 [f] (f 2 3))(/ two_pi 3.14159);; 2.0(apply2_3 +);; 5(apply2_3 >);; false\n_START_SECTION_\nFunkcje logiczne\n_START_PARAGRAPH_\nW Scheme oraz Clojure do\xc5\x9b\xc4\x87 konsekwentnie stosuje si\xc4\x99 zasad\xc4\x99 ko\xc5\x84czenia funkcji zwracaj\xc4\x85cych warto\xc5\x9bci logiczne znakiem zapytania:_NEWLINE_(equal? 3 4);; #f(equal? 4 4);; #t_NEWLINE_Czego nie robi si\xc4\x99 w innych omawianych Lispach:_NEWLINE_(equal 3 4);; nil(equal 4 4);; t_NEWLINE_Pytania o typ w Scheme ko\xc5\x84cz\xc4\x85 si\xc4\x99 r\xc3\xb3wnie\xc5\xbc znakiem zapytania:_NEWLINE_(number? "cztery");; #f(number? 4);; #t_NEWLINE_Natomiast w innych Lispach liter\xc4\x85 p:_NEWLINE_(numberp "cztery");; nil(numberp 4);; t\n_START_SECTION_\nFunkcje anonimowe i mapowanie list\n_START_PARAGRAPH_\nFunkcje anonimowe tworzy si\xc4\x99 za pomoc\xc4\x85 wyra\xc5\xbcenia lambda i stosuje jak normalne funkcje:_NEWLINE_(lambda (x) (+ x 1))((lambda (x) (+ x 1)) 2);; 3_NEWLINE_Do mapowania w Scheme s\xc5\x82u\xc5\xbcy procedura map:_NEWLINE_(map (lambda (x) (+ x 1)) \'(1 2 3));; (2 3 4)_NEWLINE_W Clojure do tworzenia funkcji anonimowej stosuje si\xc4\x99 wyra\xc5\xbcenie fn_NEWLINE_(map (fn [x] (+ x 1)) \'(1 2 3));; (2 3 4)_NEWLINE_W przypadku dialekt\xc3\xb3w Common Lisp i Emacs Lisp, ze wzgl\xc4\x99du na istnienie dw\xc3\xb3ch przestrzeni nazw (dla zmiennych i funkcji),  przekazuj\xc4\x85c procedur\xc4\x99 wy\xc5\xbcszego rz\xc4\x99du jako parametr, nale\xc5\xbcy j\xc4\x85 poprzedzi\xc4\x87 znakami cytatu #\'_NEWLINE_(defun plus1 (x) (+ x 1))(mapcar #\'plus1 \'(1 2 3));; (2 3 4)_NEWLINE_W przypadku przekazywania do funkcji mapcar jako pierwszy parametr, wyra\xc5\xbcenia lambda znaki cytatu s\xc4\x85 opcjonalne._NEWLINE_(mapcar (lambda (x) (+ x 1)) \'(1 2 3));; (2 3 4)'