eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingMakra higieniczne w jezyku SchemeRe: Makra higieniczne w jezyku Scheme
  • X-Received: by 10.140.85.228 with SMTP id n91mr2425qgd.21.1415779326706; Wed, 12 Nov
    2014 00:02:06 -0800 (PST)
    X-Received: by 10.140.85.228 with SMTP id n91mr2425qgd.21.1415779326706; Wed, 12 Nov
    2014 00:02:06 -0800 (PST)
    Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!
    r10no1740612igi.0!news-out.google.com!u1ni9qah.0!nntp.google.com!u7no1018459qaz
    .1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
    Newsgroups: pl.comp.programming
    Date: Wed, 12 Nov 2014 00:02:06 -0800 (PST)
    In-Reply-To: <a...@4...com>
    Complaints-To: g...@g...com
    Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=89.67.197.135;
    posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
    NNTP-Posting-Host: 89.67.197.135
    References: <5...@g...com>
    <a...@4...com>
    User-Agent: G2/1.0
    MIME-Version: 1.0
    Message-ID: <6...@g...com>
    Subject: Re: Makra higieniczne w jezyku Scheme
    From: g...@g...com
    Injection-Date: Wed, 12 Nov 2014 08:02:06 +0000
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    Xref: news-archive.icm.edu.pl pl.comp.programming:206933
    [ ukryj nagłówki ]

    W dniu środa, 12 listopada 2014 05:42:15 UTC+1 użytkownik A. L. napisał:
    >
    > A do czego to sie moze przydac?...

    Zastosowaniom zamierzalem wprawdzie poswiecic osobny rozdzial,
    ale moge co nieco opowiedziec juz teraz. Ostatnio musialem napsiac
    taki kod w javascripcie:

    function allowedMoves(board, position) {
    var x = position[0];
    var y = position[1];

    var result = [];

    for(var i = x-1; i >= 0 && !board[i][y]; --i) {
    result.push([i,y]);
    }
    for(var i = x+1; i < board.length && !board[i][y]; ++i) {
    result.push([i,y])
    }
    for(var j = y-1; j >= 0 && !board[x][j]; --j) {
    result.push([x,j]);
    }
    for(var j = y+1; j < board[x].length && !board[x][j]; ++j) {
    result.push([x,j])
    }
    return result;
    }

    Sa tutaj cztery petle, z ktorymi niewiele tak naprawde mozna
    zrobic. Sa tez cztery okazje do popelnienia bledow. (Nawiasem
    mowiac, przy pisaniu tego kodu rzeczywiscie popelnilem blad,
    ktory byl dosc trudny do znalezienia)

    Gdybym mial w JS do dyspozycji system makr, moglbym napisac cos
    w stylu, powiedzmy

    function allowedMoves(board, position) {
    var x = position[0];
    var y = position[1];

    var result = [];
    var W = board.length;
    var H = board[0].length;

    with_syntax(mark($, <>, limit, n, over, p, q),
    for(var n = over $ 1; n <> limit && !board[p][q]; n = n $ 1) {
    result.push([p,q]);
    })
    {
    mark(-, >=, 0, i, x, i, y);
    mark(+, <, W, i, x, i, y);
    mark(-, >=, 0, j, y, x, j);
    mark(+, <, H, j, y, x, j);
    }
    return result;
    }

    Wprawdzie dlugosc kodu jest porownywalna, ale wszystkie pojawiajace
    sie w nim nietrywialne powtorzenia strukturalne zostaly wyekstrahowane
    do makra, co ulatwia utrzymanie kodu i zmniejsza mozliwosc popelnienia
    bledu.

    Pozniej postaram sie podac bardziej zaawansowane przyklady.

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: