Долго размышляя о взаимосвязи информатики и естественных наук, я решил прочитать интересную книгу на тему того, как формируются языки программирования для решения задач и что требуется от компьютерных программ, чтобы они могли эффективно создавать надежные вычислительные системы.

Первая глава начинается со ссылки на атомарные элементы языка программирования и соотносит их с концепциями формирования идей.

Отличная цитата с первой страницы гласит:

Действия ума, в которых он проявляет свою власть над простыми идеями, состоят главным образом из следующих трех: 1. Соединение нескольких простых идей в одну сложную, и таким образом создаются все сложные идеи. 2. Вторая состоит в том, чтобы свести вместе две идеи, простые или сложные, и расположить их одну рядом с другой, чтобы рассматривать их сразу, не объединяя их в одну, благодаря чему он получает все свои идеи отношений. 3. Третий отделяет их от всех других идей, сопровождающих их в их реальном существовании: это называется абстракцией, и таким образом создаются все ее общие идеи.

Джон Локк, Эссе о человеческом понимании (1690 г.)

Мне показалось интересным, что авторы начали писать о вычислительных системах с оттенком магии, описывая саму вычислительную систему как то, что было бы в архаичные времена «духом» — сущностью, которая, несмотря на отсутствие тела или физического присутствия, может манипулировать данными. и выполнять множество разумных процедур, по сравнению с которыми люди меркнут.

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

Позже авторы упомянули о важности обсуждения этих трех функций в языке программирования, говоря о его «мощности».

1. Примитивные элементы — самые простые объекты, с которыми связан язык программирования.

2. Средства комбинирования — что язык позволяет образовывать составные элементы из более простых.

3. Средства абстракции — где составные элементы могут называться и управляться ими как элементами..

Языком, выбранным в книге, был Lisp, который является аббревиатурой от LISt Processor. Разработанный в 1950 году группой исследователей искусственного интеллекта в Массачусетском технологическом институте, он был задуман как практичный язык программирования, однако его эволюция с течением времени была экспериментальной, вызванной потребностями пользователей.

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

Есть две вещи, которые нас, программистов, волнуют:

Примитивные процессы и примитивные данные

Выражения оцениваются интерпретатором.

lisp «понимает», что такое числа, поэтому выражения, содержащие просто число, вернут само число.

888

888

Однако, как только мы добавим примитивные процедуры, такие как оператор +, мы должны определить его в квадратных скобках.

В Лиспе есть интересный способ определения математических операторов, когда они помещаются в начало комбинированного выражения (комбинации). Это известно как префиксная нотация.

(+ 1 1 )
(+2 43)
(/ 4 2)
(- 10 3 4)
..

2 .0
45.0
2.0
3.0

Это дает некоторые интересные преимущества по сравнению с математическим соглашением о размещении операторов в середине двух выражений.

Во-первых, не нужно переопределять выражение при выполнении одной и той же операции более чем с двумя аргументами. Вы можете видеть в примере, который я написал, я взял 3 и 4 из 10, чтобы получить 3. Мне не нужно было записывать больше минусов.

Второе преимущество состоит в том, чтобы иметь вложенные комбинации, то есть иметь комбинацию, элементы которой сами по себе являются комбинациями.

(* (+ 4 4 ) (+ 3 5) )

……

64.0

Следующим, что было рассмотрено, были средства абстракции, способность брать составной элемент и иметь возможность называть его и манипулировать им как единым целым.

в Лиспе это делается с помощью команды define.

скажем, я хочу найти длину окружности.

Сначала я определяю число Пи, так как оно содержит самый примитивный элемент — число.

(определить Пи 3.14159)

затем я определяю радиус

(определить радиус 2)

тогда я могу определить окружность как соединение радиуса и пи

(определить окружность (* pi (* радиус 2))

Хотя поначалу все это кажется очень простым, теперь разработчику становится еще яснее, насколько чрезвычайно запутанные идеи и программы могут быть тем или иным образом разбиты на процедуры и/или данные.