Обновить

Язык, который придумали для ИИ в 1958-м

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели9.3K
Всего голосов 16: ↑16 и ↓0+20
Комментарии11

Комментарии 11

Такие языки как Lisp, Prolog, Forth, Smalltalk думаю и сейчас, возможно, без афиширования используются в тематике ИИ.

Р.S. А, “проиграли” они историческую гонку в силу разных причин и предположу, что их концептуальная простота оказалась мало востребованной в мире развития алгоритмического мышления с проектированием разного синтаксиса языков и перекладыванием на него оформленных задач решаемых семантикой языка. Выражать разнообразную семантику в привязке к синтаксису оказалось в массе своей проще в “Алгол” языках., а IT “художники” остались не у дел.

В рамках Форт (Forth) языка и ИИ, один из проектов в развитии на Github TensorForth https://github.com/chochain/tensorForth (Forth does tensors, in CUDA) - 56 звёзд на текущий момент.

P.S. C Форт такая проблема, что его почти не дают даже в Вузовских программах, не рассматривая школьников (соответственно вокруг его парадигмы не формируется методологический базис) и книги изданные по нему на русском языке в конце 80-х начало 90-х ориентированы на стандарт 83-го года, хотя сейчас в действии ANSI 94-года. Но Форт не забыт и рускоязычными пользователями в действующих форумах, телеграм каналах … и надеюсь увлечёнными “хакерами” :)

При запросе на генерацию кода на нём, думаю, и ИИ подтянут свои скилы, если ещё этого нет и Форт (не путать с Фортран языком!) опять займёт подобающее ему место во всевозможных популярных рейтингах языков программирования.

P.S. А, если появятся кремневые Форт-процессоры (контроллеры), непосредственно поддерживающие Форт, то вообще хорошо. :) (GA144 им в пример https://habr.com/ru/search/?q=GA144)

Какой запрос на генерацию Forth-кода, мужик, ты о чём? Весь сгенерированный LLM-код нужно очень внимательно ревьюить, а ревьюить Forth-код - это такая адская боль, нужно его в голове интерпретировать, удерживая в своей памяти содержимое стека.

Не надо думать о форте так как о нем рассказывают в обзорных статьях про форт для самых маленьких (для того чтобы дать представление о том как он устроен внутри). Ревью современного форт-кода ничуть не сложнее чем ревью кода на любом другом языке.

Что значит «LISP … из учебников истории»? А AutoCAD?

А, ещё для Autocad была возможность делать скрипты на Форт - Atlast диалект, на Github, помимо оригинального сайта по описанию Atlast находится и такой архив https://github.com/Fourmilab/ClassWar

А в автокаде если я не ошибаюсь основные высокоуровневые возможности лиспа не имплементированы. Там лисп - это просто способ записи кода

Для LLM-ной статьи в целом сойдёт. Остальное придирки.

Маккарти взял из лямбда-исчисления Алонзо Черча нотацию LAMBDA для обозначения функций. Это стало основой синтаксиса Лиспа. Но сам Маккарти позже признавался, что в момент создания языка не очень-то разбирался в лямбда-исчислении - взял нотацию, потому что она казалась удобной и пошел дальше. Позже Дэвид Парк заметил, что рекурсивную LABEL-нотацию можно выразить через конструкцию на LAMBDA, аналогичную Y-оператору Черча. Но сама LAMBDA в Лиспе Y-комбинатором не является.

Lambda сама по себе нигде не является Y-комбинатором, ни в Лиспе, ни в математике. Y-комбинатор составляется из Lambda-выражений, и его смысл в том, чтобы функция вызывала саму себя, не имея имени.

Код как данные. В Лиспе программа и данные записываются одинаково - вложенными списками, S-выражениями. Функцию можно передать как аргумент, вернуть из другой функции, сгенерировать прямо во время выполнения. Это называется гомоиконичностью и именно на этом держатся макросы Лиспа - механизм, который позволяет писать код, генерирующий код.

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

Условные выражения. if-then-else в том виде, в каком это существует в любом языке - тоже Лисп. Звучит странно, но до 1958-го условные переходы реализовывались как низкоуровневые инструкции, а не как выражения, возвращающие значение.

if и сейчас не в любом языке является выражением.

А как насчёт обилия скобок, делавших код многих (большинства?) программистов трудночитаемым? Разве не причина для более поздних времён, когда ни GC ни прочие накладные расходы уже так сильно не влияли на выбор?

REPL в Лиспе (если обложиться собственными функциями, как и в случае с другими языками) в нишевых задачах конечно хорош, но получается не принципиально лучше REPL в других языках.

А как насчёт обилия скобок

Скобки - это наверное лучшее, что есть в лиспе. Трудночитаемость - это миф, да и избыточное количество скобок - тоже (достаточно посмотреть на синтаксис современных языков, типа Rust и C++ - там кроме скобок разного вида ещё и куча закорючек). Этот миф распространяют те, кто никогда на лиспе не писал.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации