Prolog fd_domain未定义
发布时间:2020-12-14 23:22:32 所属栏目:资源 来源:网络整理
导读:好的,所以我正在尝试为学校项目编写这个简单的数独求解器.我正在使用SWI – Prolog,我正在使用库clpfd. 当我使用domain / 3谓词时出现问题.它没有给出任何语法错误,只有程序返回“false”而不是实际的解决方案. 请原谅我的Noobness,但我完全是Prolog和声明性
好的,所以我正在尝试为学校项目编写这个简单的数独求解器.我正在使用SWI – Prolog,我正在使用库clpfd.
当我使用domain / 3谓词时出现问题.它没有给出任何语法错误,只有程序返回“false”而不是实际的解决方案. 请原谅我的Noobness,但我完全是Prolog和声明性语言的新手. 这是我的完整代码: :- use_module(library(clpfd)). sudoku(Solution,Puzzle):- Solution = Puzzle,Solution =[[A1,A2,A3,A4,A5,A6,A7,A8,A9],[B1,B2,B3,B4,B5,B6,B7,B8,B9],[C1,C2,C3,C4,C5,C6,C7,C8,C9],[D1,D2,D3,D4,D5,D6,D7,D8,D9],[E1,E2,E3,E4,E5,E6,E7,E8,E9],[F1,F2,F3,F4,F5,F6,F7,F8,F9],[G1,G2,G3,G4,G5,G6,G7,G8,G9],[H1,H2,H3,H4,H5,H6,H7,H8,H9],[I1,I2,I3,I4,I5,I6,I7,I8,I9]],valid_domain(Puzzle,1,9),%Squares Sqr1 = [A1,B1,C1,C3],Sqr2 = [A4,C6],Sqr3 = [A7,A9,B9,Sqr4 = [D1,E1,F1,F3],Sqr5 = [D4,F6],Sqr6 = [D7,D9,E9,Sqr7 = [G1,H1,I1,I3],Sqr8 = [G4,I6],Sqr9 = [G7,G9,H9,I9],%Rows Row1 = [A1,Row2 = [B1,Row3 = [C1,Row4 = [D1,Row5 = [E1,Row6 = [F1,Row7 = [G1,Row8 = [H1,Row9 = [I1,%Columns Col1 = [A1,D1,G1,I1],Col2 = [A2,I2],Col3 = [A3,Col4 = [A4,I4],Col5 = [A5,I5],Col6 = [A6,Col7 = [A7,I7],Col8 = [A8,I8],Col9 = [A9,C9,F9,valid([Row1,Row2,Row3,Row4,Row5,Row6,Row7,Row8,Row9,Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Sqr1,Sqr2,Sqr3,Sqr4,Sqr5,Sqr6,Sqr7,Sqr8,Sqr9]),show([Row1,Row9]). valid_domain(List,Min,Max):- domain(List,Max). %HERE IS THE ERROR% valid([]). valid([H|T]):- all_different(H),valid(T). show([]). show([H,T]):- show_row(H),write('|'),nl,show(T). show_row([]). show_row([H,T]):- write('|'),write(H),show_row(T). 我的查询: sudoku(Solution,[4,8,7,_,5,6,9,4,3,2,_]). 解决方法
SWI-Prolog库(clpfd)没有域/ 3.
尝试 valid_domain(List,Max):- List ins Min..Max. 你应该纠正一些错字: show([H|T]):- ... show_row([H|T]):- ... 编辑:如果你保留’列表列表’表示,你应该写 valid_domain(List,Max) :- flatten(List,Temp),Temp ins Min..Max. 当然,取消注释.我错误地建议这样做. 编辑:由于输入’形状’数据,调整解决方案变量: sudoku(Solution,Puzzle):- Solution = Puzzle,Solution = [A1,I9 ],Solution ins 1..9,%Squares ... 并在显示前添加label / 1: ... label(Solution),Row9]). 经过所有这些修正后,我明白了 |4|8|7|3|5|1|9|6|2| |9|1|5|4|2|6|7|8|3| |2|3|6|7|8|9|5|4|1| |3|9|4|8|1|5|6|2|7| |1|6|2|9|7|4|3|5|8| |5|7|8|2|6|3|1|9|4| |6|4|3|1|9|8|2|7|5| |7|5|1|6|4|2|8|3|9| |8|2|9|5|3|7|4|1|6| (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |