今津
今津と言います。
Lisp,Scheme,Haskell,Squeak,etc. 色々とプログラム言語には興味を持っているのですが、
どれも身についていません。
再度Schemeに挑戦しようと思い、物色していて、英語力もないのに
http://www.plt-scheme.org/
に興味を持ちました。
当方、仕事がらWindows VC++を使用するのですが、
このMzSchemeは、ソースにVS.NETプロジェクトがあり、
そのままでコンパイルして動いたのと、既に高機能満載っぽいと感じたからです。
この実装系の評価は如何ほどなのでしょうか?
- Shiro (2003/08/28 04:35:12 PDT): 私は使ったことはないのですが、
ライブラリが豊富に揃っていますし、PLT Schemeを使った
アプリケーション開発も盛んなようです。
ただ現在のところ、マルチバイト文字のサポートは無いみたいですね
(Latin-1文字セット限定)。開発者は長期的にはUnicodeに移行したい
というようなことを言っていましたが。
- マルチバイト対応と非対応ではどんな違いがあるのでしょうか?
- 文字数計算が正常
- 誤動作する文字コードがある? (文字化けしそうな文字コードを知りたいです。)
- その他には何があるのでしょうか?
ちなみに MzScheme (Version 205) on WindowsXP で下記簡単な日本語を含んだ物だと正常に表示されています。
C:\Documents and Settings\Imazu>mzscheme
Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT
> (define 朝 1)
> 朝
1
> (display 朝)
1>
(display 昼)
reference to undefined identifier: 昼
> (display '昼)
昼>
> (define 夜 2)
> (+ 朝 夜)
3
>
- MzScheme 作成させてください。メモ程度の内容書いて良いでしょうか?
また、既に使用している人がいましたら、記載、編集、etc. して頂けると嬉しいです。
Welcome to MzScheme version 205, Copyright (c) 1995-2003 PLT
> (string-ref "Scheme処理系" 8)
#\227
cygwin on WindowsXP Gauche-0.7.1もダメでした
gosh> (string-ref "Scheme処理系" 8)
*** ERROR: unbound variable: |\x1b|
Stack Trace:
_______________________________________
gosh>
メモし忘れましたが #\n (だったかな?)となる場合もありました。
動作が不安定っぽいです。
- Shiro: Gaucheの場合は、端末の文字エンコーディングを
コンパイル時に選択した内部エンコーディング(デフォルトではeuc-jp)と
合わせて下さい。エンコーディングが異なれば、全然関係ないバイト列を
渡していることになります。
あるいはソースコードをファイルに書いておいて
ロードするか (その場合でも、ファイルの文字エンコーディングは
内部エンコーディングと合わせる必要があります)。
- MzSchemeのように多バイト対応していない処理系で、(define 夜 2)
等がうまく動いているように「見える」のは、MzSchemeが読み込んだ
「夜」を表現するバイト列をそのまま格納していて、そのまま出力している
からです。具体的に問題が現れるのは次のような場合です。
- string-ref, string-set!, substring等、文字列をインデックスでアクセスする場合。
MzSchemeはバイトインデックスでアクセスしてしまうので、多バイト文字を
取り出すことが出来なかったり、(一バイトだけの変更によって)文字が化けたりします。
- ソースをShift JISで書いている場合、漢字の2バイト目が#x5c ('\') に
一致する文字があると誤動作します。例えば "能" とか。
EUC-JPやUTF-8ではこの問題は現れません。
- ソースがShift JISかEUC-JPの場合、
文字列の検索時 (例えばsrfi-13のstring-contains? 等) に、文字の境界が
ずれたバイト列にマッチしてしまう場合があります。
UTF-8ではこの問題は現れません。
- 正規表現で日本語の文字が文字レンジ指定の中に使えません
(全てのエンコーディングで)。また、ShiftJISやEUC-JPの場合は
文字境界の問題も出ます。
- これらの点に気をつけていれば、
単なるバイト列として扱うことで、多バイト文字を含んだ文字列も
使うことはできるでしょう。
Scheme情報
MzScheme, Scheme
Last modified : 2003/09/15 21:50:06 UTC