2012-05-03 9 views
3

私はリストの長さを与えるメソッドの長さ(リスト、var)を持っていますが、文字列の長さ、プロローグを使用して文字列長を見つける方法

+0

「[プロローグの文字列を使用する]」(http://obvcode.blogspot.com/2008/11/working-with-strings-in-prolog.html)の記事 –

+1

この記事は混乱します(文字列と非標準的な述語を助言する。私はそれを読むことを勧めます。私は代わりにPrologの文字列を取得する[この優れた答え](http://stackoverflow.com/questions/8264699/what-is-the-difference-between-and-in-prolog/8269897#8269897)aviseだ – m09

答えて

1

はそれで遊んでいたと私は

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

として述語を与えました。

+3

でより良いオプションです。プロローグシステムをチェックし、プロローグフラグdouble_quotesを照会することができます。コードであれば、二重引用符が文字コードリストとして読み込まれます。SWI-Prolog:? - current_prolog_flag(double_quotes、X)。 X =コード。 ? - "hello" = [104,101,108,108,111]。 –

3

文字列は原子であるので、あなたはなど、部分文字列を抽出し、長さを得るためにそれらを直接操作することはできませんまず、あなたがatom_chars/2と文字リストにそれらを変換する必要があります。

atom_chars(StrVar, ListVar), length(ListVar, LengthVar). 
+1

'name/2'はISO Prologではありません。ここでは最適ではありません。 – m09

+0

ありがとう、@モグ。更新しました。しかし、CMが言ったように、atom_lengthはISO –

6

あなたがしたい場合ISO Prologを使用すると、 のname/2述語は使用されません。

ISO Prologはatom_codes/2atom_chars/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 

今、あなたは原子別名文字列の長さを決定する方法を疑問に思う:いくつかの例のinvokationsは、2つの述部の ある原子はPrologシステムの文字列であり、 文字は単にここで長さ1の原子であります。 1つの の方法は、最初にコードまたは文字を決定し、次に このリストの長さを計算することです。しかし、ISOはatom_length/2 という述語も提供しています。

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

多くのPrologシステムが内蔵された述語、すなわち SWI Prologの、GNU Prologの、Jekejekeプロローグなどの、このセットを提供可能な文字 コード範囲とエンコーディングはPrologシステムに依存します..:これは次のように動作します。一部のものは、 のみ8ビットコード、一部の16ビットコード、および一部の32ビットコードを許可します。

また、アトムの最大長が異なる場合があります。 は、アトム タイプと比較してタップされない余分な文字列タイプです。しかし、この余分なタイプは、普通は と二重引用符で囲まれた文字列ではなく、 の文字リストの略語です。 Prologのマニュアルから

string_length(+String, -Length) 

さようなら驚くべきことに:)

0

多分これを働いた

+0

これはSWI-Prologでも利用できますが、この述語が他のPrologシステムに組み込まれているかどうかはわかりません。 –

関連する問題