Prolog 中的输出问题
Issue with output in Prolog
我最近想用 Prolog 进行实验以了解统一过程的工作原理,所以我将以下代码写入 return 列表中的第 n 个元素。
getfromarray([X|_],1,X).
getfromarray(A,N,E):-
N > 1,
A = [_|Y],
N1 is N-1,
getfromarray(Y,N1,E).
但是,在将输入输入到程序后
getfromarray(A,3,E)
,它 returns :-
A = [_G5129, _G5132, E|_G5136]
我了解到,由于我写了规则 A = [_|Y]
,所以 A 被统一以满足程序中规则的条件,因此 A 以这种格式显示。但是,我不明白为什么 E 没有与数组中的值统一。我确实通读了 Prolog 中统一的基础知识,我明白虽然答案没有错,但它并没有达到预期的目的。有人可以建议我可能错过的统一主题,这可能会帮助我解决这个小问题吗?
编辑:
当我将列表作为参数传递给程序时,它给出了list.However中E的关联值,当我将变量A与列表统一并将A作为参数传递给程序时,它显示了与我上面提到的输出相同。
5 ?- getfromarray([1,2,5,4,5],3,E).
E = 5 .
6 ?- A = [1,2,3,4,5].
A = [1, 2, 3, 4, 5].
7 ?- getfromarray(A,3,E).
A = [_G576, _G579, E|_G583] .
8 ?-
Prolog 不存储您的列表 A,因此 A 未实例化。
A = [1, 2, 3, 4, 5].
getfromarray(A,3,E).
这就像调用 :
getfromarray(A,3,E).
试试这个:
A = [1, 2, 3, 4, 5], getfromarray(A,3,E).
我最近想用 Prolog 进行实验以了解统一过程的工作原理,所以我将以下代码写入 return 列表中的第 n 个元素。
getfromarray([X|_],1,X).
getfromarray(A,N,E):-
N > 1,
A = [_|Y],
N1 is N-1,
getfromarray(Y,N1,E).
但是,在将输入输入到程序后
getfromarray(A,3,E)
,它 returns :-
A = [_G5129, _G5132, E|_G5136]
我了解到,由于我写了规则 A = [_|Y]
,所以 A 被统一以满足程序中规则的条件,因此 A 以这种格式显示。但是,我不明白为什么 E 没有与数组中的值统一。我确实通读了 Prolog 中统一的基础知识,我明白虽然答案没有错,但它并没有达到预期的目的。有人可以建议我可能错过的统一主题,这可能会帮助我解决这个小问题吗?
编辑: 当我将列表作为参数传递给程序时,它给出了list.However中E的关联值,当我将变量A与列表统一并将A作为参数传递给程序时,它显示了与我上面提到的输出相同。
5 ?- getfromarray([1,2,5,4,5],3,E).
E = 5 .
6 ?- A = [1,2,3,4,5].
A = [1, 2, 3, 4, 5].
7 ?- getfromarray(A,3,E).
A = [_G576, _G579, E|_G583] .
8 ?-
Prolog 不存储您的列表 A,因此 A 未实例化。
A = [1, 2, 3, 4, 5].
getfromarray(A,3,E).
这就像调用 :
getfromarray(A,3,E).
试试这个:
A = [1, 2, 3, 4, 5], getfromarray(A,3,E).