刽子手在prolog

时间:2011-11-01 01:01:24

标签: string prolog

我是prolog的初学者。如何将字母转换为*(星号)? 我知道prolog中的字符代码代表字符串。问题是如果它是一个字母,将其转换为“*”,如果它是一个下划线,只需保留它。

那么我怎么知道它是否是下划线?

2 个答案:

答案 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'*
  ).