Недетерминирован программирования язык является языком , который может указать, в определенные моменты в программе ( так называемый «выбор точек»), различные альтернативы для выполнения программы . В отличие от оператора if-then , метод выбора между этими альтернативами напрямую программистом не определяется; программа должна решить во время выполнениямежду альтернативами, с помощью некоторого общего метода, применяемого ко всем точкам выбора. Программист указывает ограниченное количество альтернатив, но программа должна позже выбрать между ними. («Выбрать» - это, по сути, типичное имя для недетерминированного оператора.) Может быть сформирована иерархия точек выбора, при этом выбор более высокого уровня ведет к ветвям, содержащим в себе варианты выбора более низкого уровня.
Один из выбранных методов воплощен в системах обратного отслеживания (таких как Amb , [1] или унификация в Prolog ), в которых некоторые альтернативы могут «потерпеть неудачу», заставляя программу возвращаться и пробовать другие альтернативы. Если все альтернативы терпят неудачу в определенной точке выбора, то выходит из строя вся ветвь, и программа возвращается дальше, к более старой точке выбора. Одна из сложностей заключается в том, что, поскольку любой выбор является предварительным и может быть переделан, система должна иметь возможность восстанавливать старые состояния программы, устраняя побочные эффекты, вызванные частичным выполнением ветки, которая в конечном итоге завершилась неудачно.
Другой предпочтительный метод - обучение с подкреплением, воплощенное в таких системах, как Alisp . [2] В таких системах, а не с возвратом, система отслеживает некоторую меру успеха и учится, какой выбор часто приводит к успеху и в каких ситуациях (как внутреннее состояние программы, так и входные данные среды могут повлиять на выбор). Эти системы подходят для приложений к робототехнике и других областях, в которых обратное отслеживание будет включать попытки отменить действия, выполняемые в динамической среде, что может быть трудным или непрактичным.
Смотрите также
- Недетерминизм (значения)
- Категория: Недетерминированные языки программирования
- ангельский недетерминизм
- демонический недетерминизм