Date: 2024-04-18 17:09 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Wow. Я пролог так и не освоил. Два раза изучал.

Date: 2024-04-19 03:05 (UTC)
x86128: (Default)
From: [personal profile] x86128
Изучал пролог у универе по верхам и паре лаб, а тут как-то почитал книги про разные реализации, думал что-то типа простого интерпретатора/компилятора состряпать.
А там ,к сожалению, все сводится к ленивому построению полно-переборного дерева решений с отсечением заведомо ложных неправильных веток с помощью предикатов. В общем компилятора (в обычном его понимании) не сделать.

Читал вот такую книжечку https://www.amazon.com/Warrens-Abstract-Machine-Reconstruction-Programming/dp/0262510588

Date: 2024-04-19 10:37 (UTC)
From: [personal profile] iyak2
Очень интересный материал по созданию мини-CAD системы, т.е. применение Пролога к симуляции цифровых комбинационных и последовательных схем: https://apps.dtic.mil/sti/tr/pdf/ADA243884.pdf
Все примеры проверял на Msdos'овском Эдинбурском Прологе.

Кому интересно, есть мой перевод в txt: https://dropmefiles.com/3lzuL . Отсупы немного сбили схемы, не помню в каком редакторе правил, но подправить не сложно. Ну самому лень, в общем и так сойдет.

Хочу еще сказать, в университетской программе мало рассказывают про фундамент, который лежит в Прологе, да и не в каждом универе был курс логического программирования. Одной методички маловато. Кроме нее, Клоксин обязателен, еще неплохо почитать Чень Ч., Ли Р. "Математическая логика и автоматическое доказательство теорем". Про метод резолюции неплохо также написано у Ю.Г. Карпова "Теория автоматов".

P.S. Самая мякотка Пролога, о которой мало говорят, теоретическая, это, то что, допустим, на примере комбинационных(и не только?) возможен обратный ход(в упомянутом мини-CAD такого нет, но можно сделать, да?). Не знаю, но, по идеи, это что-то очень интересное.
Edited Date: 2024-04-19 11:33 (UTC)

Date: 2024-04-19 11:19 (UTC)
From: [personal profile] iyak2
Ну да, в Прологе поиск глубину с возвратами, если все утверждения заданы корректно - то да полный перебор.

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

Date: 2024-04-19 11:51 (UTC)
x86128: (Default)
From: [personal profile] x86128
Спасибо за рекомендации.
Относительно недавно искал какой-то учебник по методам симуляции цифровых схем и вот каких-то обзорных книжек не попадалось. Хочется что-то типа Digital Design and Computer Architecture от Harris & Harris, прочитав которую можно сделать свой процессор на verilog и потом проверить его на FPGA.

По компиляторам есть вот прекрасная книжка от Wirth "Compiler Contrsuction" там PL/0 (Oberon) который тоже за пару недель научит делать компилятор под любой RISC/CISC процессор.

А вот еще бы такое классное найти по симуляции цифровых схем (с учетом задержек), а затем какой-то простой метод placement & routing пусть не оптимальный но чтобы за пару недель можно было выдать условный gds файл для просмотра в 3d-визуализаторе :)

Date: 2024-04-19 13:20 (UTC)
From: [personal profile] iyak2
Да, я так тоже эту книжку прочитал, ее перевод конечно. Понравилось, не дурно в плане теории. Но железяки, процессор, verilog, VHDL. Это новый уровень. Для этого, книга, которую вы ищете, весьма была бы полезна.

По компиляторам. Сейчас изучаю построение компиляторов у дядьки Jack CrenShaw. Где-то на середине остановился. Возможно, этого задела хватит, чтобы хотя бы переписать, для упражнения, язык Би... Но думаю все-таки одним Crenshaw не обойдусь, так что спасибо за книжку, лишней не будет.

Задержки мне как-то из вышесказанной книги(Digital Design and Computer Architecture) полностью понятны не стали, все обуславливающие их физические процессы, ясно то, что они существуют. И для синхронной логики это важно. К сожалению, в той работе, мной упомянутой, по симуляции цифровых схем на Прологе, задержки не реализованны. Для ваших целей поэтому, не знаю, не сгодится.
Edited Date: 2024-04-19 13:35 (UTC)

Date: 2024-04-19 13:35 (UTC)
From: [personal profile] ichthuss
Ну если обобщать до такой степени, то вообще для любого декларативного языка компилятор не сделать, т.к. на каком-то этапе нужно будет перейти от декларатива к императиву, а этот момент так или иначе будет каким-то вариантом ленивого перебора дерева.

Date: 2024-04-19 18:31 (UTC)
From: [personal profile] iyak2
По крайне мере, теория выглядит не просто : https://www.cs.bu.edu/fac/snyder/publications/UnifChapter.pdf

Насчет реализации, для меня этот Пролог(Alan Mycroft) выглядит не привычно. Пример работы append, как я понимаю "присоединение", перемещение из одного списка в другой(пустой). Выглядит слишком экстравагантно(!). Для обычного Пролога это можно записать одной строкой.

Не уверен, но данный Пролог разве полноценный? Есть списки, переменные, а функторы? Может когда будет полноценная поддержка всего, уже 400 строками не обойтись. И унификация, наверное, не проще станет.

Пока интересен тем что игрушечный, и что он в 400 строк. И не понятный. Синтаксического сахарка забыли.
Edited Date: 2024-04-19 18:55 (UTC)

Date: 2024-04-19 19:11 (UTC)
From: [personal profile] iyak2
Хм, неужели с Прологом(от GunterMueller'а) все так просто ли? Ладно, пойду по-медитирую...

Date: 2024-04-20 14:06 (UTC)
From: [personal profile] iyak2
Нашел. Кажется, "велосипед" уже изобретен, осталось вникнуть в построение.
https://github.com/GunterMueller/prolog-interpreter-c
Похоже, более проще чем остальные и написан на Си, уже с синтаксическим сахаром.