?

Log in

No account? Create an account
entries friends calendar profile Previous Previous Next Next
еще о языке Prolog - ruik-ruik! röhh-röhh!
raydac
raydac
еще о языке Prolog
так как были какие то вопросы в чем смысл языка Prolog, то в этом контексте интересно глянуть историю языка
"Prolog was born from a challenge: create a very high level language, even if inefficient according to the standard at the time.
At that time efficiency consisted of very fast processing of programs written with great effort.
So the challenge was to write programs very quickly, and let the machine compute through extensive calculation."

--
в вольном переводе
"Prolog был рожден вызовом: создать очень высокоуровневый язык, даже если неэффективный согласно стандарту того времени.
В то время эффективность состояла в очень быстром исполнении программ написанных с великим усилием.
Так что вызов был - писать программы очень быстро и дать машине исполнять их посредством обширных вычислений"

Tags:

14 comments or Leave a comment
Comments
(Deleted comment)
raydac From: raydac Date: December 12th, 2015 09:16 am (UTC) (Link)
это уже зависит от степени владения языком у пишущего и будет с любым языком
1500py470 From: 1500py470 Date: December 12th, 2015 09:22 am (UTC) (Link)
А по поводу РЕФАЛ какие мысли?
raydac From: raydac Date: December 12th, 2015 09:25 am (UTC) (Link)
читал про РЕФАЛ, мне показалось что сходен с Prolog, но слишком неочевидный и заумный, программу на нем читать на порядки тяжелее
вполне может быть что РЕФАЛ был заюзан создателем PROLOG (всеж вроде с Францией в то время был достаточно интенсивный обмен научными темами), РЕФАЛ ведь постарше будет года на 4 вроде

Edited at 2015-12-12 09:26 am (UTC)
1500py470 From: 1500py470 Date: December 12th, 2015 10:03 am (UTC) (Link)
Скорее на 5-6 лет, и потому мне любопытно он первым начался и первым закончился или есть какая жизнь? С упоминанием чего-нибудь типа аппаратной реализации или новой версии РЕФАЛа уже наверное больше лет десяти на глаза не попадалось, думал человек имеющий прямое отношение к Prolog знает текущию ситуацию в этой теме.
raydac From: raydac Date: December 12th, 2015 10:19 am (UTC) (Link)
я с Рефал как то мало знаком, пытался его изучить, но он мне показался слишком заумным, своего рода как когда читаешь какуюнить суровую научную книжку, написанную какимто суровым советским специалистом, а Prolog он как то более доходчив, в следующем посте привел сравнение программ
p.s.
я про Рефал как то кроме инета вообще нигде не слышал, ни на каких тусовках даже это слово не мелькало

Edited at 2015-12-12 10:20 am (UTC)
1500py470 From: 1500py470 Date: December 12th, 2015 10:25 am (UTC) (Link)
Потому как лет двадцать уже живого носителя рефало пишущего не встречал, и лет 10-15 иногда об рефале статьи пишушего, то и вопрос возник он сейчас в положении суслика или другого какого мелкого обитателя леса не виден, но есть в природе или уже только объект изучения историков науки и техники.
vit_r From: vit_r Date: December 12th, 2015 02:19 pm (UTC) (Link)
Это самый удобный язык для определённого класса задач. Мигать на нём лампочками, конечно, не самое удобное дело. Японцы, когда у них бум был, даже нечёткий пролог сделали. Если бы эта ветвь не перестала получать финансирование и не умерла, дофига народу писало бы сейчас на нём.
From: pettabyte Date: December 13th, 2015 06:26 pm (UTC) (Link)
Смотря какие.
Уровень реально высокий. Если привыкнуть что это логическое программирование, и понимать задачу, то не всё так плохо.
Но дело в том что задачу надо разложить на предикаты, и прочее. Мы пишем не то как делать, а правила, вот их и надо выявить. Непривычно.
Но как минимум академические задачи делать хорошо. Всякие потуги по ИИ допустим.

Вот Лисп, там да, хочешь-функционально, хочешь декларативно, хочешь ООП, хочешь - вставка на СИ. Опять же логическое программирование несложно там тоже.

Edited at 2015-12-13 06:28 pm (UTC)
raydac From: raydac Date: December 13th, 2015 06:38 pm (UTC) (Link)
а где в Lisp имеется ООП, вставки на Си и декларативное?
From: pettabyte Date: December 13th, 2015 10:30 pm (UTC) (Link)
>а где в Lisp имеется ООП
Ну за Scheme не скажу, но в CommonLisp есть CLOS(Common Lisp Object System).
>>вставки на Си
FFI, можно скажем примотать библиотеку, динамическую и просто, а в реализации ECL, которая через GCC\VS(как минимум) может компилировать(всё или отдельные функции) там еще так можно(пример не мой):
(defun sample (x)
(ffi:c-inline (n1 n2) (:int :int) (values :int :int) "{
int n1 = #0, n2 = #1, out1 = 0, out2 = 1;
while (n1 <= n2) {
out1 += n1;
out2 *= n1;
n1++;
}
@(return 0)= out1;
@(return 1)= out2;
}"
:side-effects nil))
Есть также реализации Scheme(в которые именно вставка кода).
В SBCL нельзя, эти хитрожопые запилили свой компилятор с оптимизацией, вроде неплохой, но когда я попробовал делать на нем исполняемые файлы, они были от 30мегабайт, и это helloworld, походу он сам компилятор засовывал. Я че-то охренел от этого.

>>декларативное
Каюсь, тут я думал одно, а написал другое, имел в виду императивное.
Но это там тоже не проблема, подобие пролога там пишется довольно быстро.
Но стандартных таких функций на сколько помню, вроде нет.
raydac From: raydac Date: December 13th, 2015 10:34 pm (UTC) (Link)
ну в Prolog тоже императивное имитируется за счет того что правила читаются сверху-вниз и слева-направо, это позволяет имитировать своего рода императивность, а с ООП и прочим, это уже фичи надстроек, в Visual Prolog думаю ООП с бантиками широко представлен
как я понимаю "декларативное" это то, где есть уже готовая встроенная система вывода, в Lisp такой нет, в Forth такой нет, написать понятно что можно, но это и на JavaScript легко пишется http://ioctl.org/logic/prolog-latest

Edited at 2015-12-13 10:37 pm (UTC)
From: pettabyte Date: December 13th, 2015 11:06 pm (UTC) (Link)
Ага, именно, готовой декларативности нету.
Только в лиспе императивное не имитируется.
А объектная система лисповая она засунута в стандарт CommonLisp. А вот механизм FFI для СИ не описан стандарте.
From: pettabyte Date: December 13th, 2015 10:52 pm (UTC) (Link)
Причем ECL(другие не тыкал в эту сторону) можно вызывать из C\C++, про скорость не скажу, но он собирается в DLL меньше трех мегабайт, хорошо запихивать в программы.
Также ECL генерирует СИ код, правда с привязкой к библиотеки с Лиспом(не знаю можно ли без), и довольно лютый, но может.
14 comments or Leave a comment