LINUX.ORG.RU

Вышел SWI-Prolog 7.1.0

 


1

2

На новость не тянет, имхо, так что напишу здесь.

SWI-Prolog обновился до версии 7.1.0. Подробный список изменений можно найти тут.

Версия для Ъ:

  • Lists are no longer represented as .(H,T). Instead, the list functor is now '$cons'(H, T). The empty list is still [], but this is not an atom. I.e., '[]' == [] fails.
  • By default, double quoted «text» is mapped to an object of type string. This already raised some discussions.
  • The system introduces `maps' as primary citizens. Maps are collections of key-value pairs, optionally typed. Maps are supported by read and write.
  • Quoted atoms are no longer operators.
  • Unquoted atoms may contain internal dots. E.g., a.b is an atom.
  • functor() is valid syntax. It produces a term that is distinct from 'functor'. The `block' operator '()' to hack this syntax has been removed.
  • The `block' operators [] and {} remain.
★★★★★
Ответ на: комментарий от buddhist

ну это вообще больная тема)

ymn ★★★★★
() автор топика

Lists are no longer represented as .(H,T). Instead, the list functor is now '$cons'(H, T). The empty list is still [], but this is not an atom. I.e., '[]' == [] fails.
By default, double quoted «text» is mapped to an object of type string. This already raised some discussions.
Quoted atoms are no longer operators.

- President SWI-Prolog!
- What?
- They say Prolog is not modern enough!
- BREAK. ALL. PROGRAMS!!!!!!!!!

proud_anon ★★★★★
()
Ответ на: комментарий от theNamelessOne

А что это такое, можно объяснить для человека не в теме?

Шило поменяли на мыло.
Теперь народ будет ходить с чистыми, но рвущимися сапогами и исколотой жопой.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)

А он где-то IRL используется кроме дипломов? Я долго ковырялся с прологом, но профита по сравнению с обычными общеприменимыми ЯП не обнаружил.

vurdalak ★★★★★
()
Ответ на: комментарий от vurdalak

А он где-то IRL используется кроме дипломов? Я долго ковырялся с прологом, , но профита по сравнению с обычными общеприменимыми ЯП не обнаружил.

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

antares0 ★★★★
()
Ответ на: комментарий от antares0

Но чем он удобнее обычной итерации по списку, например?

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

Ну, это не беда. Джава тоже мало где из коробки, но это не умаляет ее популярности.

vurdalak ★★★★★
()
Ответ на: комментарий от ymn

Ну хз. Лично мне кажется, что тот же рекурсивный код можно реализовать на любом другом языке. Но может и не все так просто, я больше пары сотен строк на прологе не писал :)

vurdalak ★★★★★
()
Ответ на: комментарий от vurdalak

Но чем он удобнее обычной итерации по списку, например?

А итерация по списку сама по себе к тому же планированию никак не относится. Вот если надо раскидать список задач по исполнителям учитывя талмуд на 104 стр. попутно выковыривая противоречивые требования. Или на ходу подобрать подход отображения на элементы UI учитывая пол, место всплытия, положения в начальственой иерахии, степень инвалидности (и по мозгам тоже) и.т.п То есть его «удобнее» будет на несколько ином взгляде на проблему.

antares0 ★★★★
()
Последнее исправление: antares0 (всего исправлений: 1)
Ответ на: комментарий от vurdalak

Ну, это не беда. Джава тоже мало где из коробки, но это не умаляет ее популярности.

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

antares0 ★★★★
()
Ответ на: комментарий от vurdalak

Лично мне кажется, что тот же рекурсивный код можно реализовать на любом другом языке.

Написать можно, но ведь надо ещё и отладить и сопровождать. И пролог - это не просто рекурсия, а унификация.

Begemoth ★★★★★
()
Последнее исправление: Begemoth (всего исправлений: 1)

Добавлю, что ещё ряд интересных вещей тихо и незаметно появился в 6.x.x, а именно, квазицитирование, которое позволяет писать код типа такого (выдаю по памяти, поэтому синтаксис может бить немного неправильным):

testQuasiQuote :- |lisp||(i 'am 'a 'Lisp)|, |js|| (function () { write(«some JS code»); })()|.

Где КЦ имеет вид |parser||text|. Иначе говоря, указываем предикат (например, lisp), который будет парсить содержимое квазицитаты, и парсим им произвольный текст.

runtime ★★★★
()
Ответ на: комментарий от theNamelessOne

Раньше списки строились с помощью терма '.', т.е. список [1, 2, 3] по сути дела всего лишь составной терм '.'(1, '.'(2, '.'(3, [])))

Теперь для этих целей используется терм '$cons', то есть, тот же список выглядит как '$cons'(1, '$cons'(2, '$cons'(3, [])))

Точку же теперь можно будет использовать для более полезных целей, а именно, для новых functional style фишек, которые приносит новый релиз.

runtime ★★★★
()
Ответ на: комментарий от runtime

Спасибо. Меня смутил «functor», но я нагуглил терминологию, которая используется в прологе, и всё встало на свои места.

theNamelessOne ★★★★★
()

functor() is valid syntax. It produces a term that is distinct from 'functor'. The `block' operator '()' to hack this syntax has been removed.

Шикарно всё-таки назвали

dmitry_malikov ★★
()

Prolog
functor
cons
LISP
quasiquote

Концентрация маргинальщины ITT начинает зашкаливать...

anonymous
()
Ответ на: комментарий от dmitry_malikov

Кстати, все хотел спросить: почему ты такую странную личину выбрал?

anonymous
()

на удивление ломающая совместимость версия

basp
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.