我们正在尝试开展一个学校项目,解决在亚马逊大楼收集物品的问题。
我们认为我们的代码几乎已经设置但是不能将一个简单的整数传递给Clause进行检查,我们总是得到错误的ObjectType。
domains
posicionInicial = Symbol
posicionFinal= Symbol
posicion = Symbol
idestanteria = Symbol
nombre = Symbol
distancia = integer
cantidad = integer
/* lineapedido = linea (Symbol, integer) */
/* pedido = lineapedido* */
predicates
estanteria (idestanteria,posicion)
valido (nombre,posicion,cantidad)
ubicacion (nombre, idestanteria, cantidad)
conectado (posicionInicial, posicionFinal, distancia)
mueve (posicionInicial,posicionFinal,nombre, cantidad, distancia)
resuelve (nombre,cantidad)
clauses
estanteria(s1,ps1).
estanteria(s2,ps2).
estanteria(s3,ps3).
estanteria(s4,ps4).
estanteria(s5,ps5).
estanteria(s6,ps6).
estanteria(s7,ps7).
estanteria(s8,ps8).
ubicacion(patatas,s1,200).
ubicacion(melones,s1,100).
ubicacion(boligrafos,s2,500).
ubicacion(boligrafos,s3,400).
ubicacion(melocotones,s4,200).
ubicacion(berzas,s4,100).
ubicacion(papeles,s5,500).
ubicacion(boligrafos,s6,400).
ubicacion(plumas,s7,500).
ubicacion(plumas,s8,400).
ubicacion(colonias,s3,150).
ubicacion(ratones,s4,210).
/* Conexiones IDA */
conectado (pc1,pc2,10).
conectado (pc2,pc3,10).
conectado (pc3,pc4,10).
conectado (pc4,t,10).
conectado (ps1,pc1,5).
conectado (ps2,pc2,5).
conectado (ps3,pc3,5).
conectado (ps4,pc4,5).
conectado (ps6,pc6,5).
conectado (ps7,pc7,5).
conectado (ps8,pc8,5).
/* Conexiones vuelta */
conectado (pc2,pc1,10).
conectado (pc3,pc2,10).
conectado (pc4,pc3,10).
conectado (t,pc4,10).
conectado (pc1,ps1,5).
conectado (pc2,ps2,5).
conectado (pc3,ps3,5).
conectado (pc4,ps4,5).
conectado (pc6,ps6,5).
conectado (pc7,ps7,5).
conectado (pc8,ps8,5).
/* Mueve S -> PC1 */
mueve (s,pc1,nombre, cantidad, distancia):-
conectado (posicion,posicion, distancia),
valido (nombre, pc1, cantidad).
mueve (pc1,ps1,nombre, cantidad, distancia):-
conectado (posicion,posicion, distancia),
valido (nombre, ps1, cantidad).
valido (nombre, posicion, cantidad):-
estanteria (idestanteria, posicion),
ubicacion (nombre, idestanteria, cantidad).
/* Resolucion algoritmo */
resuelve (nombre,cantidad):-
/* lineapedido = [H|T],*/
/* H = linea (patatas, 200), */
mueve (posicionInicial, posicionFinal, nombre, cantidad, distancia),
write ("HOLA").
goal
resuelve(patatas, 1).
当我们尝试编译时,我们收到此错误: E; Test_Goal,pos:1922,512类型错误:对象类型错误
这需要我们这一行:
valido(nombre,posicion,cantidad): -
当它只传递一个整数作为参数时,似乎无法找到原因。 提前谢谢,如果需要别的东西,请告诉我。
答案 0 :(得分:1)
除了回答1 之外,我可以说你几乎完全输入symbol
而不是variable
s。
变量名语法:
第一个字符是大写字母或下划线(“_”);
其余字符是任何情况的字母数字字符或下划线;
在适当时将symbols
替换为variable
。
<强> EDIT1:强> 示例:
domains
any=term,
list = any*
predicates
member(any, list)
clauses
member(X, [X | _ ]).
member(X, [ _ | Y]) :- member(X,Y).
"_"
表示匿名变种。与常规(命名)变量不同,匿名变量都是不同的:"_"
不是名称,而是指标 - “这是一个匿名。变种。不关心它的名字”
<强> EDIT2:强>
有用的链接:
Markus Triska
答案 1 :(得分:0)
valido (nombre, posicion, cantidad)
不是有效的规则头或谓词调用。
您不能在谓词名称和第一个括号之间添加空格。
例如,test (1).
无法编译:
ERROR: c:/test.pl:1:5: Syntax error: Operator expected
但test(1).
确实如此。
所以删除所有这些空格。