eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingjezyki z definiowaniem operatorow › Re: definiowanie operatorow - lisp
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: Piotr Chamera <p...@p...onet.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: definiowanie operatorow - lisp
    Date: Wed, 16 May 2012 16:09:39 +0200
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 60
    Message-ID: <jp0cff$4nl$1@inews.gazeta.pl>
    References: <jou2mq$cm2$1@inews.gazeta.pl>
    <13379011.407.1337126305598.JavaMail.geo-discussion-forums@vbvq7>
    <jov6b8$t1i$1@inews.gazeta.pl> <jovv9l$onf$1@inews.gazeta.pl>
    <jp02of$56m$1@inews.gazeta.pl> <jp039a$6fd$1@inews.gazeta.pl>
    <jp04qj$as4$1@inews.gazeta.pl> <jp05k7$d7s$1@inews.gazeta.pl>
    NNTP-Posting-Host: public35634.xdsl.centertel.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1337177391 4853 79.163.139.50 (16 May 2012 14:09:51 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Wed, 16 May 2012 14:09:51 +0000 (UTC)
    X-User: p71a
    In-Reply-To: <jp05k7$d7s$1@inews.gazeta.pl>
    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20120428 Thunderbird/12.0.1
    Xref: news-archive.icm.edu.pl pl.comp.programming:197262
    [ ukryj 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: