RPL (Reverse Polish Lisp) – język programowania stworzony przez firmę Hewlett-Packard stosowany do programowania kalkulatorów HP-28, HP-39, HP-48, HP-49 i HP-50. Jest językiem strukturalnym operującym na stosie (RPN: Reverse Polish Notation – Odwrotna notacja polska), pozwala jednak na przetwarzanie typowych wyrażeń algebraicznych. W odróżnieniu od wcześniejszych modeli kalkulatorów (4 poziomy stosu), stos w RPL jest ograniczony wyłącznie pamięcią kalkulatora.
RPL wspiera standardowe instrukcje warunkowe, o następującej składni:
IF condition THEN if-true [ELSE if-false] END
Poniższy przykład sprawdza, czy najniższa liczba na stosie jest równa 1. Jeśli tak, wyświetla napis "rowne jeden"
« IF 1 == THEN "rowne jeden" END »
Instrukcje warunkowe występują również w wariantach IFT and IFTE. Zdejmują one ze stosu dwa lub trzy elementy. Najwyższy jest traktowany jako warunek, natomiast pozostałe są wprowadzane (lub nie) w zależności od spełnienia tego warunki z powrotem na stos. Jeśli na stosie jest liczba 1, poniższy kod zamienia ją na "jeden".
« 1 == "jeden" IFT »
Analogiczny przykład z IFTE pozwala na zamianę na "nie jeden" w przeciwnym przypadku:
« 1 == "jeden" "nie jeden" IFTE »
Bardziej skomplikowane warunki są implementowane za pomocą CASE-THEN-END:
CASE condition_1 THEN if-condition_1 END ... condition_n THEN if-condition_n END if-none END
Poniższy przykład zamienia literę "A" na "Alpha", "B" na "Beta" itd. lub wyświetla "nieznana litera".
« CASE DUP "A" == THEN "Alpha" END DUP "B" == THEN "Beta" END DUP "G" == THEN "Gamma" END "nieznana litera" END SWAP DROP »
Powyższy kod jest równoznaczny implementacji IF-THEN-ELSE:
« IF DUP "A" == THEN "Alpha" ELSE IF DUP "B" == THEN "Beta" ELSE IF DUP "G" == THEN "Gamma" ELSE "nieznana litera" END END END SWAP DROP »
Nieco bardziej skomplikowane są pętle typu FOR, następujący przykład sumuje liczby od 1 do 10:
« 0 @ Zero na stosie 1 10 @ Pętla od 1 do 10 FOR I @ "I" jest zmienną pętli I + @ odłożenie I na stos i dodanie do znajdującej się tam wartości NEXT »
Sekwencja START-NEXT jest analogiczna, jednak nie udostępnia żadnej zmiennej:
index_from index_to START loop_statement NEXT
W przypadku pętli z krokiem innym niż 1 stosuje się konstrukcję FOR-NEXT lub START-NEXT. Poniższy przykład jest pętlą od 10 do 2 z krokiem -2:
« 10 2 START -2 STEP »
Dostępne są również konstrukcje WHILE-REPEAT i DO-UNTIL:
WHILE condition REPEAT loop_statement END DO loop_statement UNTIL condition END
Przypisy
Linki zewnętrzne Podręcznik języka na stronie HP Artykuły o programowaniu Artykuł z przykładami programów www.rpl2.net – Niezależna implementacja
Kategoria:Hewlett-Packard Kategoria:Języki programowania Kategoria:Kalkulatory