Three years ago, Martin Ceronio published a LISP interpreter in ABAP.
I am also excited to share the availability of the ABAP Scheme Workbench, a programming environment for Scheme.
What is Scheme?
From Wikipedia, the free encyclopedia:
Scheme is a functional programming language and one of the two main dialects of the programming language Lisp. Unlike Common Lisp, the other main dialect, Scheme follows a minimalist design philosophy specifying a small standard core with powerful tools for language extension.
Lisp is a 60 year old family of computer languages that represent both source code and data using a tree data structure (s-expressions).
Any valid Scheme code is also a valid tree structure. You can assign program code to a variable and execute it. Code is data, data is code. It is a common pattern to use the quote command to say just don’t execute this code yet, treat it as data.
What can you use it for?
Scheme is impressive at symbolic manipulation of data.
- Create you own DSL
- Learn real functional programming: map, fold, closures
- Prototype ideas, scheme code is expressive (like, really, really short). Check the sample code
- Symbolic derivation
- Simple games
- Adventure Game engine
Try to write this game in ABAP:
(begin (display "Please enter a number between 1 - 99: ") (do ((quit #f) (guess 0) (answer (+ 1 (random 100))) ) (quit) (set! guess (read)) (cond ((and (number? guess) (< guess answer)) (display "Too low. Please guess again: ") ) ((and (number? guess) (> guess answer)) (display "Too high. Please guess again: ") ) (else (set! quit #t) (if (number? guess) (display "Correct!") (display "Good bye...") ) ) ) ) )
- the repository master branch was tested on Netweaver 7.4 SP09.
- the branch Netweaver-7.02 was downported to Netweaver 7.02
The code released with an MIT License:
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Check out the Wiki for documentation and sample code/games code.
When used as a script language, a single include YY_LIP_LISP is needed. Class
lcl_lisp_interpreter evaluates your code from a string
DATA(response) = NEW lcl_lisp_interpreter( )->eval_source( code ).
The ABAP Scheme Workbench is the programming environment where ABAP Scheme programs are written and evaluated. It offers an editor, a console view and useful tools.
- Regression test suite with 500+ ABAP unit tests
- Nested quasi quotation
- Trace Viewer
- Graphical S-Expression Viewer using PlantUML server
- a lot of R7RS language features
- option to enable new ABAP editor with LISP syntax highlighting properties
- Use registry solution to store/restore state/code
- Debugger Script enhancement to display S-Expressions
- Specify limit for execution time of interpreter
- ABAP integration in the language and in the workbench with easy to use patterns for function module calls, method calls and SQL queries.
- Powerfull scripting language in ABAP with hygienic macros, seamless ABAP interoperability
- Support third party libraries
- Wiki documentation with easy-to-try sample code in the style of The Little Schemer or Learn You a Haskell for Great Good
- Games adapted from Conrad Barski’s Land of Lisp.