Изучал пролог у универе по верхам и паре лаб, а тут как-то почитал книги про разные реализации, думал что-то типа простого интерпретатора/компилятора состряпать. А там ,к сожалению, все сводится к ленивому построению полно-переборного дерева решений с отсечением заведомо ложных неправильных веток с помощью предикатов. В общем компилятора (в обычном его понимании) не сделать.
Очень интересный материал по созданию мини-CAD системы, т.е. применение Пролога к симуляции цифровых комбинационных и последовательных схем: https://apps.dtic.mil/sti/tr/pdf/ADA243884.pdf Все примеры проверял на Msdos'овском Эдинбурском Прологе.
Кому интересно, есть мой перевод в txt: https://dropmefiles.com/3lzuL . Отсупы немного сбили схемы, не помню в каком редакторе правил, но подправить не сложно. Ну самому лень, в общем и так сойдет.
Хочу еще сказать, в университетской программе мало рассказывают про фундамент, который лежит в Прологе, да и не в каждом универе был курс логического программирования. Одной методички маловато. Кроме нее, Клоксин обязателен, еще неплохо почитать Чень Ч., Ли Р. "Математическая логика и автоматическое доказательство теорем". Про метод резолюции неплохо также написано у Ю.Г. Карпова "Теория автоматов".
P.S. Самая мякотка Пролога, о которой мало говорят, теоретическая, это, то что, допустим, на примере комбинационных(и не только?) возможен обратный ход(в упомянутом мини-CAD такого нет, но можно сделать, да?). Не знаю, но, по идеи, это что-то очень интересное.
Ну да, в Прологе поиск глубину с возвратами, если все утверждения заданы корректно - то да полный перебор.
Есть еще одна проблема при создании всяких Прологов это алгоритм унификации. Почитал, посмотрел некоторые научные материалы. Не для инженерного образования, по крайне мере моего. В вашей книжечке, похоже, более как-то народно-популярно рассказано, при беглом просмотре. Всегда хотел воспроизвести Пролог. Сохраню на потом. Thanks.
Спасибо за рекомендации. Относительно недавно искал какой-то учебник по методам симуляции цифровых схем и вот каких-то обзорных книжек не попадалось. Хочется что-то типа Digital Design and Computer Architecture от Harris & Harris, прочитав которую можно сделать свой процессор на verilog и потом проверить его на FPGA.
По компиляторам есть вот прекрасная книжка от Wirth "Compiler Contrsuction" там PL/0 (Oberon) который тоже за пару недель научит делать компилятор под любой RISC/CISC процессор.
А вот еще бы такое классное найти по симуляции цифровых схем (с учетом задержек), а затем какой-то простой метод placement & routing пусть не оптимальный но чтобы за пару недель можно было выдать условный gds файл для просмотра в 3d-визуализаторе :)
Да, я так тоже эту книжку прочитал, ее перевод конечно. Понравилось, не дурно в плане теории. Но железяки, процессор, verilog, VHDL. Это новый уровень. Для этого, книга, которую вы ищете, весьма была бы полезна.
По компиляторам. Сейчас изучаю построение компиляторов у дядьки Jack CrenShaw. Где-то на середине остановился. Возможно, этого задела хватит, чтобы хотя бы переписать, для упражнения, язык Би... Но думаю все-таки одним Crenshaw не обойдусь, так что спасибо за книжку, лишней не будет.
Задержки мне как-то из вышесказанной книги(Digital Design and Computer Architecture) полностью понятны не стали, все обуславливающие их физические процессы, ясно то, что они существуют. И для синхронной логики это важно. К сожалению, в той работе, мной упомянутой, по симуляции цифровых схем на Прологе, задержки не реализованны. Для ваших целей поэтому, не знаю, не сгодится.
Ну если обобщать до такой степени, то вообще для любого декларативного языка компилятор не сделать, т.к. на каком-то этапе нужно будет перейти от декларатива к императиву, а этот момент так или иначе будет каким-то вариантом ленивого перебора дерева.
Насчет реализации, для меня этот Пролог(Alan Mycroft) выглядит не привычно. Пример работы append, как я понимаю "присоединение", перемещение из одного списка в другой(пустой). Выглядит слишком экстравагантно(!). Для обычного Пролога это можно записать одной строкой.
Не уверен, но данный Пролог разве полноценный? Есть списки, переменные, а функторы? Может когда будет полноценная поддержка всего, уже 400 строками не обойтись. И унификация, наверное, не проще станет.
Пока интересен тем что игрушечный, и что он в 400 строк. И не понятный. Синтаксического сахарка забыли.
Тут не сам Пролог, а его реализация. Для полноты надо добавить парсер, чтобы обычный исходный код Пролога заглатывать.
В железе нет никаких функторов. Только возня со списками. Функторы это абстракция поверх списков.
Многие языки, изобретённые математиками, имеют одну общую проблему: непонятно, какая от них польза. Прологовская унификация кажется прикольной, но за тридцать лет моего программистского опыта так и не нашлась потребность для неё.
no subject
Date: 2024-04-18 17:09 (UTC)Wow. Я пролог так и не освоил. Два раза изучал.
no subject
Date: 2024-04-18 17:24 (UTC)no subject
Date: 2024-04-19 03:05 (UTC)А там ,к сожалению, все сводится к ленивому построению полно-переборного дерева решений с отсечением заведомо ложных неправильных веток с помощью предикатов. В общем компилятора (в обычном его понимании) не сделать.
Читал вот такую книжечку https://www.amazon.com/Warrens-Abstract-Machine-Reconstruction-Programming/dp/0262510588
no subject
Date: 2024-04-19 10:37 (UTC)Все примеры проверял на Msdos'овском Эдинбурском Прологе.
Кому интересно, есть мой перевод в txt: https://dropmefiles.com/3lzuL . Отсупы немного сбили схемы, не помню в каком редакторе правил, но подправить не сложно. Ну самому лень, в общем и так сойдет.
Хочу еще сказать, в университетской программе мало рассказывают про фундамент, который лежит в Прологе, да и не в каждом универе был курс логического программирования. Одной методички маловато. Кроме нее, Клоксин обязателен, еще неплохо почитать Чень Ч., Ли Р. "Математическая логика и автоматическое доказательство теорем". Про метод резолюции неплохо также написано у Ю.Г. Карпова "Теория автоматов".
P.S. Самая мякотка Пролога, о которой мало говорят, теоретическая, это, то что, допустим, на примере комбинационных(и не только?) возможен обратный ход(в упомянутом мини-CAD такого нет, но можно сделать, да?). Не знаю, но, по идеи, это что-то очень интересное.
no subject
Date: 2024-04-19 11:19 (UTC)Есть еще одна проблема при создании всяких Прологов это алгоритм унификации. Почитал, посмотрел некоторые научные материалы. Не для инженерного образования, по крайне мере моего. В вашей книжечке, похоже, более как-то народно-популярно рассказано, при беглом просмотре. Всегда хотел воспроизвести Пролог. Сохраню на потом. Thanks.
no subject
Date: 2024-04-19 11:51 (UTC)Относительно недавно искал какой-то учебник по методам симуляции цифровых схем и вот каких-то обзорных книжек не попадалось. Хочется что-то типа Digital Design and Computer Architecture от Harris & Harris, прочитав которую можно сделать свой процессор на verilog и потом проверить его на FPGA.
По компиляторам есть вот прекрасная книжка от Wirth "Compiler Contrsuction" там PL/0 (Oberon) который тоже за пару недель научит делать компилятор под любой RISC/CISC процессор.
А вот еще бы такое классное найти по симуляции цифровых схем (с учетом задержек), а затем какой-то простой метод placement & routing пусть не оптимальный но чтобы за пару недель можно было выдать условный gds файл для просмотра в 3d-визуализаторе :)
no subject
Date: 2024-04-19 13:20 (UTC)По компиляторам. Сейчас изучаю построение компиляторов у дядьки Jack CrenShaw. Где-то на середине остановился. Возможно, этого задела хватит, чтобы хотя бы переписать, для упражнения, язык Би... Но думаю все-таки одним Crenshaw не обойдусь, так что спасибо за книжку, лишней не будет.
Задержки мне как-то из вышесказанной книги(Digital Design and Computer Architecture) полностью понятны не стали, все обуславливающие их физические процессы, ясно то, что они существуют. И для синхронной логики это важно. К сожалению, в той работе, мной упомянутой, по симуляции цифровых схем на Прологе, задержки не реализованны. Для ваших целей поэтому, не знаю, не сгодится.
no subject
Date: 2024-04-19 13:35 (UTC)no subject
Date: 2024-04-19 16:29 (UTC)https://github.com/GunterMueller/Prolog-AM
no subject
Date: 2024-04-19 18:31 (UTC)Насчет реализации, для меня этот Пролог(Alan Mycroft) выглядит не привычно. Пример работы append, как я понимаю "присоединение", перемещение из одного списка в другой(пустой). Выглядит слишком экстравагантно(!). Для обычного Пролога это можно записать одной строкой.
Не уверен, но данный Пролог разве полноценный? Есть списки, переменные, а функторы? Может когда будет полноценная поддержка всего, уже 400 строками не обойтись. И унификация, наверное, не проще станет.
Пока интересен тем что игрушечный, и что он в 400 строк. И не понятный. Синтаксического сахарка забыли.
no subject
Date: 2024-04-19 19:06 (UTC)В железе нет никаких функторов. Только возня со списками. Функторы это абстракция поверх списков.
Многие языки, изобретённые математиками, имеют одну общую проблему: непонятно, какая от них польза. Прологовская унификация кажется прикольной, но за тридцать лет моего программистского опыта так и не нашлась потребность для неё.
no subject
Date: 2024-04-19 19:11 (UTC)no subject
Date: 2024-04-19 19:15 (UTC)no subject
Date: 2024-04-20 14:06 (UTC)https://github.com/GunterMueller/prolog-interpreter-c
Похоже, более проще чем остальные и написан на Си, уже с синтаксическим сахаром.