Bajtek 7/1986
Bajtek Reduks 7/1986 v 0.8

Wreszcie postanowiłem zakończyć pracę nad nowym reduksem Bajtka 7/1986, numerem, którego udało mi się przetrzymać przed publikacją ładnych parę miesięcy, a wszystko to przez mapę do "Trzech tygodni w raju", która sprawiała sporo ...

Zobacz stronę związaną z tym artykułem w Reduksach Try2emu
Spis treści:

PROGRAMOWAĆ MOŻE KAŻDY

Marcin Waligórski

LOGO - Słownik minimum cz. III

Trzeci odcinek słownika dotyczy przetwarzania list, słów i liczb.
 

3.1. Operacje arytmetyczne

ARCCOS n → n

Funkcja arcus cosinus. Jej wartością jest miara kąta w stopniach.

TO WIEL.CZEBYSZEWA  :st  :x

OUTPUT COS  (:st ARCCOS

:x )

END

PRINT WIEL. CZEBYSZEWA 5 0 0

PRINT WIEL.CZEBYSZEWA 5 -1 

-1

 

ARCCOT n → n

Funkcja arcus cotangens. Jej wartością jest miara kąta w stopniach.

PRINT ARCCOT 0

90

PRINT ARCCOT 1

45

 

ARCSIN n → n

Funkcja arcus sinus. Jej wartością jest miara kąta w stopniach.

PRINT ARCSIN 0.5 

30

PRINT ARCSIN 1 

90

 

ARCTAN n → n

Funkcja arcus tangens. Jej wartością jest miara kąta w stopniach.

PRINT ARCTAN 0 

0

PRINT ARCTAN 1  / SQRT 3 

30

ATAN n  → n 

Patrz ARCTAN

 

COS n → n COSINE n → n

Funkcja cosinus. Jej argumentem jest wartość kąta w stopniach.

PRINT COS 90 

0

PRINT COS 6 0 

0.5

 

COT n  →  nCOTANGENT n  →  n

Funkcja cotangens. Argumentem jest wartość kąta w stopniach.

PRINT COT 45 1

PRINT COT 0

COT doesn't like 0 as input

 

DIV n n  → n

Iloraz dwóch liczb (pierwszego parametru przez drugi). .

PRINT DIV 16 4 

4

PRINT DIV 16 0

Can't divide by zero

 

INT n → n 

Część całkowita liczby.

PRINT INT 6.789 

6

PRINT INT -2.7 

-3

 

INTEGER n → n 

Patrz INT.

 

PRODUCT nn → n (PRODUCT n ...) → n 

Iloczyn liczb, stanowiących parametry;

TO POTĘGA :x  :wykl 

IF :wykl = 0  

[OP 1] OP PRODUCT  :x P

OTĘGA  :x  :wykl - 1 

END

PRINT 65536

POTĘGA 2  16

 

QUOTIENT n n → n 

Patrz DIV

 

RANDOM n  →  n 

Funkcja losowa o rozkładzie jednostajnym. Dla danego parametru naturalnego n wartością operacji jest losowa liczba naturalna z przedziału 0.. n-1 .

TO ZYGZAK  :dlug

REPEAT  :dlug  [FD 10 +

RANDOM 90

LT RANDOM 360]

END

ZYGZAK  10

 

REMAINDER n n  →  n 

Reszta z dzielenia pierwszego parametru przez drugi.

TO PARZYSTE   :n

OP 0  = REMAINDER  :n 2

END

PRINT PARZYSTE 666 

TRUE

 

ROUND n → n 

Zaokrąglenie parametru do najbliższej liczby całkowitej.

TO ZAOKR :x

OUTPUT  (ROUND 100  *  :x)

/  100 END

PRINT ZAOKR 2/3 0.67

 

SIN n → n SINE n → n

Funkcja sinus. Argumentem jest wartość kąta w stopniach.

PRINT SIN 180

0

PRINT SIN 30 

0.5

 

SORT n → n

Pierwiastek kwadratowy liczby nieujemnej, stanowiącej parametr.

PRINT SQRT 16 4

PRINT SQRT -3

SQRT doesn't like -3 as input

 

SUM n n→n (SUM n...)→n 

Suma liczb, stanowiących parametry;

TO SUMA :lista.skladn

IF EMPTYP  -.lista.skladn

