当我的输入列表为空时,我不明白为什么我的程序不会停止,尽管有一个事实可以处理这种情况。这里是我的代码:当我的列表为空时,我的序言程序不会停止
build_vps([], []).
build_vps([X | Ys], Zs):-
atom_number(X, C),
number(C),
build_vps(Ys, Zs).
build_vps([X, Y, Z | Ys], Zs):-
Y = '^',
atom_number(Z, C),
number(C),
build_vps(Ys, [v(C, X) | Zs]).
build_vps([X, Y, Z | Ys], [v(1, X)| Zs]):-
Y \= '^',
build_vps([Y, Z | Ys], Zs).
我喜欢这个角色的列表[X,^,“3],我应该把这些字符转换成一个结构类似这样的V(3,X)。我称之为build_vps([x,y,^,'3',R))。我试图达到的是R = [v(1,x),v(3,y)]。
你能告诉你如何从顶层调用它吗?也许你想要达成什么解释? – 2016-11-22 14:50:31
当您在第一个参数中使用列表编写递归谓词时,请尝试尽可能使用两个子句:'foo([] ...)。'和'foo([H | T],.. 。): - ...,foo(T,...)。 – 2016-11-22 14:57:50
你应该编辑你的答案,并精确地显示**你如何加载文件,你如何做查询,以及发生了什么。现在,对我来说,运行'? - build_vps([x,y,^,3],R).'(我不得不在'^'后加一个逗号)给我'ERROR:atom_number/2:Type error: '原子'预期,找到'3'(一个整数)'。所以我不能用你给我的东西来重现你的错误。 – 2016-11-22 15:25:33