5

リストの長さを取得するメソッド length(list,var) を取得しましたが、文字列の長さを知りたいのですが、解決策がある人はいますか?

4

5 に答える 5

8

ISO Prolog を使用する場合は、name/2述語を使用しません。

ISO Prolog は、あなたatom_codes/2と を提供しますatom_chars/2。それらは、アトムをコードのリストまたは文字のリストに変換する機能を提供します。アトムは Prolog システムの文字列であり、文字は単に長さ 1 のアトムです。2 つの述語の呼び出しの例を次に示します。

?- atom_codes(ant, L).
L = [97,110,116]
?- atom_codes(X, [97,110,116]).
X = ant
?- atom_chars(ant, X).
X = [a,n,t]
?- atom_chars(X,[a,n,t]).
X = ant

ここで、文字列 (アトム) の長さを決定する方法を知りたいと思います。1 つの方法は、最初にコードまたは文字を決定してから、このリストの長さを計算することです。しかし、ISO はatom_length/2 述語も提供します。次のように機能します。

?- atom_length(ant,X).
X = 3

多くの Prolog システムでは、この一連の組み込み述語が提供されています。つまり、SWI Prolog、GNU Prolog、Jekejeke Prolog などです。使用可能な文字コードの範囲とエンコーディングは、Prolog システムによって異なります。8 ビット コード、16 ビット コード、および 32 ビット コードのみを許可するものもあります。

また、アトムの最大長が異なる場合があり、テーブルにあることが多いアトム タイプと比較して、テーブルにない余分な文字列タイプが存在する場合があります。しかし、この余分な型は通常、二重引用符で囲まれた文字列と同じではありません。これは、文字リストの省略形にすぎません。

于 2012-05-03T13:03:56.633 に答える
2

文字列はアトムであるため、直接操作して長さを取得したり、部分文字列を抽出したりすることはできません。まず、次のようにして文字リストに変換する必要がありますatom_chars/2

atom_chars(StrVar, ListVar), length(ListVar, LengthVar).
于 2012-05-03T13:01:10.660 に答える
0

多分これ:

string_length(+String, -Length)

プロローグのマニュアルより。

于 2014-12-22T13:46:54.330 に答える
0

ちょうどそれで遊んでいて、私は述語を次のように与えました

?- length("hello", R).
R = 5.

驚くべきことに、それはうまくいきました:)

于 2012-05-03T16:58:35.253 に答える