質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

Q&A

解決済

1回答

417閲覧

COMMON LISP (SBCL)で ユニコード表す文字列を、文字に変換する方法

tf2014

総合スコア75

LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

0グッド

0クリップ

投稿2022/09/18 23:13

unicodeを表した文字列をキャラクターとして、アウトプットしたいのですが、Common Lisp 初心者なものでどう手をつければいいのかわかりません。

例えば、U+00F7 はユニコードで「÷」という文字ですが、これをアウトプットしたい場合:

lisp

1CL-USER> (format t "~c" #\U+00f7) 2 3÷ 4NIL

で可能です。 私の場合、"#\U+00f7"という文字列が与えられた場合に、これを文字に変換したいのですが、当然以下のの方法では実現できません。

lisp

1CL-USER> (format t "~s" "#\U+00f7") 2 3"#U+00f7" 4NIL

まはは、

LISP

1CL-USER> (format t "~c" "#\U+00f7") 2 3error in FORMAT: "#U+00f7" is not of type CHARACTER. 4 ~c 5 ^ 6 [Condition of type SB-FORMAT:FORMAT-ERROR]

環境は以下のとおりです:
OS: Debian
処理系: SBCL
エディタ: emacs with SLIME

ユニコードの文字列を文字に変換する方法はありますか? よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Common Lispでは文字に名前が付いており、文字の名前を文字に変換可能です。
SBCLでは文字の名前にUnicodeのコードポイント表記も使えるようになっているので下記のように記述可能です。

lisp

1(format nil "~C" (name-char "U+00f7")) 2"÷"

また、Unicodeのコードポイントの番号から文字を得ることも可能です。

lisp

1(format nil "~C" (code-char #x00f7)) ;#xは16進表記 2"÷"

また、Common Lispの文字表記を文字列化したものを文字に戻すにはread-from-stringが利用可能です。
なお、文字列中のバックスラッシュはエスケープする必要があります。

lisp

1(format nil "~C" (read-from-string "#\\U+00f7")) 2"÷"

投稿2022/09/19 02:47

g000001

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tf2014

2022/09/19 15:41

丁寧な説明ありがとうございます。これで、先に進めそうです。 REPL上では、`format nil ... `にしたほうがスッキリする、というのも、気づきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問