LINUX.ORG.RU

Другие языки искусственного интеллекта


0

0

Господа, если кто знает, укажите на ЯИИ, в основу которых положен принцип сравнения с образцом, как у Рефала. Может, уже есть что-то помощнее него? Обязательно, чтобы это работало под никсами и было хотя бы бесплатно. А также чтобы сравнение с образцом работало как можно более эффективно, а не как у пролога, к примеру.

Спасибо.

anonymous

ХЗ, какое именно сравнение с образцом имеется в виду, но оно (aka pattern matching) есть как ммнимум в Ocaml/SML, Erlang и уже упомянутом Haskell, Языки ML-группы вообще выросли из языков доказательства теорем.

tailgunner ★★★★★
()

вот что, например, говорит педивикия

# AIML for an AI language based on matching patterns in speech
# SNOBOL for a programming language based on one kind of pattern matching
# Tom (pattern matching language)

а вообще сравнение с образцом много где есть
и в Haskell есть. и, скажем, в Nemerle,- тоже есть
что считать ЯИИ я уж не знаю

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

>ХЗ, какое именно сравнение с образцом имеется в виду, но оно (aka pattern matching) есть как ммнимум в Ocaml/SML, Erlang и уже упомянутом Haskell,

Я ошибаюсь, если скажу, что там это сравнение основывается только на расщеплении списка на голову и хвост в стиле [X|Y] ? Если не ошибаюсь, то это не то.

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

> Я ошибаюсь, если скажу, что там это сравнение основывается только на расщеплении списка на голову и хвост в стиле [X|Y] ?

Да, ты ошибаешься.

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

>Да, ты ошибаешься.

Тогда, плиз, ссылку на другой pattern matching, ибо в гугле pattern matching haskell даёт только "голову-хвост".

anonymous
()

Кстати, для ИИ ИМХО подойдёт ерланг. Главным образом из-за наличия распределенного хранилища данных "из коробки". Паттерн матчинг есть и в ерланге, но там нет карринга, типизации Хиндли-Милнера, да и функции не объекты первого класса.

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

> ссылку на другой pattern matching, ибо в гугле pattern matching haskell даёт только "голову-хвост".

С Хаскелем я знаком в наименьшей степени, вот ссылки на Эрланг и Окамль: http://www.erlang.org/doc/reference_manual/expressions.html http://www.ocaml-tutorial.org/data_types_and_matching

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

> для ИИ ИМХО подойдёт ерланг. Главным образом из-за наличия распределенного хранилища данных "из коробки".

Хм, а для ИИ так важно наличие распределенного хранилища? %)

> да и функции не объекты первого класса.

?

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

У эрланга по описанию то же, что и у хаскеля/пролога. А у окамла что, сравнение с образцом на основе регулярной грамматики? Зачем они там выражение переписывают?

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

Haskell поддерживает алгебраические типы данных и позволяет
проводить по ним сравнение с образцом. Вот простой пример :

data Maybe a = Nothing                  -- обьявление ADT с двумя конструкторами
             | Just a

showMaybe :: (Show a) => Maybe a -> IO ()
showMaybe Nothing = putStrLn "No value" -- сравнение с образцом
showMaybe Just n  = putStrLn $ show n   -- сравнение с образцом

если речь не об этом, то будь добр обьясни - что же именно
тебе нужно

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

>если речь не об этом, то будь добр обьясни - что же именно тебе нужно

Хорошо, объясняю на примере. Мне нужна возможность разбирать термы и выражения на их основе, как это делает рефал. К примеру, x+(y-(r*t)) превратить в лиспоподобную запись можно было бы таким способом:

expr.0 expr.1 + expr.2 expr.3 = expr.0 (+ expr.1 expr.2) expr.3 expr.0 expr.1 - expr.2 expr.3 = expr.0 (- expr.1 expr.2) expr.3 expr.0 expr.1 * expr.2 expr.3 = expr.0 (* expr.1 expr.2) expr.3

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

>если речь не об этом, то будь добр обьясни - что же именно
тебе нужно

Хорошо, объясняю на примере. Мне нужна возможность разбирать термы и
 выражения на их основе, как это делает рефал. К примеру, x+(y-(r*t))
 превратить в лиспоподобную запись можно было бы таким способом:


expr.0 expr.1 + expr.2 expr.3 = expr.0 (+ expr.1 expr.2) expr.3
expr.0 expr.1 - expr.2 expr.3 = expr.0 (- expr.1 expr.2) expr.3
expr.0 expr.1 * expr.2 expr.3 = expr.0 (* expr.1 expr.2) expr.3


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

> Мне нужна возможность разбирать термы и выражения на их основе, как это делает рефал

Может, тебе пользоваться Рефалом?

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

посмотри GADT'ы. я с ними разбирался совсем немного, но motivating example похож на то, о чём ты говоришь. к сожалению больше помочь не могу ничем, с подобным паттерн-матчингом не работал

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

>Может, тебе пользоваться Рефалом?

Дык я не про это. ;) А про то, есть ли что-то ещё, помощнее и погибче.

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

Спасибо, за Рефал. Интересное чтиво. В Хаскелле такого точно нельзя сделать так просто. Буду смотреть дальше.

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

> Хорошо, объясняю на примере. Мне нужна возможность разбирать термы и выражения на их основе, как это делает рефал.

термы -- это в смысле сырые строки или уже структурированные данные?

Если строки, то Icon и, может быть, Snobol. Возможности этих языков войдут в Perl 6, можно ещё там смотреть.

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

>термы -- это в смысле сырые строки или уже структурированные данные?

Термы - это выражения со сбалансированными скобками.

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

> Термы - это выражения со сбалансированными скобками.

С каких это пор? Терм, в общем случае -- некая сущность.

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

>С каких это пор? Терм, в общем случае -- некая сущность.

А термы в контексте исходного сообщения - это выражения со сбалансированными скобками.

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

> А термы в контексте исходного сообщения - это выражения со сбалансированными скобками.

Чёт я так и не понял, речь о строках или о чём-то большем? В разобранном выражении никаких скобок как бы уже и нету. Если речь о разобранных данных, то тогда это к Прологу. Или к Лиспу, там pattern matching хоть и не встроенный, но часто реализуется. Уже лекции так на четвёртой SICPа показывается, как его делать.

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

>В разобранном выражении никаких скобок как бы уже и нету.

Как это нету?

>Если речь о разобранных данных, то тогда это к Прологу. Или к Лиспу, там pattern matching хоть и не встроенный, но часто реализуется.

Пролог неэффективен. Особенно это заметно при большом количестве шаблонов. И ввод/вывод у него трудно программировать. Вот если бы он был бы встроен в какой-то язык... А у лиспа я не нашёл ничего, кроме регеспов. Так регеспы и в других языках есть.

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

>>В разобранном выражении никаких скобок как бы уже и нету.

>Как это нету?

Допустим, было выражение два плюс три, всё умножить на пять.
В памяти оно, допустим, размещается так:

0x00409E20: 0x00000000  ; immediate
0x00409E24: 0x00000002  ;
0x00409E28: 0x00000000  ; immediate
0x00409E2C: 0x00000003  ; 3
0x00409E30: 0x00000001  ; +
0x00409E34: 0x00409E20  ;
0x00409E38: 0x00409E28  ;
0x00409E3C: 0x00000000  ; immediate
0x00409E40: 0x00000005  ; 5
0x00409E44: 0x00000003  ; *
0x00409E48: 0x00409E30  ;
0x00409E4C: 0x00409E3C  ;

Указатель на корень выражения равен 0x00409E44

Вопрос ребром: где здесь скобки?

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