Mieszanka LOGO i Forth by Kaz 2009-06-01 20:44:43

Paweł "Cosi" Piątkowski, który ostatnio uraczył nas implementacją na Atari uroczego języka ezoterycznego "BrainFuck", obecnie proponuje kolejną ciekawostkę: połączenie języka LOGO i Forth. Nieśmiało na forum objawił nam program LogFORTH, w tej chwili w wersji 0.1 czyli dość wczesnej. Zaintrygowany pomysłem, postanowiłem przedstawić zarówno pliczek jak i dokumentację:

Jak to ugryźć?

Na dysku znajduja sie nastepujace pliki:
Po uruchomieniu interpretera należy wpisać:
LOAD "D:LOGFORTH



Lista funkcji



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.
sikor 2009-06-01 22:00:24

Co do działań arytmetycznych w forthu (odwrotna notacja polska) proponuję także poczytać to: http://pl.wikipedia.org/wiki/Odwrotna_notacja_polska

Cosi 2009-06-01 22:45:33

Wbrew pozorom Odwrotna Notacja Polska też jest dla ludzi. Trochę to może "nienaturalne", ale jak się człowiek przyzwyczai, to skomplikowane obliczenia robi się wygodniej niż "naturalnymi metodami". Nie trzeba stosować nawiasów i nigdy nie ma dylematu, które działanie ma być pierwsze.
Najłatwiej poćwiczyć, zadając sobie działania, np.:
(7 + 13) * (4 - (3 + 8 / 2))
i rozpisując je w RPN, a potem sprawdzając wynik za pomocą Fortha albo LogFORTHa. Albo kalkulatora RPN, jak ktoś ma ;)

Kaz 2009-06-01 23:00:42

Poza tym w Forth chyba mozna spokojnie zdefiniowac slowa, ktore beda wykonywac odpowiednie dzialania matematyczne bez RPN. Wtedy wpisywalibysmy dzialanie normalnie, a slowo zalatwialoby zamiane podanych liczb na PRN i zwracalo wynik.

Cosi 2009-06-01 23:12:31

Można (jest takie słowo, które następny parametr traktuje jak poprzedni), ale Prawdziwy Programista Fortha nigdy by nie zrezygnował z RPN ;-D

Kaz 2009-06-01 23:29:47

Tak, a Prawdziwy Programista Atari zna tablice ATASCII na pamiec! :)

tdc 2009-06-02 00:38:49

Tak, zgadzam się z Cosi, odwrotna notacja polska jest całkiem, całkiem. Kedyś starałem się pisać wirusy w PS ;):)

laoo 2009-06-02 07:55:08

A u mnie na instytucie informatyki w zamierzchłych czasach najsilniejsze procesory miały drukarki. No i co? Pisało się program w postscripcie, który liczył co trzeba na drukarce i drukował wynik ;)

Koval 2009-06-02 14:02:32

Okładka tej książki do nauki Fortha rzeczywiście powala na kolana...:D

Cosi 2009-06-02 14:33:14

Tak właśnie wyglądają Programiści Fortha :D

Kaz 2009-06-02 14:34:37

Autor okladki wyszedl pewnie z zalozenia, ze nic tak nie nakreci mlodocianych programistow na nauke Forth-a jak polnaga laseczka i marzenie o umiesnionym torsie :).

Cosi 2009-06-05 14:01:12

Jakby ktoś chciał przerobić Fortha na klasyczną notację, to może wklepać:
: PLUS 32 WORD HERE NUMBER DROP + ;
(i analogicznie pozostałe działania).
Ale powtarzam: TO NIEELEGANCKIE ;-)

Kaz 2009-06-05 14:12:29

Eleganckim to trzeba byc na przyjeciach. Programowanie powinno byc skuteczne, a program dzialajacy ;)

Cosi 2009-06-05 14:55:15

No to dlatego na życzenie zaprezentowałem sposób ominięcia RPN - jak ktoś ma na nią alergię ;-)
Przy okazji to jest przykład, jakim elastycznym językiem jest Forth; można zdefiniować sobie własny słownik i, jeżeli ktoś ma życzenie, zrobić z Fortha np. Basica ;-P

Koval 2009-06-12 18:09:14

Toby dopiero była profanacja...;-P Cosi pewnie zszedłby na zawał...;)