LISP-文字列

Common Lispの文字列はベクトル、つまり文字の1次元配列です。

文字列リテラルは二重引用符で囲みます。文字セットでサポートされている文字は、二重引用符( ")とエスケープ文字(\)を除いて、二重引用符で囲んで文字列を作成できます。ただし、バックスラッシュ(\)でエスケープすることでこれらを含めることができます。

main.lispという名前の新しいソースコードファイルを作成し、その中に次のコードを入力します。

(write-line "Hello World")
(write-line "Welcome to Tutorials Point")

;escaping the double quote character
(write-line "Welcome to \"Tutorials Point\"")

コードを実行すると、次の結果が返されます-

Hello World
Welcome to Tutorials Point
Welcome to "Tutorials Point"

文字列比較関数

<や>などの数値比較関数や演算子は文字列では機能しません。Common LISPは、コード内の文字列を比較するための他の2つの関数セットを提供します。1つのセットでは大文字と小文字が区別され、もう1つのセットでは大文字と小文字が区別されません。

次の表に、関数-を示します。

大文字と小文字を区別する関数 大文字と小文字を区別しない関数 説明
string = 文字列-等しい オペランドの値がすべて等しいかどうかをチェックし、等しい場合は条件が真になります。
文字列/ = 文字列が等しくない オペランドの値がすべて異なるかどうかをチェックし、値が等しくない場合は条件が真になります。
文字列< string-lessp オペランドの値が単調に減少しているかどうかを確認します。
文字列> 文字列-greaterp オペランドの値が単調に増加しているかどうかを確認します。
文字列<= string-not-greaterp 左のオペランドの値が次の右のオペランドの値以上であるかどうかを確認します。はいの場合、条件は真になります。
文字列> = string-not-lessp 左側のオペランドの値が右側のオペランドの値以下であるかどうかを確認します。そうである場合は、条件が真になります。

main.lispという名前の新しいソースコードファイルを作成し、その中に次のコードを入力します。

; case-sensitive comparison
(write (string= "this is test" "This is test"))
(terpri)
(write (string> "this is test" "This is test"))
(terpri)
(write (string< "this is test" "This is test"))
(terpri)

;case-insensitive comparision
(write (string-equal "this is test" "This is test"))
(terpri)
(write (string-greaterp "this is test" "This is test"))
(terpri)
(write (string-lessp "this is test" "This is test"))
(terpri)

;checking non-equal
(write (string/= "this is test" "this is Test"))
(terpri)
(write (string-not-equal "this is test" "This is test"))
(terpri)
(write (string/= "lisp" "lisping"))
(terpri)
(write (string/= "decent" "decency"))

コードを実行すると、次の結果が返されます-

NIL
0
NIL
T
NIL
NIL
8
NIL
4
5

ケース制御機能

次の表に、ケース制御機能を示します。

シニア番号 機能と説明
1

string-upcase

文字列を大文字に変換します

2

string-downcase

文字列を小文字に変換します

3

string-capitalize

文字列内の各単語を大文字にします

main.lispという名前の新しいソースコードファイルを作成し、その中に次のコードを入力します。

(write-line (string-upcase "a big hello from tutorials point"))
(write-line (string-capitalize "a big hello from tutorials point"))

コードを実行すると、次の結果が返されます-

A BIG HELLO FROM TUTORIALS POINT
A Big Hello From Tutorials Point

文字列のトリミング

次の表に、文字列トリミング機能を示します。

シニア番号 機能と説明
1

string-trim

文字列を最初の引数として、文字列を2番目の引数として受け取り、最初の引数にあるすべての文字が引数文字列から削除された部分文字列を返します。

2

String-left-trim

文字列を最初の引数として、文字列を2番目の引数として受け取り、最初の引数にあるすべての文字が引数文字列の先頭から削除された部分文字列を返します。

3

String-right-trim

最初の引数として文字列文字を取り、2番目の引数として文字列を取り、最初の引数にあるすべての文字が引数文字列の末尾から削除される部分文字列を返します。

main.lispという名前の新しいソースコードファイルを作成し、その中に次のコードを入力します。

(write-line (string-trim " " "   a big hello from tutorials point   "))
(write-line (string-left-trim " " "   a big hello from tutorials point   "))
(write-line (string-right-trim " " "   a big hello from tutorials point   "))
(write-line (string-trim " a" "   a big hello from tutorials point   "))

コードを実行すると、次の結果が返されます-

a big hello from tutorials point
a big hello from tutorials point   
   a big hello from tutorials point
big hello from tutorials point

その他の文字列関数

LISPの文字列は配列であり、したがってシーケンスでもあります。これらのデータ型については、今後のチュートリアルで説明します。配列とシーケンスに適用できるすべての関数は、文字列にも適用されます。ただし、さまざまな例を使用して、一般的に使用されるいくつかの関数を示します。

長さの計算

ザ・ length 関数は文字列の長さを計算します。

部分文字列の抽出

ザ・ subseq 関数は、特定のインデックスで始まり、特定の終了インデックスまたは文字列の終わりまで続く部分文字列を返します(文字列もシーケンスであるため)。

文字列内の文字へのアクセス

ザ・ char 関数を使用すると、文字列の個々の文字にアクセスできます。

Example

main.lispという名前の新しいソースコードファイルを作成し、その中に次のコードを入力します。

(write (length "Hello World"))
(terpri)
(write-line (subseq "Hello World" 6))
(write (char "Hello World" 6))

コードを実行すると、次の結果が返されます-

11
World
#\W

文字列の並べ替えとマージ

ザ・ sort関数を使用すると、文字列を並べ替えることができます。シーケンス(ベクトルまたは文字列)と2つの引数の述語を受け取り、シーケンスのソートされたバージョンを返します。

ザ・ merge 関数は、2つのシーケンスと1つの述語を受け取り、述語に従って2つのシーケンスをマージすることによって生成されたシーケンスを返します。

Example

main.lispという名前の新しいソースコードファイルを作成し、その中に次のコードを入力します。

;sorting the strings
(write (sort (vector "Amal" "Akbar" "Anthony") #'string<))
(terpri)

;merging the strings
(write (merge 'vector (vector "Rishi" "Zara" "Priyanka") 
   (vector "Anju" "Anuj" "Avni") #'string<))

コードを実行すると、次の結果が返されます-

#("Akbar" "Amal" "Anthony")
#("Anju" "Anuj" "Avni" "Rishi" "Zara" "Priyanka")

文字列を逆にする

ザ・ reverse 関数は文字列を反転します。

たとえば、main.lispという名前の新しいソースコードファイルを作成し、その中に次のコードを入力します。

(write-line (reverse "Are we not drawn onward, we few, drawn onward to new era"))

コードを実行すると、次の結果が返されます-

are wen ot drawno nward ,wef ew ,drawno nward ton ew erA

文字列の連結

concatenate関数は、2つの文字列を連結します。これは汎用シーケンス関数であり、最初の引数として結果タイプを指定する必要があります。

たとえば、main.lispという名前の新しいソースコードファイルを作成し、その中に次のコードを入力します。

(write-line (concatenate 'string "Are we not drawn onward, " "we few, drawn onward to new era"))

コードを実行すると、次の結果が返されます-

Are we not drawn onward, we few, drawn onward to new era