Страницы

Миф о мифе о большом количестве скобочек в Lisp

Когда мне в очередной раз рассказывают про то, что в Lisp слишком много круглых скобочек — это миф, то я представляю себе приблизительно это:

(: fact (Integer -> Integer))
(define (fact n)
  (if (<= n 1)
      1
      (* n (fact (- n 1)))))
func fact(int n) int {
  if n <= 1 {
    return 1
  } else {
    return n * fact(n - 1)
  }
}
int fact(int n) {
  if (n <= 1)
    return 1;
  else
    return n * fact(n - 1);
}

Ещё более впечатляющее сравнение происходит с языками, испльзующими алголоподобную лексику.

PROCEDURE fact(n: INTEGER): INTEGER;
  IF n <= 1 THEN
    n := 1
  ELSE
    n := n * fact(n - 1)
  END
RETURN
  n
END fact;

Первый пример кода написан Racket с указанием статических типов, и на нём виден способ экономии скобочек — просто не указывать типы, как это делается во многих диалектах Lisp. Так проще создавать примеры, где количество скобочек сопоставимо. Также, если не указывать, что в других языках скобочки 3-4 видов и они соотнесены с разными смыслами, что упрощает их восприятие, то снова можно преуменьшить проблему восприятия кода на Lisp.

Комментариев нет:

Отправить комментарий