Zapomniane hasło?   Poproś o członkostwo
|
||
nowsze | starsze |
«« nowsze | starsze »» |
0-9 | A | B | C | D |
E | F | G | H | I |
J | K | L | M | N |
O | P | Q | R | S |
T | U | V | W | X |
Y | Z | inne |
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:
Po uruchomieniu interpretera należy wpisać: LOAD "D:LOGFORTH 3. Lista funkcji 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. 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. 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). 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 6. Wady i niedociągnięcia (bo przecież jakieś muszą 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ą: 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ę:
Baardzo przydatna rzecz. Można ją zrealizować, przekazując do funkcji parametry w formie listy (tak jak to jest robione w Perlu):
Kolejna fajna rzecz z Perla :)
(SLICE jest funkcją z biblioteki libcosi) To nie jest żadna sztuczka, tylko normalny element języka. Ale spróbujcie mi pokazać atarowski język, który to umożliwia ;)
(to taka mocno zagnieżdżona referencja) Logo nie obsługuje stałych. Ale:
Tego też niby nie ma w Logo. Można to prosto zrealizować, wykorzystując fakt, że parametry funkcji są lokalne:
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:
2009-06-23 17:47 by Kaz
komentarzy: 2 |
wawrzyn @2010-10-08 00:08:55 |
Ciekawe, ze wybor padl wlasnie na Forth i Logo. Obydwa jezyki sa godne uwagi i niedoceniane. Forth ma nalepke archaicznego, Logo jezyka dla dzieci (choc projekt Starlogo temu skutecznie zaprzecza). Wracajac do Fortha - jego tworca, Chuck Moore, to niesamowicie ciekawa osoba. Przy okazji, ciekawe, czy powyzszy projekt to taka sztuka dla sztuki, czy autor zamierza do czegos go uzyc? |
Kaz @2010-10-08 02:55:50 |
Wawrzyn - na forum latwiej widac takie pytania, posty o LogForth sa tutaj: http://atarionline.pl/forum/comments.php... |
«« nowsze | starsze »» |
1. Biuro |
2. Grafika |
3. Muzyka |
4. Programowanie |
5. Magnetofon |
6. Stacja dyskietek |
7. DOS-y |
8. ROM-y |
9. Rozne |
A. Schematy |
B. Emulatory |
C. Edukacyjne |
D. Komunikacja |
E. Diagnostyczne |
F. Archiwizowanie i kompresowanie |
!info |
Z. Inne platformy |
«« nowsze | starsze »» |