Програмування в обмеженнях (або програмування обмеженнями) парадигма програмування, у якій відношення між змінними зазначені у формі обмежень. Обмеження відрізняються від загальних примітивів мов імперативного програмування тим, що вони визначають не послідовність кроків для виконання, а властивості шуканого рішення. Це робить програмування в обмеженнях формою декларативного програмування. Обмеження, які використовуються в програмуванні в обмеженнях, бувають різних видів: ті, які використовуються в задачах задоволення умов (наприклад, «А або В істинно»), ті, які розв'язуються симплекс-алгоритмом (наприклад, «x 5») й інші. Обмеження, як правило, убудовані в мову програмування або здійснюються через окремі програмні бібліотеки.

Програмування в обмеженнях почалося із логічного програмування з обмеженнями, яке є вкладанням обмежень у логічне програмування. Поява цього варіанта логічного програмування пов'язана з іменами Jaffar і Lassez, які розширили в 1987 році певний клас обмежень, що були уведені в Prolog II. Першими реалізаціями логічного програмування в обмеженнях були Пролог III, CLP (R) і CHIP. Деякі інтерпретатори логічного програмування в обмеженнях існують і сьогодні, наприклад GNU Prolog.

Крім логічного програмування, обмеження можуть бути змішані з функціональним програмуванням, переписуванням термів та імперативною мовою. Мови програмування з убудованою підтримкою обмежень включають Oz[en] (функціональне програмування) і Kaleidoscope (імперативне програмування). Головним чином, обмеження здійснюються в імперативних мовах через інструментальні засоби для розв'язування задач із обмеженнями, які є окремими бібліотеками для існуючих імперативних мов.

Логічне програмування в обмеженнях

Детальніші відомості з цієї теми ви можете знайти в статті Логічне програмування в обмеженнях[en].

Часові обмеження паралельного програмування (KTC) і недетерміновані часові обмеження паралельного програмування (NTCC) є варіантами програмування в обмеженнях, які можуть мати справу з часом.

Деякі мови, що підтримують програмування в обмеженнях

  • Alma-0[en] невелика, строго типізована, мова обмежень з незначною кількістю функцій логічного програмування, що підтримують імперативне програмування.
  • Common Lisp за допомогою Screamer — (вільна бібліотека програмного забезпечення, яке забезпечує відкіт і CLP(R), можливості CHiP).

Див. також

Посилання

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.