我是一個初學者。如何將字母轉換爲*(星號)? 我知道它是序言中代表字符串的字符代碼。問題是如果它是一個字母,將它轉換爲「*」,如果它是一個下劃線,就保留它。序言中的hang子手
那麼如何知道它是否是下劃線呢?
我是一個初學者。如何將字母轉換爲*(星號)? 我知道它是序言中代表字符串的字符代碼。問題是如果它是一個字母,將它轉換爲「*」,如果它是一個下劃線,就保留它。序言中的hang子手
那麼如何知道它是否是下劃線呢?
檢查字符串中的每個字符:
...maplist(convstar, String, Converted), ...
convstar(0'_, 0'_).
convstar(_, 0'*).
另一種方法,使用 '如果 - 那麼' 結構:
convstar(X, Y) :-
( X == 0'_
-> Y = 0'_
; Y = 0'*
).
所以,任務是用星號來代替字母。 起初,您應該在序言部分關於字符串google 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.
它不使用任何內建謂詞,但它可能是有用的,以瞭解所有它確實有效。
您的第一種方法可能需要一次剪切,以防止在第一個成功的第二個子句中回溯成功。 – gusbro