我是prolog的初学者。如何将字母转换为*(星号)? 我知道prolog中的字符代码代表字符串。问题是如果它是一个字母,将其转换为“*”,如果它是一个下划线,只需保留它。
那么我怎么知道它是否是下划线?
答案 0 :(得分:1)
因此,任务是用星号替换字母。 首先,您应该在prolog中搜索有关字符串的some material。比起这样的事情很容易
string_replace( [], [] ).
string_replace( [H | Tail], StringNew ) :-
( not(underscore(H)), asterisk(A), StringNew = [A | StringTail], string_replace( Tail, StringTail) )
;
( underscore(H), StringNew = [H | StringTail], string_replace( Tail, StringTail) )
.
letter( X ) :-
( X >= 97, X =< 122 )
;
( X >=65, X =<90 ).
underscore( 95 ).
asterisk( 42 ).
main :-
string_replace( "test_string", S1 ),
writef( "%s", [S1] ), nl,
string_replace( "another string", S2 ),
writef( "%s", [S2] ), nl,
!
.
就像那样
?- main.
****_******
**************
true.
它不使用任何内置谓词,但它可能有助于理解它的真正工作原理。
答案 1 :(得分:0)
检查字符串中的每个字符:
...maplist(convstar, String, Converted), ...
convstar(0'_, 0'_).
convstar(_, 0'*).
另一种方法,使用'if-then'结构:
convstar(X, Y) :-
( X == 0'_
-> Y = 0'_
; Y = 0'*
).