Prolog - 遇到问题

时间:2015-11-05 22:29:17

标签: prolog

minu('-').
minu('+').
minu('/').

f(A):-
   atom_chars(A,X),
   write(X),
   fun(X).

fun([]).

fun([A]):-
   not(minu(A)).

fun([Hd|Tail]):-
   not(minu(Hd)),
   fun(Tail).

我正在尝试创建一个带有字符串的函数“f”,如果“ - ”,“+”或“/”不在其中,则返回True。

但是一旦我使用递归调用。它只是返回false。

编辑::

解决方案发现::

谢谢你,潜伏者...谢谢你,Daniel Lyons ...... 我很抱歉这是一个漫长的一天学习Prolog ...我应该去睡觉。

f(A):-
 atom_chars(A,X),
 write(X),
 fun(X).

fun([]).

fun([A]):-
 not(minu(A)).

fun([Hd|Tail]):-
 not(minu(Hd)),
 fun(Tail).

1 个答案:

答案 0 :(得分:2)

我试试这个:

minu('-').
minu('+').
minu('/').

f(A) :- 
  atom_chars(A, Chars),
  \+ (minu(Op), memberchk(Op, Chars)).

顺便说一句,重要的是要注意Prolog不会“返回”任何东西;如果目标成功与否,它会告诉你truefalse,例如:

?- f("this is a string").
true.

?- f("this i-a string").
false.

?- f("this i+a string").
false.