首页 > 解决方案 > 加载同一文件偶数次后Prolog错误?

问题描述

我对序言很陌生。我正在尝试实现一个解谜程序,但我发现了这个问题,但我不知道原因。当我第一次加载程序并执行查询时,它会正常工作,如果我再次加载程序,相同的查询会引发下一个错误:

ERROR: Unknown procedure: '__aux_maplist/3_espacos_fila+1'/3
ERROR: In:
ERROR:   [12] '__aux_maplist/3_espacos_fila+1'([[...|...],...|...],_31744,h)
ERROR:   [11] espacos_puzzle([[...|...],...|...],_31790) at c:/users/admin/onedrive - universidade de lisboa/documents/github/ist/cadeiras/1ano_2sem/lp/projectos/pacote_projecto/pacote_projecto/projecto1.pl:129
ERROR:    [9] <user>
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
   Exception: (12) '__aux_maplist/3_espacos_fila+1'([[[0, 0], [0, 0], [0, 0], [17, 0], [10, 0]], [[0, 0], [24, 0], [11, 3], 
_29968, _29974], [[0, 16], _30004, _30010, _30016, _30022], [[0, 26], _30052, _30058, _30064|...], [[0, 17], _30100, _30106|...]], _32024, h) ?

第 129 行是:

maplist(espacos_fila(h), Puzzle, Espacos_h_l)

并且函数 espacos_fila/3 接收一个常量(h 或 v(水平或垂直)),一行格式[[0,17], P52, P53, [0,3], P_55]],和第三个参数是类型的结构列表[espaco(17, [P52], [P53]), espaco(3, [P_55])]。如果我中止并再次加载程序,我不会收到任何错误...我不明白为什么我第二次收到错误。查询是:

Puzzle = [[[0, 0], [0, 0], [0, 0], [17, 0], [10, 0]],
[[0, 0], [24, 0], [11, 3], P24, P25],
[[0,16], P32, P33, P34, P35],
[[0,26], P42, P43, P44, P45],
[[0,17], P52, P53, [0,0], [0,0]]],
espacos_puzzle(Puzzle, Espacos).

预期的结果是:

Puzzle = [[[0, 0], [0, 0], [0, 0], [17, 0], [10, 0]], [[0, 0], [24, 0], [11, 3], P24, P25], [[0, 16], P32, P33, P34, P35], [[0, 26], P42, P43, P44, P45], [[0, 17], P52, P53, [...|...]|...]],
Espacos = [espaco(3, [P24, P25]), espaco(16, [P32, P33, P34, P35]), espaco(26, [P42, P43, P44, P45]), espaco(17, [P52, P53]), espaco(24, [P32, P42, P52]), espaco(11, [P33, P43|...]), espaco(17, [P24|...]), espaco(10, [...|...])].

(抱歉没有显示太多代码,但这是一个大学项目,所以我不能只是在互联网上复制粘贴我的程序......)

标签: prologswi-prolog

解决方案


推荐阅读