Lisp (programlingvo): Malsamoj inter versioj

[nekontrolita versio][nekontrolita versio]
Enhavo forigita Enhavo aldonita
reverkita
e preseraroj
Linio 9:
Ĉefaj datumoj estas '''atomoj''' - [[nombro]]j, [[konstanto]]j, [[literĉeno]]j, kaj '''listoj''' (finhava vico de esprimoj - atomoj kaj/aŭ aliaj listoj, metita en rondajn krampojn). Ekzemple: <code>(abc 123 "eĥoŝanĝo" (ĉiuĵaŭde))</code> - listo el kvar elementoj, la kvara estas ankaŭ listo.
 
Ĉiu celo de listoj en lispo (nomata ''cons'') estas paro de kapo kaj vosto. La kapo estas la unua elemento de la listo (t.n. ''car''), kaj vosto - estas resto de la listo (t.n. ''cdr''). En la [[punkto-notacio]] tio skribatas: <code>(kapo . vosto)</code>. La supra listo en la punkto-notacio aspektas jene: <code>(abc . (123 . ("eĥoŝanĝo" . ((ĉiuĵaŭde . nil) . nil))))</code>, kie ''nil'' estas speciala atomo, signifanta malplenan liston = <code>()</code>.
 
== Funkcioj ==
'''Funkcioj''' estas skribataj ankaŭ en formo de listo: <code>(+ 1 2 3)</code>, kie la unua elemento estas nomo de funkcio, kaj la ceteraj estas ties parametroj. DefinojDefino de funkciojfunkcio estas voko de speciala funkcio <code>defun</code> (kiu havas tri argumentojn: nomo de nova funkcio, listo de ĝiaj argumentoj, kaj ĝia korpo). Jen estas defino de [[rekursia funkcio]] [[faktorialo]]:
<source lang=lisp>
(defun faktorialo (n)
Linio 25:
 
Aliaj funkcioj:
* ''quote'' - donas sian argumenton kiel simbolon, sed ne kiel variablon, do blokas ĝian kalkuladon: <code>(quote a)</code> --> a. Ekzistas mallongigo de tiu ĉi funkcio - apostrofo: <code>'a</code> --> a
* ''cons'' - kombinas liston el du siaj argumentoj: <code>(cons 'a 'b)</code> --> (a . b), <code>(cons 'a (cons 'b . nil))</code> --> (a b), <code>(cons 'a '(b c))</code> --> (a b c)
* ''car'' - kalkulas la unuan elementon de argumento - listo, aŭ donas nil-on, se la argumento ne estas listo: <code>(car '(a b c))</code> --> a
* ''cdr'' - kalkulas la reston de la listo sen la unua elemento: <code>(cdr '(a b c))</code> --> (b c)
* ''atom'' - logika funkcio, kiu kontrolas, ĉu la argumento estas atomo
* ''eq'' - logika funkcio, kiu kontrolas, ĉu la du argumentoj estas egalaj atomoj
 
Ĉar en lispo kaj datumoj kaj funkcioj estas listoj, tial eblas skribi funkciojn, kiuj kreas novajn funkciojn aŭ ŝanĝas aliajn.