トラック
/
Common Lisp
Common Lisp
/
演習
/
文字の研究
文字の研究

文字の研究

学習演習

はじめに

文字

Common Lispには、他のプログラミング言語と同じように文字があります。 文字は、テキスト(文字列やテキストストリームなど)を構成する1つの要素を表すオブジェクトです。

文字は整数との相互変換ができます。(ただし、文字は整数ではありません。独立した型です。)

文字は、#\に続けて名前を書いて表します。 'A'や'b'、'9'、'!'のような一般的な文字の「名前」は、その文字そのものです。つまり、#\A、#\b、#\9、#\!のように書きます。 スペースや改行などの非図形文字には、#\Spaceや#\Newlineのような名前が付いています。

標準では、実装が96文字(ラテン文字の大文字と小文字(A-Za-z)、数字(0-9)、スペース(#\Space)、改行(#\Newline)、句読点(例:!$"'(),_-./:;?+<=>#%&*@[\]{|}`^~))を備えていることだけを要求しています。 ただし、ほとんどの実装では、これよりも多くの文字を利用できます。すべてのUnicode文字をサポートする実装もあります。

文字の比較

文字が等しいかどうかは、char=またはchar-equalで比較できます(後者は大文字と小文字を区別しません)。

文字の順序は、char<、char>、char<=、char>=などの関数や、大文字と小文字を区別しないchar-lesspとchar-greaterpで比較できます。

文字の種類

文字は、図形文字、英字、英数字、数字、大文字、小文字など、さまざまな種類に分類できます。 1つの文字が複数の種類に当てはまることもあります。たとえば、大文字の英字はその一例です。 これらの種類にはそれぞれ述語があります。graphic-char-p、alpha-char-p、alphanumericp、digit-char-p、upper-case-p、lower-case-pです。

文字の大文字と小文字の変換

一部の文字は大文字と小文字があり、char-upcaseとchar-downcaseで相互に変換できます。

説明

若いLispエイリアンのLewisは、人間のアルファベットのプロジェクトを進める必要があり、そこで必要になるいくつかの関数のプログラミングを手伝ってほしいと頼んできました。

1. 文字を比較する

Lewisは、2つの文字を比較する関数を必要としています。1つ目の文字が2つ目より大きいのか、小さいのか、等しいのかを判定するものです。 2つの文字を受け取り、大小関係に応じて:greater-than、:less-than、:equal-toのいずれかに評価されるcompare-charsという関数を書きましょう。 この関数は、大文字と小文字を区別して比較する必要があります。

2. 文字の「サイズ」を判定する

Lewisは、ある文字が"big"(大文字)なのか、"little"(小文字)なのか、どちらでもなければ"no-size"なのかを知る必要があります。 文字の「サイズ」に応じて:big、:small、:no-sizeのいずれかに評価されるsize-of-charという関数を書きましょう:

3. 文字の「サイズ」を変える

Lewisは、大きな文字を小さくしたり、小さな文字を大きくしたりする必要があるかもしれません。 文字と、変えたいサイズ(:bigまたは:small)という2つの入力を受け取るchange-size-of-charという関数を書きましょう。 この関数は、指定したサイズに対応する文字に評価されます。

4. 文字の「種類」を判定する

Lewisは、文字の「サイズ」だけでなく「種類」も知る必要があります。 type-of-charという関数を書きましょう。この関数は、文字が英字であれば:alpha、数字であれば:numeric、空白文字であれば:space、改行文字であれば:newline、それ以外であれば:unknownに評価されます。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Common Lisp Exercism

文字の研究を始める準備はできましたか?

Exercismに登録すれば、27個のコンセプト92個の演習、そして本物の人間によるメンタリングとともに、Common Lispを学んでマスターできます。すべて無料です。