Clojure: Формы
Lisp-подобные языки называют языками без синтаксиса. Синтаксис у них конечно есть, но примитивный. Состоит синтаксис из списков и значений. В популярных языках используется множество управляющих конструкций, таких как условия, циклы, возврат, присвоение переменных и так далее. В Lisp-подобные языках таких конструкций нет, но это не значит, что на Clojure нельзя реализовать цикл или написать условие.
Каким же образом Clojure понимает, с чем работает и что нужно сделать? Все дело в формах. Любая корректная программа на Lisp называется формой. Например:
; формы
(println "some-str")
(+ 1 2 3)
(- 3)
8
"hello world!"
; а это не форма, такой код завершится ошибкой
(1 2)
Execution error (ClassCastException) at user/eval1 (REPL:1).
class java.lang.Long cannot be cast to class clojure.lang.IFn (java.lang.Long is in module java.base of loader 'bootstrap'; clojure.lang.IFn is in unnamed module of loader 'app')Формы делятся на два типа — нормальная и составная. Нормальной соответствуют значения, так как вычисляются сами в себя, число 8 или строка "hello". Составная форма — список, который нужно вычислить тем или иным способом.
Задание
Выведите в стандартный поток вывода (с помощью функции println) результат вычисления следующего выражения: - 23 * (- 3) + 15
Ваше упражнение проверяется по этим тестам
(ns form-test
(:require [test-helper :refer [assert-output]]))
(assert-output "84")Решение учителя откроется через:
20:00
