リストの長さを取得するメソッド length(list,var) を取得しましたが、文字列の長さを知りたいのですが、解決策がある人はいますか?
5 に答える
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 ビット コードのみを許可するものもあります。
また、アトムの最大長が異なる場合があり、テーブルにあることが多いアトム タイプと比較して、テーブルにない余分な文字列タイプが存在する場合があります。しかし、この余分な型は通常、二重引用符で囲まれた文字列と同じではありません。これは、文字リストの省略形にすぎません。
文字列はアトムであるため、直接操作して長さを取得したり、部分文字列を抽出したりすることはできません。まず、次のようにして文字リストに変換する必要がありますatom_chars/2
。
atom_chars(StrVar, ListVar), length(ListVar, LengthVar).
多分これ:
string_length(+String, -Length)
プロローグのマニュアルより。
ちょうどそれで遊んでいて、私は述語を次のように与えました
?- length("hello", R).
R = 5.
驚くべきことに、それはうまくいきました:)