输入错误:`character_code'与prolog一起预期

时间:2017-05-27 09:56:11

标签: prolog primes swi-prolog prolog-toplevel goldbach-conjecture

我是prolog的新手。我正在编写一个代码与Goldbach的猜想问题,我必须列出所有可能的一个偶数组。我找到了这样的代码:

is_prime(2).
is_prime(3).
is_prime(P) :- integer(P), P > 3, P mod 2 =\= 0, \+ has_factor(P,3).  

has_factor(N,L) :- N mod L =:= 0.
has_factor(N,L) :- L * L < N, L2 is L + 2, has_factor(N,L2).

goldbach(4,[2,2]) :- !.
goldbach(N,L) :-
  N mod 2 =:= 0,
  N > 4,
  goldbach(N,L,3).
goldbach(N,[P,Q],P) :-
  Q is N - P,
  is_prime(Q), P < Q.
goldbach(N,L,P) :-
  P < N,
  next_prime(P,P1),
  goldbach(N,L,P1).



next_prime(P,P1) :- P1 is P + 2, is_prime(P1), !.
next_prime(P,P1) :- P2 is P + 2, next_prime(P2,P1).

然而,当我执行程序时,程序会成功打印第一组,但随后出现错误。

1 ?- goldbach(28, L).
L = [5, 23]
ERROR: Type error: `character_code' expected, found `-1' (an integer)
ERROR: In:
ERROR:   [11] char_code(_4206,-1)
ERROR:   [10] '$in_reply'(-1,'?h') at c:/program files/swipl/boot/init.pl:779

我不知道这个错误是怎么发生的,我在互联网上寻找信息却一无所获。有人有什么想法吗?谢谢你的回答。

1 个答案:

答案 0 :(得分:0)

在Prolog打印出第一个答案后,它等待您的输入告诉它您是否对更多答案感兴趣。对于第一个近似值,要按的有效键是; (分号)或空格 n ,如果您想要更多答案,或(句号)或输入 y 如果您对更多答案不感兴趣。

看起来您正在使用其他一些意想不到的密钥或密钥组合。如果您尝试键入; 但键盘上没有单键,请尝试 Space n

我可以在每个答案后按; 从您发布的代码中成功获得几个答案:

?- goldbach(28, L).
L = [5, 23] ;
L = [11, 17] ;
false.

修改:与您在Windows上一样,After the first answer, Prolog shows the error "char_code/2: Cannot represent due to 'character_code'"使用swipl-win.exe代替swipl.exe的答案也可能有用。