[OP 03

OP SUM LAST :lista.skladn 

SUMA

BL :lista.skladn END

PRINT SUMA READLIST

12345678

36

 

TAN n → nTANGENT n → n

Funkcja tangens. Argumentem jest wartość kąta w stopniach.

PRINT TAN 45 1

PRINT TAN 90

TAN doesn't like 90 as input

 

n*n →n

n/n →n 

n + n →n 

n - n →n

Cztery podstawowe operacje arytmetyczne: mnożenie, dzielenie, dodawanie i odejmowanie (wykonywane w tej kolejności). W celu zmiany kolejności wykonywania działań używa się nawiasów okrągłych.

PRINT 3+3/2 

4.5

PRINT (3 + 3) / 2

 

3.2. Operacje logiczne

ALLOF p p → d (ALLOF p...) → p

Patrz AND

 

AND p p → p (AND p...) → p

Koniunkcja wyrażeń logicznych, stanowiących parametry operacji. (AND przyjmuje wartość TRUE, jeżeli wszystkie jego parametry mają wartość TRUE).

PRINT AND TRUE TRUE TRUE

PRINT (AND TRUE FALSE

TRUE TRUE)

FALSE

 

ANYOF p p → p (ANYOF p...)→ p

Patrz OR 

 

NOT p → p

Zaprzeczenie wyrażenia logicznego, będącego parametrem.

TO MNIEJSZE.RÓWNE   :x  :y 

OUTPUT NOT  :x >  :y 

END

PR MNIEJSZE.RÓWNE 3  

3 TRUE

 

OR p p → p (OR p...)→p

Alternatywa wyrażeń logicznych, stanowiących parametry operacji. (OR przyjmuje wartość FALSE, jeżeli wszystkie jego parametry mają wartość FALSE.

PRINT OR TRUE FALSE TRUE

PR OR OR TRUE FALSE OR

FALSE FALSE

TRUE

Operatory służące do porównywania liczb (w przypadku znaku równości — dowolnych dwóch obiektów.

PRINT 2=3 FALSE

PRINT 1.6E12 < 1.5E13 

TRUE

 

3.3. Zmienne

MAKE s nsl

Nadanie zmiennej o nazwie podanej jako pierwszy parametr wartości określonej przez parametr drugi. Jeżeli dana nazwa zmiennej pojawia się po raz pierwszy, tworzona jest nowa zmienna o tej nazwie, a następnie nadawana jej żądana wartość.

MAKE  "x  "iks

MAKE  :x  [120  130  140  150] PRINT  :x 

iks

PRINT  :iks

120  130  140  150

 

NAMEP s → p

Operacja określająca, czy dane słowo jest nazwą istniejącej zmiennej.

MAKE "y 130

PRINT NAMEP  "y

TRUE

PRINT NAMEP "namep FALSE

 

THING s → nsl :s→nsl

Aktualna wartość zmiennej, której nazwa podana jest jako parametr.

MAKE "alfa "beta

MAKE :alfa "gamma

PRINT  :alfa

beta

PRINT THING "alfa beta

PRINT THING :alfa gamma

PRINT THING THING "alfa gamma

PRINT THING THING  :alfa 

gamma has no value 

PRINT ::alfa 

:alfa has no value

 

THING? s → p

Patrz NAMEP 

 

3.4. Listy i słowa

ASCII s → n

Numer podanego jako parametr znaku w kodzie ASCII.

TO SZYFR :slowo

IF EMPTYP:slowo  [OP:słowo]

OP WORD CHAR 1 + ASCII

FIRST: slowo

SZYFR BF  :slowo

END

PR SZYFR "mikrokomputer

njlsplpnqvufs

 

BUTFIRST sl → sl BF sl → sl

Operacja, której wynikiem jest podany jako parametr obiekt bez pierwszego elementu.

PRINT BUTFIRST "ucho

cho

PRINT BF  [Dzien dobry  !] 

dobry  !

PRINT BUTFIRST  [] BUTFIRST doesn't like [] as input

 

BUTLAST sl → sl BL sl → sl

Operacja, której wynikiem jest dany obiekt bez ostatniego elementu. 

TO ROZWIN  :obiekt 

IF EMPTYP :obiekt [STOP] 

ROZWIN BUTLAST  :obiekt 

PRINT :obiekt 

END

ROZWIN "kwiat 

k

kw 

kwi 

kwia 

kwiat

 

CHAR n→s

Znak kodu ASCII odpowiadający podanej jako parametr liczbie.

TO DUZE  :slowo IF EMPTYP:słowo [OP:slowo] MAKE  "znak FIRST :slowo MAKE  "numer ASCII :znak OP WORD(IF AND(96<:numer) (123>:numer)[CHAR:numer-32] [:znak])  DUZE BF  :slowo END

PRINT DUZE  "Malutkie

MALUTKIE

 

COUNT sl → n

Ilość elementów danego obiektu. 

PRINT COUNT  [l 2 3 4 5] 5

PRINT COUNT 1234 4

PRINT COUNT SE  1  " 2

PRINT COUNT [] 0

 

EMPTYP sl→p

Operacja określająca, czy dany obiekt jest pusty (zawiera 0 elementów).

PRINT EMPTYP 0

FALSE

PRINT EMPTYP SE  [] [] TRUE

PRINT EMPTYP SE []  " FALSE

PRINT EMPTYP  " TRUE

 

EQUALP nsl nsl → p 

Operacja określająca, czy dane dwa obiekty są równe.

PRINT EQUALP TRUE  "TRUE TRUE

PRINT EQUALP TRUE  "true FALSE

PR EQUALP [l []]  SE  1 []

FALSE

 

FIRST sl →sl 

Operacja, której wynikiem jest pierwszy element podanego jako parametr obiektu.

PRINT FIRST  "LOGO

L

PRINT FIRST [Q W E R T Y] Q

PRINT FIRST []

FIRST doesn't like [] as input

 

FPUT nsl I → I 

Operacja, której wynikiem jest lista utworzona poprzez włączenie obiektu podanego jako parametr pierwszy na początek listy określonej przez parametr drugi.

TO PRZEWINIETA  :lista

OP FPUT LAST  :lista BL

:lista

END

PRINT PRZEWINIĘTA   [alfa beta gamma] 

gamma alfa beta

 

ITEM n l → nsl 

Operacja, której wynikiem jest określony przez pierwszy parametr element listy podanej jako parametr drugi.

TO ELT.LOSOWY  :lista

OP  ITEM 1 + RANDOM COUNT

:lista

:lista

END

REPEAT  3 [PRINT ELT.

LOSOWY  [a b

c d]]

a

d

b

 

LAST sl → sl

Operacja, której wynikiem jest ostatni element podanego jako parametr obiektu.

TO ZENSKI  :rzeczownik 

OP MEMBERP LAST :rzeczownik  [A a] 

END

PRINT ZENSKI "szafa TRUE

PR ZENSKI "krzeslo FALSE

 

LIST nsl nsl→I (LIST nsl...) → I

Operacja tworząca listę, zawierającą podane jako parametry obiekty.

SHOW LIST 1 2

[l 2]

SHOW (LIST [] 2  []) 

[[] 2 []]

 

LISTP nsl → s

Operacja określająca czy dany obiekt jest listą. 

PRINT LISTP  "Logo 

FALSE

PRINT LISTP  [Logo]

TRUE

 

LIST? nsl → p

Patrz LISTP

 

LPUT nsl I → I 

Operacja, której wynikiem jest lista powstała przez dołączenie obiektu określonego przez parametr pierwszy na koniec listy podanej jako parametr drugi.

PRINT LPUT "dobry  [Dzien] 

Dzien dobry

PRINT LPUT [a b] [c d e] c d e  [a b]

 

MAMBERP nsl I → p

Operacja określająca, czy obiekt podany jako parametr pierwszy jest elementem listy określonej przez parametr drugi.

PRINT MEMBERP  [] []

FALSE

PR MEMBERP " [] 

FALSE

PRINT MEMBERP [] [[]] 

TRUE

PRINT MEMBERP 12 [12 13 14] 

TRUE

 

NUMBERP nsl → p 

Operacja określająca, czy dany obiekt jest liczbą.

PRINT NUMBERP 2.78E9 

TRUE

PRINT NUMBERP  "232 

TRUE

PRINT NUMBERP WORD 2 ".05 

TRUE

 

NUMBER? nsl → p 

Patrz NUMBERP

SENTENCE nsl nsl→ I (SE nsl...)→ I

Operacja tworząca listę z podanych jako parametry obiektów. Jeżeli któryś z parametrów jest listą, jej zewnętrzne nawiasy są usuwane.

SHOW SENTENCE  1 2

[1 2]

SHOW (SE [] 2 []) 

[2]

 

WORD s s → s (WORD s...) → s

Operacja tworząca słowo złożone z podanych parametrów.

TO SKLEJONE   :lista

IF EMPTYP  :lista  [OP  " ]

OP WORD FIRST  :lista SKLEJONE BF :lista END

PR SKLEJONE [mikro komputer -1 986]

mikrokomputer-1986

WORDP nsl→p

Operacja określająca, czy dany obiekt jest słowem.

PRINT WORDP "alfa 

TRUE

PRINT WORD 234 TRUE

PRINT WORDP TRUE TRUE

PRINT WORDP [alfa beta] 

FALSE

 

WORD? nsl → p

patrz WORDP

Marcin Waligórski

Połączone artykuły
„LOGO – słownik minimum”
Marcin Waligórski - Bajtek 3-4/1986

Posługiwanie się LOGO przestaje powoli być problemem. Cykl publikacji w „Przeglądzie Technicznym”, „Informatyce” i „Bajtku” ułatwia poznanie podstawowych zasad posługiwania się tym językiem. Brak jeszcze kompletnego, systematycznego opisu Logo, a w szczególności jego dialektów innych niż SINCLAIR LOGO Oto ów Słownik Minimum:  

„LOGO — Słownik minimum cz. II”
Marcin Waligórski - Bajtek 5-6/1986

Drugi odcinek wykazu procedur LOGO obejmuje definiowanie procedur oraz ich modyfikację, instrukcje wejścia/wyjścia oraz instrukcje warunkowe, iteracyjne i sterujące.

„LOGO - Słownik minimum cz. III ”
Marcin Waligórski - Bajtek 7/1986

Trzeci odcinek słownika dotyczy przetwarzania list, słów i liczb.  

Czytaj także w dziale PROGRAMOWAĆ MOŻE KAŻDY
„Prolog - programowanie w języku logiki”
Adam Krauze - Bajtek 1/1986

PROLOG jest językiem nietypowym, programowanie w nim przypomina bardziej rozmowę niż operowanie nazwami zastrzeżonymi czy rozkazami jak w BA-SIC-u i PASCAL-u. Służy on do przetwarzania języków naturalnych, list danych itp...

Prolog - programowanie w języku logiki
„Trzeci wymiar”
Marcin Waligórski - Bajtek 1/1986

Starannie przemyślana grafika stanowi bardzo poważny atut Logo. Od niej też rozpoczyna się kurs tego języka w większości podręczników. Niniejszy artykuł adresowany jest do tych, którzy posiedli już umiejętność posługiwania się Logo w podstawowym zakresie. Treścią jego jest realizacja prostej grafiki trójwymiarowej.

„Ul - Mikrokomputerowy Model Rodziny Pszczelej”
Andrzej Migacz, Ryszard Tadeusiewicz{Zakład Biocybernetyki AGH w Krakowie} - Bajtek 1/1988

Utarł się pogląd, że mikrokomputery mogą być wykorzystywane głównie do zabawy i nauki, a jeśli powierza im się poważne funkcje, to zwykle dotyczą one codziennych prac domowych lub biurowych. Wyraźnie upośledza to inne zastosowania. Warto zatem podejmować próby przełamania tych stereotypów. Prezentowany program pozwala wykorzystać domowy komputer w... pszczelarstwie.

„LOGO – słownik minimum”
Marcin Waligórski - Bajtek 3-4/1986

Posługiwanie się LOGO przestaje powoli być problemem. Cykl publikacji w „Przeglądzie Technicznym”, „Informatyce” i „Bajtku” ułatwia poznanie podstawowych zasad posługiwania się tym językiem. Brak jeszcze kompletnego, systematycznego opisu Logo, a w szczególności jego dialektów innych niż SINCLAIR LOGO Oto ów Słownik Minimum:  

„Prolog cz. III”
Adam Krauze - Bajtek 3-4/1986

Zanim przejdziemy do tak ważnej części w Prologu jaką jest przetwarzanie list. omówimy jeszcze dwa warunki: forall oraz or.

„LOGO — Słownik minimum cz. II”
Marcin Waligórski - Bajtek 5-6/1986

Drugi odcinek wykazu procedur LOGO obejmuje definiowanie procedur oraz ich modyfikację, instrukcje wejścia/wyjścia oraz instrukcje warunkowe, iteracyjne i sterujące.

„LOGO - Słownik minimum cz. III ”
Marcin Waligórski - Bajtek 7/1986

Trzeci odcinek słownika dotyczy przetwarzania list, słów i liczb.  

„Zmienne dynamiczne”
Marek Wyrwidąb - Bajtek 2/1988

Zwolennikom i przeciwnikom Pascal-a z pewnością obrzydło już nieustanne wyliczanie zalet tego języka na łamach pism komputerowych (Znacie? No to posłuchajcie: modularność. przejrzysta struktura programów. definiowanie typów danych, zasada predefinicji pojeć, możliwość użycia rekurencji...)

„Transformacja”
Marcin Waligórski - Bajtek 3/1987

Poniższy program zrodził sie z potrzeby chwili. Przy okazji pisania artykułu „ZOSTAŃ FILMOWCEM” (zob. bieżący numer Bajtka) zainteresował mnie problem automatycznej generacji obrazów animowanych. Chodziło oczywiście o zaoszczędzenie czasu przy tworzeniu filmów.