Реализация функционального языка Scheme, аналога mit-scheme, на C++
mkdir build
cmake ..
make scheme
./schemeВыход из интерпретатора - q
Типы данных: логические (#t, #f), целые числа, списки, пары
Особый оператор ' - quote просто возвращает свой аргумент
Для целых чисел поддерживаются: арифметические операции(+, -, *, /), операторы сравнения(<, <=, >, =>, =), операторы минимума, максимума и модуля
$ (+ 1 2)
> 3
$ (= 1 2)
> #f
$ (max 1 2 7)
> 7
$ (abs -10)
> 10Для списков и пар поддерживаются операции взятия первого элемента - car, отбрасывания первого элемента - cdr, индексацию list-ref и срез последних элементов list-tail
$ (car '(1 2 3))
> 1
$ (cdr '(1 2 3))
> (2 3)
$ (list-ref '(1 2 3) 1)
> 2
$ (list-tail '(1 2 3) 1)
> (2 3)Операторы and, or считают все выражения кроме #f, применяя short-circuit evaluation и возвращая последний аргумент.
$ (and 1 '1 (+ 1 2))
> 3Для всех объектов можно вызвать предикат для проверки его типа: number?, list?, pair?, bool?, null?
$ (number? #t)
> #f
$ (pair? '(1 . 2))
> #t
$ (null? '())
> #t