eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingjezyki z definiowaniem operatorow › Re: definiowanie operatorow - lisp
  • Data: 2012-05-16 16:09:39
    Temat: Re: definiowanie operatorow - lisp
    Od: Piotr Chamera <p...@p...onet.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2012-05-16 14:12, f...@N...gazeta.pl pisze:
    > Piotr Chamera<p...@p...onet.pl> napisał(a):
    >
    >> W dniu 2012-05-16 13:32, f...@N...gazeta.pl pisze:
    >>>> albo można je łatwo zdefiniować:
    >>>
    >>>> (defun printall (&rest all)
    >>>> (dolist (x all) (princ x)))
    >>>
    >>>> CL-USER> (printall "ala" "ma" "kota")
    >>>> alamakota
    >>>> NIL
    >>>
    >>> no nawet w miare w tej linijce (printall "ala" "ma" "kota")
    >>> bo krotko, ale w c mogloby byc czesto mniej o nawias,
    >>>
    >>> a co to jest "&rest" i "(x doall)" ?
    >>
    >> (&rest all) oznacza mniej więcej tyle, że wszystkie pozostałe argumenty
    >> przekazane do funkcji zostaną zebrane w listę i będzie ona w ciele
    >> funkcji dostępna pod podaną nazwą (w tym przypadku nazwałem ją „all”)
    >> A to (dolist (x all) (princ x)) po prostu iteruje po liście i na każdym
    >> elemencie „x” na liście „all” wykonuje funkcję „princ”.
    >
    > a czemu& przed rest, pewnie i rest i dolist i defun sa sowami
    > kluczowymi wiec po co& przed rest?

    Tak to zdefiniowano w języku, że przy definiowaniu sygnatury funkcji
    można użyć symboli ,,&rest", ,,&optional", ,,&key", ,,&aux" (i innych)
    i mają one w tym kontekście jakieś określone znaczenie dla kompilatora.
    Poza tym można zdefiniować funkcję lub makro o takiej nazwie i niczemu
    to nie przeszkadza:

    CL-USER> (defun &rest (x) x)
    &REST

    CL-USER> (&rest 1)
    1

    CL-USER> (defun printall (&rest all) (map nil #'princ all))
    PRINTALL

    CL-USER> (printall "ala" "ma" "kota" 123)
    alamakota123
    NIL

    CL-USER> (&rest "abc1")
    "abc1"

    ,,Dolist" i ,,defun" są zwykłymi symbolami, do których standardowo
    ,,przypisane" są makra odpowiednio: iterujące po liście i definiujące
    funkcję, ale można im przypisać inne operacje. W Common Lispie nie ma
    słów kluczowych w takim znaczeniu jak w C, kompilator (lub interpreter)
    operuje na listach symboli. Pierwszy symbol na liście jest
    ,,operatorem", reszta ,,argumentami". To jak ta reszta jest traktowana,
    zależy od tego do czego ewaluuje się ,,operator" - makra, funkcji, czy
    czegoś jeszcze innego.



Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: