谓词不起作用 "the other way"
Predicate doesn't work "the other way"
这个函数接受一个字符串并将其变成盗版语言。
但是当我想让它使用盗版语言和return普通语言时它不起作用。
:- dynamic (lang/2).
lang([],[]).
lang(Text, Text2) :-
[Head|Tail] = Text,
lang(Tail,X2),
(member(Head,[101,97,105,111,117,121])
-> append([Head],X2,Text2)
; append([Head,111,Head],X2,Text2)
).
调用lang([list of hex codes for chars], X).
时有效
但它不适用于 lang(X, [answer from above])
.
我成功了。
我将其分为两种情况,一种处理输入为 ([Head|Tail],[Head,111,Head])
的情况,另一种处理输入为 ([Head|Tail],[Head|Rest])
.
的情况
如果您使用 DCG,这是进行此类处理的正确工具,您可以获得两个方向:
lang([]) --> [].
lang([H|T]) --> [H], { member(H, [101, 97, 105, 111, 117, 121]) }, lang(T).
lang([H,111,H|T]) --> [H], { \+ member(H, [101, 97, 105, 111, 117, 121]) }, lang(T).
lang(Text, Arg) :- phrase(lang(Arg), Text).
查询结果:
| ?- lang("arg", L), atom_codes(A, L).
A = arorgog
L = [97,114,111,114,103,111,103] ? ;
no
| ?- lang(A, "arorgog"), atom_codes(L, A).
A = [97,114,103]
L = arg ? ;
no
| ?-
我会把它留作整理它的练习。 :)
这个函数接受一个字符串并将其变成盗版语言。
但是当我想让它使用盗版语言和return普通语言时它不起作用。
:- dynamic (lang/2).
lang([],[]).
lang(Text, Text2) :-
[Head|Tail] = Text,
lang(Tail,X2),
(member(Head,[101,97,105,111,117,121])
-> append([Head],X2,Text2)
; append([Head,111,Head],X2,Text2)
).
调用lang([list of hex codes for chars], X).
时有效
但它不适用于 lang(X, [answer from above])
.
我成功了。
我将其分为两种情况,一种处理输入为 ([Head|Tail],[Head,111,Head])
的情况,另一种处理输入为 ([Head|Tail],[Head|Rest])
.
如果您使用 DCG,这是进行此类处理的正确工具,您可以获得两个方向:
lang([]) --> [].
lang([H|T]) --> [H], { member(H, [101, 97, 105, 111, 117, 121]) }, lang(T).
lang([H,111,H|T]) --> [H], { \+ member(H, [101, 97, 105, 111, 117, 121]) }, lang(T).
lang(Text, Arg) :- phrase(lang(Arg), Text).
查询结果:
| ?- lang("arg", L), atom_codes(A, L).
A = arorgog
L = [97,114,111,114,103,111,103] ? ;
no
| ?- lang(A, "arorgog"), atom_codes(L, A).
A = [97,114,103]
L = arg ? ;
no
| ?-
我会把它留作整理它的练习。 :)