палач в прологе - PullRequest
       3

палач в прологе

2 голосов
/ 01 ноября 2011

Я начинающий пролог.Как я могу конвертировать буквы в * (звездочка)?Я знаю, что это символьные коды в прологе для представления строк.Проблема в том, что если это буква, преобразуйте ее в «*», если это подчеркивание, просто сохраните ее.

Так как мне узнать, является ли это подчеркивание или нет?

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Итак, задача состоит в том, чтобы заменить буквы звездочками.Во-первых, вы должны Google некоторые материалы о строках в прологе.Чем легко получить что-то подобное

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.

Он не использует встроенные предикаты, но может быть полезно понять, как все это на самом делеработает.

0 голосов
/ 01 ноября 2011

проверка каждого символа в строке:

...maplist(convstar, String, Converted), ...

convstar(0'_, 0'_).
convstar(_, 0'*).

Другой способ, используя конструкцию if-then:

convstar(X, Y) :-
  (  X == 0'_
  -> Y = 0'_
  ;  Y = 0'*
  ).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...