atarionline.pl
atarionline.pl Atari
Login:
Hasło:
Zapamiętaj mnie
Google  
Translate to RSS RSS

Multiplatformowe zloty z 10.09.2010 (4)
Glut zaprasza... z 05.09.2010 (30)
Premiera "Little 15" z 02.09.2010 (43)
Premiera gry "kung-fu fighting" z 01.09.2010 (58)
Wywiad z członkiem HTT z 29.08.2010 (8)
Premiera "Robbo Lutry" z 28.08.2010 (17)
Kurs C na Atari cz.3 z 26.08.2010 (7)
Kurs C na Atari cz.2 z 25.08.2010 (22)
Nowy "Fail" z 25.08.2010 (4)
Cyfrowe marzenia z 24.08.2010 (1)
"Atalan Sokoban" z 23.08.2010 (18)
Rzadkości użytkowe z 22.08.2010 (6)
"Highway Encounter" z 21.08.2010 (6)
Kurs C na Atari z 20.08.2010 (41)
Abandonware z 15.08.2010 (94)
Filmy dla sekty z 15.08.2010 (29)
Opis Mario Bros z 11.08.2010 (6)
Atalan dojrzewa z 09.08.2010 (28)
Będziemy na Allegro Party z 08.08.2010 (11)
Planowe włączenie z 08.08.2010 (12)
«« nowszestarsze »»

Pomocnik/Helper
Gry/Games

Katalog gier

Opisy gier
Mario Bros opisał Urborg (13)
Xenophobe opisał Urborg (28)
Robbo Forever opisał tbxx (5)
Kolony 2106 opisał tbxx (0)
Archon II: Adept opisał Urborg/TDC (6)
Spitfire Ace/Hellcat Ace opisał Farscape (6)
Wyspa opisał Kaz (9)
Archon opisał Urborg/TDC (12)
The Last Starfighter opisał TDC (28)
Dwie Wieże opisał Muffy (15)
Basil The Great Mouse Detective opisał Charlie Cherry (8)
Inny Świat opisał Charlie Cherry (17)
Inspektor opisał Charlie Cherry (18)
Grand Prix Simulator opisał Charlie Cherry (16)
Rescue On Fractalus opisał Kaz (16)
Stranded opisał Kaz (8)
Gunslinger opisał Dracon (5)
Space 1999 opisał Kaz (4)
Pięć Gówien Eepcha opisał Kaz (10)
Mózgprocesor opisał Kaz (30)
«« nowszestarsze »»

Użytki/Utils
Wewnętrzne/Internals



   Nowinki tworzone dzięki CuteNews
FAQ o języku LogForth
Poniższe informacje zostały przygotowane przez Pawła "Cosi" Piątkowskiego, który jest jednocześnie autorem programu - mieszanki Logo i Forth - pod nazwą "LogForth":

1. Co to jest LogForth?

LogFORTH jest biblioteką języka Logo, umożliwiającą programiście korzystanie z konstrukcji języka Forth w środowisku Logo.

2. Z czego się składa LogForth?

Na dysku znajduja sie nastepujace pliki:

  • DOS.SYS
  • CP.SYS - pliki systemowe DOSa
  • AUTORUN.SYS - interpreter Logo
  • LOGFORTH - biblioteka LogFORTH
  • LIBCOSI - biblioteka libcosi
  • BENCH - biblioteka benchmark
  • CZYTAJ.DOC - ta dokumentacja

Po uruchomieniu interpretera należy wpisać:
LOAD "D:LOGFORTH



