4

前提

だから私は与えられた文字列を文字のリストに分割しようとしています、そしてこれらの文字は編集/変更されてリストに再割り当てされ、その後リストは文字列に再構築されます。

例:

与えられたString : "ABCDEFG"

キャラクターlist : [A,B,C,D,E,F,G]

操作により、リストが次のように変更されます:[E、F、G、H、I、J、K](または同様のもの)。

そして、文字列に再構築されます:

"EFGHIJK"

質問

文字列内の個々の要素にアクセスする方法を探しています。Javaの場合、次のようなコマンドを使用しますが、charAt(int i)そのようなコマンドがプロローグ内に存在するかどうかはわかりません。

ノート

私は新しいプログラマーなので、ほとんどの操作prologに精通していません。prolog

御時間ありがとうございます。

4

3 に答える 3

3

文字列は char コードのリストですが、アトムは、まあ、アトミック、つまり分割できませんが、アトミック データの一部にアクセスするためのsub_atom /5 があります。

ここにいくつかの文字列の例があります:

1 ?- L = "ABCDEF".
L = [65, 66, 67, 68, 69, 70].

2 ?- L = "ABCDEF", maplist(succ, L, N), format('~s', [N]).
BCDEFG
L = [65, 66, 67, 68, 69, 70],
N = [66, 67, 68, 69, 70, 71].

3 ?- L = "ABCDEF", maplist(succ, L, N), format('~s', [N]), atom_codes(A, N).
BCDEFG
L = [65, 66, 67, 68, 69, 70],
N = [66, 67, 68, 69, 70, 71],
A = 'BCDEFG'.

分析と変換に詳細が必要な場合は、通常、DCG を使用することをお勧めします

于 2012-12-05T20:48:05.333 に答える
1

文字列は Prolog のアトムです。

あなたの場合、次のようにすることができます: "EFGHIJK" = リスト。

これについての良い投稿があります: http://obvcode.blogspot.com/2008/11/working-with-strings-in-prolog.html

于 2012-12-05T17:35:33.823 に答える
1

これを試すことができます

t(S_in, S_out) :-
    maplist(modif, S_in, S_temp),
    string_to_list(S_out, S_temp).


modif(In, Out) :-
    atom_codes('A', [X]),
    atom_codes('E', [Y]),
    Out is In + Y - X.

文字列は Prolog のコードのリストです。したがって、 maplist はリストの各コードに変更を適用します (機能的な方法)。string_to_list は、コードのリストではなく、出力で文字列を取得するのに役立ちます。

modif はサクッと書けますが、分かりやすく書いてみました。

出力は

?- t("ABCDEFG", Out).
Out = "EFGHIJK".
于 2012-12-05T17:41:47.780 に答える