我正在尝试检查字符串是否是可以执行的工作调用。为此,我解析字符串,获取第一个单词,如果它与预定义函数的数据库匹配,它应该成功。 Q有字符串,A将在以后使用,而不是现在使用。字符串的示例是:追加a和b。
is_uni(Q, A):-
split_string(Q, " ", ",", [X|Y]),
uni_db(Z),
member(X, Z).
uni_db([
append,
member,
append1
]).
答案 0 :(得分:0)
你将字符串与原子混淆。
"append"
和'append'
,a.k.a。append
是不同的。您可以使用atom_string/2
进行转换:
..., atom_string(A, X), ...
您正在重新实现内置功能。</ p>
为什么要将命令存储在列表中并使用member/2
进行迭代?只需定义一些事实:
uni_db(append).
uni_db(member).
uni_db(append1).
然后,您只需检查是否uni_db(A)
。这可以通过实施得到更好的支持,并且更有可能有效地完成。
答案 1 :(得分:0)
您需要使用atom_codes/2
谓词将咒语转换为原子,例如,您需要将"append"
转换为append
才能生效。
is_uni(Q,A):-
split_string(Q, " ", ",", [X|Y]),
atom_codes(W,X),
uni_db(Z),
member(W, Z).
示例:
?- is_uni("append a and b",A).
true ;
false.