3. Lista funkcji

  • OPER lista

    Wykonuje podaną listę działań Forth-a. Dostepnę operacje:
    liczba rzeczywista - wrzuca podana liczbe na stos
    + - * / - wykonuje odpowiednie działanie, zgodnie z konwencja RPN (odwrotna notacja polska)
    . - ściąga liczbę ze stosu i wypisuje na ekran
    SWAP - zamienia miejscami dwa górne elementy stosu
    DUP - kopiuje górny element stosu
    DROP - usuwa górny element ze stosu
    :procedura - wykonuje zdefiniowaną w Logo procedurę o podanej nazwie.

    Przykład:
    OPER [2 4 * .]
    wykonuje działanie 2*4 i wypisuje wynik na ekran.

  • DOLOOP lista

    Wykonuje pętlę zgodnie z konwencją Fortha. Dwa górne elementy stosu oznaczają kolejno początkowy i końcowy stan licznika. Lista działań jak w funkcji OPER, dodatkowo I wrzuca na stos aktualną wartość licznika. Przykład:
    OPER [11 1] DOLOOP [I 2 * .]
    wyświetla 10 kolejnych liczb parzystych.

  • S?

    Zwraca wartość górnego elementu stosu, jednocześnie ściągając go. Przykład:
    OPER [2 4 *] PRINT S?
    wyświetla wynik mnożenia 2*4 (jak w pierwszym przykładzie).

  • S! element

    Wrzuca na stos podany element. Przykład:
    S! FIRST RL OPER [DUP * .]
    pobiera z klawiatury liczbę, a następnie wyświetla kwadrat tej liczby.

    Biblioteka libcosi

    Zawiera kilka dodatkowych funkcji, rozszerzajacych mozliwosci Logo. Nie jest wymagana przez "LogFORTH". Bibliotekę wczytujemy wpisując:
    LOAD "D:LIBCOSI

    Funkcje:

    # komentarz

    Komentarz.

    @ "zmienna wartosc

    Synonim dla MAKE.

    ASM adres kod

    Umieszcza w podanym miejscu w pamięci kod maszynowy. Przykład:
    ASM 709 [10 80 126 50]

    $ lista

    Zwraca podaną listę jako słowo. Przykład:
    SHOW $ [ALA MA KOTA]

    FOR "zmienna od do blok
    Iteruje blok po zmiennej, od wartości "od" do wartości "do". Przykład:
    FOR "T 1 10 [PR :T]

    FOREACH lista "zmienna blok

    Wykonuje podany blok dla każdego klucza listy, przekazując ten klucz do zmiennej. Przykład:
    FOREACH [1 2 A] "T [PR :T]

    LGET "lista
    Zwraca ostatni element z listy, usuwając go jednocześnie z tej listy. Przykład:
    @ "LI [A B C D]
    PR LGET "LI
    SHOW :LI

    FGET "lista

    Jak wyżej, z tym że pobiera pierwszy element listy.

    SLICE lista n

    Zwraca n-ty element listy. Przykład:

    PR SLICE [A B C D] 3

    SETSLICE "lista n wartosc

    Ustawia wartosc n-tego elementu listy. Przykład:
    @ "LI [1 2 3 4]
    SETSLICE "LI 2 "X
    SHOW :LI

    INC "zmienna

    Zwiększa o 1 wartość zmiennej liczbowej.

    DEC "zmienna

    Zmniejsza wartość zmiennej.

    Biblioteka bench

    Zawiera tylko jedną funkcję, pozwalająca na testowanie czasu wykonania procedur. Aby ją wczytać, należy wpisać:
    LOAD "D:BENCH
    Wywołanie:
    TEST [polecenie]
    Po zakończeniu działania procedury funkcja wyświetla czas jej wykonania.

    4. Jak korzystać?

    W trybie bezpośrednim Fortha wpisujemy dane i słowa oddzielone spacjami. Jeżeli wpiszemy liczbę, wskakuje na stos; jeżeli operator matematyczny, ze stosu pobierane są dwie liczby, a następnie wrzucany wynik. Jeżeli wpiszemy:

    5 4 + 3 * .

    to Forth wrzuci na stos dwie liczby (5 i 4), doda to siebie, wynik pomnoży przez 3, a następnie wyświetli wynik (kropka).

    Liczbami na stosie można operować za pomocą słów DUP, DROP i SWAP. Pierwsze kopiuje liczbę znajdującą się na szczycie stosu, drugie usuwa górną liczbę ze stosu, a trzecie zamienia miejscami dwie górne liczby. W LogFORTHcie to samo uzyskujemy za pomocą funkcji OPER. Poprzedni przykład można zapisać jako:

    OPER [5 4 + 3 * .]

    5. Różnice w stosunku do Fortha

  • dostępny jest tylko tryb bezpośredni; odpowiednikiem trybu kompilowanego są deklaracje procedur w Logo
  • LogFORTH operuje na liczbach rzeczywistych (fig-FORTH na całkowitych)
  • nie ma możliwości zagnieżdżania pętli DOLOOP (trzeba zamiast tego użyć polecenia REPEAT)

    6. Wady i niedociągnięcia (bo przecież jakieś muszą być!)

  • WYDAJNOŚĆ!!! chciałbym powiedzieć, że LogFORTH łączy elastyczność Logo z szybkością Fortha, ale tak nie jest. Kiepska wydajność Logo to jest najsłabsze ogniwo we wszystkich projektach związanych z tym językiem
  • wpisanie "nielegalnych" słów w instrukcji OPER nie powoduje wyświetlenia błędu; zamiast tego program ignoruje błędny fragment (a tak nie powinno być)

    7. Wstawki maszynowe w Logo

    To jest chyba jedyny sposób, żeby poprawić wydajność programów, nie przepisując przy tym od nowa interpretera Logo. Niestety, albo i stety, nie w całej pamięci można pisać. Według książki "Języki Atari XL/XE" wersja kartridżowa zostawia dla użytkownika obszar od $600 do $7FFF. W przypadku wersji dyskowej trzeba od tego odjąć jeszcze miejsce na DOS-a. Zostaje powiedzmy obszar $1E00-$7FFF, KTÓRY JEST PRZEZNACZONY NA DANE I PROGRAMY, tak więc na przykład zadeklarowanie nowej zmiennej może nam skasować wstawkę maszynową, jak również wstawka maszynowa może nadpisać kod w Logo (co zazwyczaj powoduje zwis).

    Jak widać, sytuacja nie jest za ciekawa. Bez problemów można pisać po obszarze rejestrów i Display List - można w ten sposób nawet ingerować w obszar grafiki żółwi. Natomiast nie udało mi się wymyślić, gdzie można bezpiecznie umieścić kod maszynowy. Pewnym rozwiązaniem jest oczywiście pilnowanie zużycia pamięci i liczenie po cichu na to, że nasz kod nie zostanie zamazany, ale Logo ma tak nieszczęśliwie rozwiązany mechanizm garbage collection, że po krótszym lub dłuższym czasie i tak zmienne wejdą w obszar, gdzie jest wstawka.

    Mam nadzieję, że teraz, kiedy udało się wywołać pewne zainteresowanie językiem Logo, ktoś bardziej obeznany z mapą pamięci Atari odkryje, gdzie można umieszczać procedury maszynowe. A to dałoby nam już połączenie Logo, Fortha i języka maszynowego :-D

    8. Sztuczki w Logo

    Programowanie na piecu przyzwyczaja człowieka do pewnych rzeczy, bez których trudno się potem obejść. Twórcy Logo nie przewidzieli ich wykorzystania, ale można je uzyskać okrężną drogą:

  • Pętle WHILE
    Logo niestety jest pozbawione podstawowych elementów programowania strukturalnego, jakimi są pętle. Zamiast tego zalecana jest rekurencja (pomijam fakt, jakie to nieoptymalne). W ten sposób łatwo zaprojektować pętlę:

    TO FUNKCJA
    MAKE "N 10
    PR [START]
    WHILE
    PR [KONIEC]
    END
    TO WHILE
    IF :N>0 [PR :N MAKE "N :N-1] [STOP]
    WHILE
    END


  • Funkcje o zmiennej liczbie parametrów
    Baardzo przydatna rzecz. Można ją zrealizować, przekazując do funkcji parametry w formie listy (tak jak to jest robione w Perlu):

    TO FUNKCJA :LISTA
    IF EMPTYP :LISTA [STOP]
    MAKE "PARAM FIRST :LISTA
    ...
    FUNKCJA BF :LISTA
    END


  • Tablice asocjacyjne
    Kolejna fajna rzecz z Perla :)

    MAKE "LISTA [[IMIE JAN] [NAZWISKO NOWAK] [WIEK 37]]
    FIRST SLICE :LISTA numer (tak uzyskujemy klucz)
    LAST SLICE :LISTA numer (a tak wartość)

    (SLICE jest funkcją z biblioteki libcosi)

  • Odwołanie do zmiennej przez nazwę (referencje)
    To nie jest żadna sztuczka, tylko normalny element języka. Ale spróbujcie mi pokazać atarowski język, który to umożliwia ;)

    MAKE "REF1 "REF2
    MAKE "REF2 "X
    MAKE "X 10
    PR THING THING THING "REF1
    albo
    PR THING THING :REF1

    (to taka mocno zagnieżdżona referencja)

  • Pseudostałe
    Logo nie obsługuje stałych. Ale:

    TO PI
    OP 3.14159
    END
    MAKE "S PI*:R*:R


  • Zmienne lokalne
    Tego też niby nie ma w Logo. Można to prosto zrealizować, wykorzystując fakt, że parametry funkcji są lokalne:

    MAKE "X 10
    TO FUNKCJA :X
    MAKE "X 20
    PR :X
    END
    FUNKCJA 0
    PR :X


  • Tablice n-wymiarowe (Bajtek 5/87)
    Bardzo ciekawy sposób, w dodatku pozwalający na zakładanie bardzo dużych tablic bez obciążania pamięci. Wykorzystuje zwykłe zmienne o odpowiednich nazwach, w tym przypadku tablica#i,j:

    TO TAB :NAZWA :I :J
    OP (WORD :NAZWA "# :I ", :J)
    END
    MAKE (TAB "A 5 4) "ABC (tworzy "komórkę" A[5,4])
    PR THING (TAB "A 5 4)
    albo
    PR :A#5,4 (wypisuje zawartość komórki)


    23.06.2009 by Kaz
    komentarzy: 0
  • nickname
    e-mail / website (opcjonalnie)
    Aktualne tematy
    Ripek i Mona Liza (3)
    ostatni: 10-09-2010 22:54, Alex
    Ciekawostki (135)
    ostatni: 10-09-2010 22:51, nosty
    Gamer (2)
    ostatni: 10-09-2010 22:51, Alex
    Deimos (5)
    ostatni: 10-09-2010 19:43, Kadin1796
    Radiokomputer (66)
    ostatni: 10-09-2010 17:13, Bas
    Atari Font Mover (4)
    ostatni: 10-09-2010 15:31, QTZ
    Król Atari (7)
    ostatni: 10-09-2010 14:33, Cosi
    cc65 - jak napisać prostą grę. (33)
    ostatni: 10-09-2010 13:14, Kaz
    Corina (1)
    ostatni: 10-09-2010 12:03, Kaz
    ATALAN - new programming language (103)
    ostatni: 10-09-2010 10:14, rudla
    Porownanie jezykow programowania (41)
    ostatni: 09-09-2010 22:43, rudla
    Riverwash 2010 (18)
    ostatni: 08-09-2010 22:19, insert
    Altirra (14)
    ostatni: 08-09-2010 22:03, Kaz
    Gry w Atalan (16)
    ostatni: 08-09-2010 18:31, Cosi
    Strona o Robbo - dyskusja (16)
    ostatni: 07-09-2010 13:23, przyjazn

    Kategorie Forum Atarum

    Użytkowników: 528
    Ostatnio zarejestrowany: DejesusCHANDRA24
    Postów ostatniej doby: 28

    Społeczność/Community


    Rozmawiali
    Richard "The Wizard" Vermeulen i Kaz (9)
    Piotr Mańkowski i Kaz (28)
    Maciej "Wiewiór" Wiewiórski i Kaz (4)
    Marcin "Kaczor" Baryłka i Charlie Cherry (24)
    Adam Mateja i Charlie Cherry (7)
    Konrad "Scorpio" Rąpalski i Kaz (15)
    Jakub Husak i Kaz (14)
    [ENG] Steve Hales i Charlie Cherry (0)
    Michał "Caruso" Brzezicki i Kaz (17)
    Henryk Karpowicz i Kaz (21)
    Bartłomiej Kluska i Kaz (15)
    Jarosław Kaczor i Kaz (8)
    Tomasz Rolewski i Kaz (5)
    [ENG] John Anderson i Charlie Cherry (2)
    Steve Hales i Charlie Cherry (16)
    Artur Moryto i Charlie Cherry (16)
    Marek "sivek" Siewior i Charlie Cherry (14)
    Dieter "Old Man Tower" Gretzschel i Kaz (8)
    John Anderson i Charlie Cherry (10)
    Dariusz Bartoszewski i Charlie Cherry (25)
    «« nowszestarsze »»

    Najbliższe imprezy
    Allegro Party 25 wrzesnia 2010 roku zapraszamy do Poznania
    ABBUC JHV 26 pazdziernika 2010 roku zapraszamy do Herten w Niemczech

    Sprzęt/Hardware

    Wynalazki
    SIO2SD w CA12 napisał Urborg (8)
    Ratowanie ATMEL-ów napisał Yoohaas (4)
    Projektowanie cartów napisał Zenon (9)
    Joystick do Atari napisał Larek (52)
    Tygrys Turbo napisał Kaz (4)
    Testowałem "Simple Stereo" napisał Zaxon (3)
    Rozszerzenie 1MB napisał Asal (18)
    Joystick trzyprzyciskowy napisał Sikor (17)
    Moje MyIDE oraz SIO2PC na USB napisał Zaxon (16)
    Jak wykonać płytkę drukowaną? napisał Zaxon (19)
    Rozszerzenie 576kB napisał Asal (11)
    Soczyste kolory napisał scalak (25)
    XEGS Box napisał Zaxon (13)
    Atari w różnych rolach napisał (7)
    SIO2IDE w pudełku napisał Kaz (5)
    Atari steruje tokarką napisał Kaz (11)
    DarkMouse napisał Kaz (7)
    Podwójna pamięć na cartridgu napisał Zenon (7)
    Zmiana barw i klawiszy napisał Kaczor (20)
    Odtwarzacz MP3 jako magnetofon Atari napisał Zaxon (17)
    «« nowszestarsze »»