将数字作为参数传递给可执行文件(使用ciaoc编译的Prolog代码)会生成错误

问题描述 投票:0回答:1

我需要将Prolog代码编译成一个可执行文件,读取两个参数(一个是文本字符串,另一个是数字)

%test.pl:
main([A,N]) :-
            Z is 2 * N,
            write(A), nl,
            write(Z), nl.

使用Ciao解释器我得到:

?- main([hi,5]).
hi
10

但是使用ciaoc编译时运行相同的代码会出现以下错误:

~ $ ciaoc test.pl
~ $ ./test hi 5
{ERROR: No handle found for thrown error error(type_error(evaluable,5),arithmetic:is/2-2)}
prolog ciao-prolog
1个回答
0
投票

我发现的解决方案是将数字转换为ascii代码并返回到数字:

%test.pl
main([A,N]) :-
        atom_codes(N, Code), % find ascii code for N
        number_codes(X, Code), % find number from ascii code
        Z is 2 * X,
        write(A), nl,
        write(Z), nl.

已编译的可执行文件不再生成错误:

~ $ ciaoc test.pl
~ $ ./test hi 5
hi
10
© www.soinside.com 2019 - 2024. All rights reserved.