字母比方说,我希望有类似的比较,一些规则迭代通过在序言
isin(0,_).
isin(N,List) :- member(N,List), write(N), N1 is N-1, isin(N1,List).
但列表将包含字母符号(例如,[A,B,d,E,H])。我如何将下一个元素发送到迭代? (所以N是一个符号,而不是数字)。如果这是不可能的,我怎么能做出类似的东西?
提前致谢!
字母比方说,我希望有类似的比较,一些规则迭代通过在序言
isin(0,_).
isin(N,List) :- member(N,List), write(N), N1 is N-1, isin(N1,List).
但列表将包含字母符号(例如,[A,B,d,E,H])。我如何将下一个元素发送到迭代? (所以N是一个符号,而不是数字)。如果这是不可能的,我怎么能做出类似的东西?
提前致谢!
@julkiewicz几乎有:
isin(a, _).
isin(Char, List) :-
member(Char, List),
char_code(Char, Code),
write(Char),
Code1 is Code-1,
char_code(Char1, Code1),
isin(Char1, List).
注意,谓词将始终a
成功,就像原来的版本总是会成功的0
。您可以防止通过改变基础子句类似
isin(Char, _) :-
char_code(a, A),
Char is A-1.
(不过这确实是一个丑陋的黑客攻击。)
注意:这适用于字符串,而不适用于OP所要求的符号。
那么好像字符真的被解释为数字列表。所以这个工程:
?- X = "a".
X = [97].
?- X is "a".
X = 97.
?- X is "a" + 1.
X = 98.
原来这就是我提出:
isin("a", _).
isin(N, List) :- member(N, List), N1 is N - 1, isin([N1], List).
有没有这种语言很长一段时间写的东西虽然。
除了在字符串'write'(成炭代码列表)'“一” '打印'[97]'。 – 2011-03-27 21:09:09
是的,没错。他们是列表号码,但'是'自动解包它们。 – julkiewicz 2011-03-27 21:14:36
问题是,a是一个符号,而不是一个字符串(它们在图顶点,如图(a,b)。) – Kirby 2011-03-27 21:15:17
谢谢!它工作完美! (但显然它并没有解决我的问题xD) – Kirby 2011-03-27 21:34:24
@Kirby:我很怀疑,因为我不明白你的代码在第一个地方......也许你可以发表一个新的问题,描述你想要的问题解决? – 2011-03-27 21:40:44