加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

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|

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读