저는 초보자입니다. 문자를 * (별표)로 변환하려면 어떻게해야합니까? 문자열을 나타내는 프롤로그의 문자 코드라는 것을 알고 있습니다. 문제는 편지 인 경우 "*"로 변환하고, 밑줄이면 그대로 사용하십시오.교수형 집행 인
그래서 밑줄인지 아닌지 어떻게 알 수 있습니까?
저는 초보자입니다. 문자를 * (별표)로 변환하려면 어떻게해야합니까? 문자열을 나타내는 프롤로그의 문자 코드라는 것을 알고 있습니다. 문제는 편지 인 경우 "*"로 변환하고, 밑줄이면 그대로 사용하십시오.교수형 집행 인
그래서 밑줄인지 아닌지 어떻게 알 수 있습니까?
체크 문자열의 각 문자 :
...maplist(convstar, String, Converted), ...
convstar(0'_, 0'_).
convstar(_, 0'*).
또 다른 방법은,에 'IF-다음'구조를 사용하여이 :
convstar(X, Y) :-
( X == 0'_
-> Y = 0'_
; Y = 0'*
).
그래서 작업은 별표로 문자를 대체하는 것입니다. 처음에는 프롤로그의 문자열에 대해 some material을 사용해야합니다. 그것은 그것은 모든 내장 명령 술어를 사용하지 않는
?- main.
****_******
**************
true.
처럼 작동하는
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,
!
.
처럼 뭔가를 쉽게,하지만 정말 어떻게 작동하는지 모두 이해하는 데 유용 할 수있어보다.
첫 번째 방법은 이미 첫 번째 절에서 성공했을 때 두 번째 절에서 후행 추적이 성공하지 못하도록 차단해야 할 수도 있습니다. – gusbro