311.txt

来自「prolog设计的关于八数码问题的源代码」· 文本 代码 · 共 67 行

TXT
67
字号
domains
  state=symbol
database-mydatabase
  open(state,integer)
  closed(integer,state,integer)
  tes(state)
  open1(state,integer)
  min(state,integer)
  mark(state)
  fail_
predicates
  solve
  search(state,state)
  result
  searching
  step4(integer,state)
  step56(integer,state)
  equal(state,state)
  repeat
  resulting(integer)
  rule(state,state)
goal
  solve.
clauses
  solves:-search(<初始状态>,<目标状态>),result.
/*例如
solve:-
search(st(0,1,2,3,4,5,6,7,8),st(1,2,8,3,4,5,6,7,1)),result.
*/
search(begin,end):-
  retractall(_,mydatebase),
  assert(closed(0,begin,0)),
  assert(open(begin,0)),
  assert(mark(end)),
  repeat,
  searching,!.
result:-
  not(fail_),
  retract(closed(0,_,0)),
  closed(m,_,_),
  resulting(m),!.
result:-beep,write("sorry don't find a road!").
searching:-
  open(state,pointer),
  retract(open(state,pointer)),
  closed(no, _, _),no2=no+1,
  asserta(closed(no2,state,pointer)),
  !,step4(no2,state).
searching:-assert(fail_).

step4(_,state):-mark(end),equal(state,end).
step4(no,state):-step56(no,state),!,fail.
step56(no,stateX):-
    rule(stateX,stateY),
    not(open(stateY,_)),
    not(closed(_,stateY,_)),
    assertz(open(stateY,no)),
    fail.
step56(_,_):-!.
  equal(X,X).
  repeat.
  repeat:-repeat.
  resulting(N):-closed(N,X,M),asserta(res(X)),resulting(M).
  resulting(_):-res(X),write(X),nl,fail.
  resulting(_):-!.
  rule(X,Y):-road(X,Y).
run

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?