Привет, Мир!

Racket - мультипарадигменный язык общего назначения, входящий в Lisp-семейство. Подчеркну, что Lisp - это не название конкретного языка, а обозначение группы языков, обладающих определенными схожими свойствами. Racket, как и большинство других лиспоподобных языков, не является функциональным языком программирования. На нем можно писать как функционально, так и императивно.

Lisp-языков много, а первый появился в 1958 году. Его автором был Джон Маккарти - автор термина «искусственный интеллект», один из основоположников функционального программирования, лауреат премии Тьюринга за огромный вклад в область исследований искусственного интеллекта.

Кроме Racket, в современной разработке относительно популярны - Clojure, ClojureScript, Common Lisp, различные варианты Scheme (читается “ским”). Интересный факт: редактор Emacs написан на собственном диалекте, который называется Emacs Lisp. И все программисты, использующие emacs, в какой-то степени являются Lisp-программистами.

Все что дальше будет говориться про Racket, почти всегда справедливо и для остальных Lisp-языков. Да и сам Racket очень похож на другие диалекты Scheme (да, Racket - тоже диалект Scheme). Этим фактом можно пользоваться при работе в https://repl.it, где нет Racket, но есть Scheme.

По традиции начнём знакомство с языком с написания программы “Hello, World!”. Эта программа будет выводить на экран текст Hello, World!. Для вывода на экран в Racket используется функция displayln:

#lang racket

(displayln "Hello, World!")

В среде программистов на Lisp-языках традиционно говорят “процедура”, а не “функция”. Исторически, процедура это блок кода, который не имеет возврата и как правило нужен исключительно для выполнения побочных эффектов. А под функцией понимают функцию в ее математическом значении. Функция зависит от своих аргументов и вычисляет результат, который затем возвращается наружу. В некоторых языках, таких как Pascal, эти понятия разнесены на уровне синтаксиса и семантики. В большинстве же языков функциями называют в том числе процедуры. В документации Racket встречается и то и другое. Для простоты мы будем всегда говорить о функциях.

В примере выше есть строчка #lang racket, это так называемая “прагма”. Прагма lang говорит компилятору, что данный файл, это модуль (о модулях мы поговорим позднее), написанный на языке racket. Дело в том, что Racket, это не только язык сам по себе, но ещё и платформа для создания других языков! Более того, в одном проекте можно использовать сразу несколько созданных в Racket языков. Именно поэтому нам нужно сообщать компилятору, на каком же языке мы писали код модуля.

Один из примеров “другого языка на базе Racket” - Scribble, язык для разметки документации, книг, статей. Программы на Scribble генерируют HTML и PDF (а также и другие форматы).

Racket требует указания прагмы #lang в каждом файле с исходным кодом (есть исключение но это сейчас не важно), однако в нашей среде оная присутствует не всегда (по техническим причинам). Не забудьте про эту разницу, когда решите запускать Racket программы у себя на компьютере.

Задание

Наберите в редакторе код из задания символ в символ и нажмите «Проверить».

; я комментарий
(displayln "Hello, World!")

Советы

Нашли ошибку? Есть что добавить? Пулреквесты приветствуютсяhttps://github.com/hexlet-basics

Упражнение доступно только авторизованным пользователям.

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