lab4 logic


Институт Транспорта и связи
Лабораторная работа №4
По дисциплине
« Логическое программирование»
Тема: СудокуСтудент: Сергей Маринин
Группа: 4401BD
Рига
2017 г.
Пример реализации судоку 1
:- use_module(library(clpfd)). % подкоючаем библиотеку clpfdresolver_sudoku(Filas) :-
append(Filas, NueveFilas), NueveFilas ins 1..9, % объединение списков
maplist(all_distinct, Filas), % истина, если операция была успешно применена ко всем элементам списка
transpose(Filas, Columnas), %используем транспортирование
maplist(all_distinct, Columnas), % истина, если операция была успешно применена ко всем элементам списка
Filas = [A,B,C,D,E,F,G,H,I], % матрица с 9 значениями
maplist(label, Filas). % истина, если операция была успешно применена ко всем элементам списка
Пример реализации судоку 2
:- use_rendering(sudoku). %подключаем рендеринг для судоку
:- use_module(library(clpfd)). % подкоючаем библиотеку clpfdsudoku(Rows) :- % предикат sudoku(Rows) принимает матрицу в виде набора списков
length(Rows, 9), maplist(same_length(Rows), Rows), %
append(Rows, Vs), Vs ins 1..9, % объединение списков
maplist(all_distinct, Rows), % истина, если операция была успешно применена ко всем элементам списка
transpose(Rows, Columns), % транспортирование
maplist(all_distinct, Columns), % истина, если операция была успешно применена ко всем элементам списка
Rows = [A,B,C,D,E,F,G,H,I], % матрица с 9 значениями
blocks(A, B, C), blocks(D, E, F), blocks(G, H, I). %формирует 3 блока
blocks([], [], []).
blocks([A,B,C|Bs1], [D,E,F|Bs2], [G,H,I|Bs3]) :-
all_distinct([A,B,C,D,E,F,G,H,I]), % истина, если все числа имеют разное значение
blocks(Bs1, Bs2, Bs3).
problem(1, [[_,_,_, _,_,_, _,_,_],
[_,_,_, _,_,3, _,8,5],
[_,_,1, _,2,_, _,_,_],
[_,_,_, 5,_,7, _,_,_],
[_,_,4, _,_,_, 1,_,_],
[_,9,_, _,_,_, _,_,_],
[5,_,_, _,_,_, _,7,3],
[_,_,2, _,1,_, _,_,_],
[_,_,_, _,4,_, _,_,9]]).

Приложенные файлы

  • docx 1529750
    Размер файла: 19 kB Загрузок: 0

Добавить комментарий