RPL (język programowania) - RPL (programming language)
Paradygmat | Stos , ustrukturyzowany , zorientowany obiektowo |
---|---|
Zaprojektowany przez | Hewlett Packard |
Po raz pierwszy pojawiły się | 1984 (1986) |
OS | Kalkulatory HP |
Dialekty | |
RPL systemu, RPL użytkownika | |
Wpływem | |
RPN , Czwarty , Lisp |
RPL to system operacyjny ręcznego kalkulatora i język programowania aplikacji używany w kalkulatorach graficznych firmy Hewlett-Packard RPN (Reverse Polish Notation) z serii HP 28 , 48 , 49 i 50 , ale można go również używać w kalkulatorach innych niż RPN, takie jak serie 38 , 39 i 40 .
RPL to strukturalny język programowania oparty na RPN, ale równie zdolny do przetwarzania wyrażeń algebraicznych i formuł, zaimplementowany jako interpreter wątkowy . RPL ma wiele podobieństw do Forth , oba języki są oparte na stosie , a także LISP oparty na listach . W przeciwieństwie do poprzednich kalkulatorów HP RPN, które miały stały czteropoziomowy stos , stos używany przez RPL jest ograniczony jedynie dostępną pamięcią RAM kalkulatora .
RPL wywodzi się z centrum programistycznego HP Corvallis w stanie Oregon w 1984 roku jako zamiennik wcześniejszej praktyki implementacji systemów operacyjnych kalkulatorów w języku asemblera . Ostatni kalkulator kieszonkowy obsługujący RPL, HP 50g, został wycofany z produkcji w 2015 r. Istnieje jednak wiele emulatorów, które mogą emulować kalkulatory RPL HP, które działają na wielu systemach operacyjnych i urządzeniach, w tym na smartfonach z systemem iOS i Android.
Warianty
Wewnętrzny nisko- i średniopoziomowy wariant RPL, zwany System RPL (lub SysRPL ), jest używany w niektórych wcześniejszych kalkulatorach HP, a także w wyżej wymienionych, jako część ich języka implementacji systemu operacyjnego . W serii HP 48 ten wariant RPL nie jest dostępny dla użytkownika kalkulatora bez użycia narzędzi zewnętrznych, ale w serii HP 49/50 jest wbudowany kompilator do użycia SysRPL. Możliwe jest spowodowanie poważnej awarii podczas kodowania w SysRPL, więc należy zachować ostrożność podczas korzystania z niego. Wysoki poziom RPL użytkownika (lub UserRPL ) wersja językowa jest dostępna na wspomnianej kalkulatorów graficznych dla rozwoju tekstowych, jak i graficznych programów aplikacyjnych. Wszystkie programy UserRPL są wewnętrznie reprezentowane jako programy SysRPL, ale używają tylko bezpiecznego podzbioru dostępnych poleceń SysRPL. Sprawdzanie błędów, które jest częścią poleceń UserRPL, powoduje jednak, że programy UserRPL są zauważalnie wolniejsze niż równoważne programy SysRPL. Komenda UserRPL SYSEVAL nakazuje kalkulatorowi przetwarzanie wyznaczonych części programu UserRPL jako kodu SysRPL.
Bloki kontrolne
Bloki sterujące RPL nie są ściśle przyrostkowe . Chociaż istnieją pewne godne uwagi wyjątki, struktury bloków kontrolnych wyglądają tak, jak w standardowym języku wrostków. Kalkulator zarządza tym, umożliwiając implementację tych bloków, aby w razie potrzeby przeskoczyć do przodu w strumieniu programu.
Instrukcje warunkowe
JEŚLI/TO/INNIE/KONIEC
RPL obsługuje podstawowe testowanie warunkowe poprzez strukturę IF/THEN/ELSE. Podstawowa składnia tego bloku to:
IF condition THEN if-true [ELSE if-false] END
Poniższy przykład sprawdza, czy liczba na dole stosu to „1”, a jeśli tak, zastępuje ją liczbą „Równa jednemu”:
« IF 1 == THEN "Equal to one" END »
Konstrukcja JEŻELI ocenia warunek, a następnie sprawdza spód stosu pod kątem wyniku. W rezultacie RPL może opcjonalnie obsługiwać bloki IF w stylu FORTH, umożliwiając określenie warunku przed blokiem. Pozostawiając warunek pusty, instrukcja IF nie spowoduje żadnych zmian na stosie podczas wykonywania warunku i użyje do testu istniejącego wyniku na dole stosu:
« 1 == IF THEN "Equal to one" END »
IFT/IFTE
Testowanie warunkowe Postfix można wykonać za pomocą funkcji IFT („jeśli-to”) i IFTE („jeśli-to-inaczej”).
IFT i IFTE usuwają odpowiednio dwa lub trzy polecenia ze stosu. Najwyższa wartość jest oceniana jako wartość logiczna i, jeśli prawda, druga najwyższa wartość jest odkładana z powrotem na stos. IFTE zezwala na trzecią „inną” wartość, która zostanie odłożona z powrotem na stos, jeśli wartość logiczna jest fałszywa.
Poniższy przykład używa funkcji IFT, aby zdjąć obiekt z dołu stosu i, jeśli jest równy 1, zastępuje go „Jeden”:
« 1 == "One" IFT »
Poniższy przykład używa funkcji IFTE, aby zdjąć obiekt z dołu stosu i, jeśli jest równy 1, zastępuje go „Jeden”. Jeśli nie jest równy 1, zastępuje go ciągiem „Not one”:
« 1 == "One" "Not one" IFTE »
IFT i IFTE ocenią blok programu podany jako jeden z jego argumentów, umożliwiając bardziej zwartą formę logiki warunkowej niż struktura IF/THEN/ELSE/END. Poniższy przykład wyskakuje obiekt z dołu stosu i zastępuje go wartościami „Jeden”, „Mniej” lub „Więcej”, w zależności od tego, czy jest równy, mniejszy lub większy niż 1.
« DUP 1 == « DROP "One" » « 1 < "Less" "More" IFTE » IFTE »
PRZYPADEK/NASTĘPNIE/KONIEC
Aby obsługiwać bardziej złożoną logikę warunkową, RPL udostępnia strukturę CASE/THEN/END do obsługi wielu wyłącznych testów. Tylko jedna z gałęzi w instrukcji CASE zostanie wykonana. Podstawowa składnia tego bloku to:
CASE condition_1 THEN if-condition_1 END ... condition_n THEN if-condition_n END if-none END
Poniższy kod ilustruje użycie bloku CASE/THEN/END. Mając literę na dole stosu, zastępuje ją jej odpowiednikiem w postaci ciągu lub „Nieznaną literą”:
« CASE DUP "A" == THEN "Alpha" END DUP "B" == THEN "Beta" END DUP "G" == THEN "Gamma" END "Unknown letter" END SWAP DROP @ Get rid of the original letter »
Ten kod jest identyczny z następującym odpowiednikiem zagnieżdżonego bloku IF/THEN/ELSE/END:
« IF DUP "A" == THEN "Alpha" ELSE IF DUP "B" == THEN "Beta" ELSE IF DUP "G" == THEN "Gamma" ELSE "Unknown letter" END END END SWAP DROP @ Get rid of the original letter »
Zapętlone stwierdzenia
W NASTĘPNYM
RPL udostępnia instrukcję FOR/NEXT do przechodzenia z jednego indeksu do drugiego. Indeks pętli jest przechowywany w tymczasowej zmiennej lokalnej, do której można uzyskać dostęp w pętli. Składnia bloku FOR/NEXT to:
index_from index_to FOR variable_name loop_statement NEXT
Poniższy przykład wykorzystuje pętlę FOR do sumowania liczb od 1 do 10. Zmienna indeksu pętli FOR to „I”:
« 0 @ Start with zero on the stack 1 10 @ Loop from 1 to 10 FOR I @ "I" is the local variable I + @ Add "I" to the running total NEXT @ Repeat... »
START/DALEJ
Blok START/NEXT jest używany do prostego bloku, który biegnie od indeksu początkowego do indeksu końcowego. W przeciwieństwie do pętli FOR/NEXT zmienna zapętlająca nie jest dostępna. Składnia bloku START/NEXT to:
index_from index_to START loop_statement NEXT
DO/KROK i START/KROK
Zarówno FOR/NEXT, jak i START/NEXT obsługują przyrost kroku zdefiniowany przez użytkownika. Zastępując kończące słowo kluczowe NEXT słowem inkrementacyjnym i słowem kluczowym STEP, zmienna pętli będzie zwiększana lub zmniejszana o inną wartość niż domyślna wartość +1. Na przykład następująca pętla cofa się od 10 do 2, zmniejszając indeks pętli o 2:
« 10 2 START -2 STEP »
PODCZAS/POWTÓRZ/KONIEC
Blok WHILE/REPEAT/END w RPL obsługuje nieskończoną pętlę z testem warunku na początku pętli. Składnia bloku WHILE/REPEAT/END to:
WHILE condition REPEAT loop_statement END
DO/DO/KONIEC
Blok DO/UNTIL/END w RPL obsługuje nieskończoną pętlę z testem warunków na końcu pętli. Składnia bloku DO/UNTIL/END to:
DO loop_statement UNTIL condition END
Uwagi
- 1. ^ "RPL" wywodzi się od Reverse Polish Lisp według jego pierwotnych twórców, podczas gdy przez krótki czas w 1987 roku marketing HP próbował wymyślić dla niego backronimowy język proceduralny oparty na ROM . Ponadto inicjały RPL są czasami interpretowane jako Reverse Polish Logic lub Reverse Polish Language, ale nazwy te nie są oficjalne.
Zobacz też
- Język programowania (APL)
- Programowanie klawiszy FOCAL
- Język o wysokiej wydajności (HPL)
- Trygrafy HP
- Podstawowy język programowania (PPL)
- Zestaw znaków RPL
Bibliografia
Dalsza lektura
- Seria HP 48G — Podręcznik użytkownika (UG) (wyd. 8). Hewletta-Packarda . grudzień 1994 [1993]. KM 00048-90126, (00048-90104). Zarchiwizowane od oryginału w dniu 2016-08-06 . Pobrano 06.09.2015 . [2]
- Seria HP 48G — zaawansowany podręcznik użytkownika (AUR) (wyd. 4). Hewletta-Packarda . grudzień 1994 [1993]. HP 00048-90136, 0-88698-01574-2. Zarchiwizowane od oryginału w dniu 2016-08-06 . Pobrano 06.09.2015 . [3]
- Instrukcja obsługi kalkulatora graficznego HP 50g (UG) (1 wyd.). Hewletta-Packarda . Kwiecień 2006. HP F2229AA-90006 . Pobrano 06.09.2015 .
- Kalkulator graficzny HP 50g / 49g+ / 48gII zaawansowana instrukcja obsługi (AUR) (2 wyd.). Hewletta-Packarda . 2009-07-14 [2005]. HP F2228-90010 . Pobrano 06.09.2015 .
- Kalinowski, Eduardo de Mattos; Dominik, Carsten (24.04.2002) [12.07.1998]. Programowanie w systemie RPL (PDF) (2 wyd.). Zarchiwizowane (PDF) od oryginału z dnia 2016-01-14 . Źródło 2016-08-16 .(Starsza wersja: [4] )
- Donnelly, James (2009-03-01). Rechlin, Eric (red.). Wprowadzenie do HP 48 System RPL i programowania w języku asemblera . Źródło 2015-09-07 .
Linki zewnętrzne
- Rechlin, Eric (2015) [1997]. "Pliki dokumentacji programowania HP 49/50" . Archiwum kalkulatorów HP . Źródło 2015-09-12 .
- Rechlin, Eric (2015) [1997]. "Pliki dokumentacji programowania HP 48" . Archiwum kalkulatorów HP . Źródło 2015-09-12 .
- Hicks, David G. (2013) [1995]. "RPL" . Muzeum Kalkulatorów HP (MoHPC) . Źródło 2015-09-12 .
- Bertrand, Joël (2015) [2009]. "RPL/2 - nowy Reverse Polish Lisp" . Źródło 2015-09-12 . (klon RPL na licencji GPL)
- Lapilli, Claudio Daniel (2014-01-03). "nowy RPL" . Źródło 2015-09-12 . [5] (pochodna RPL typu open source dla HP 50g i HP 49g+ oraz HP 40gs , HP 39gs i hp 39g + )
- Rubet, Louis (01.07.2017). "rpn - opensourceowa implementacja RPL" . Źródło 2015-09-12 . (Implementacja RPL typu open source z dowolną precyzją)
- Suarez, Alvaro Gerardo (2018-05-01). "MyRPL - Unia między językami HP41 i HP48" . Pobrano 2018-05-04 . (Mieszany język RPL (HP48) i FOCAL (HP41))