暇人13世
himaj****@gmail*****
2012年 7月 8日 (日) 13:56:07 JST
>> はじめまして、今さっきMLに入ったr.k.sourceです。名前が被ってないといいのだけど。 >> >> さて、今さっきmzschemeからgaucheに乗り換える作業をしていた所、バグのような物を発見しましたので、どなたか確認お願いします。 >> あるいは、勉強不足で申し訳ないのですが、これはGaucheの拡張によるものだったのでしょうか? > >大和と申します。 >私も勉強中です。 > >> >> 手順: >> 識別子のトークンとして、単体でコロン(:)を用いる > >Gaucheのキーワード拡張によるものだと思います。:ではじまるトークンをリーダーが >キーワードとみなします。`|'で:を囲むと、リーダーにシンボルであると伝えることが >できます。 > >gosh> (class-of 'a) >(class-of 'a) >#<class <symbol>> >gosh> (class-of ':) >(class-of ':) >#<class <keyword>> >gosh> (class-of '|:|) >(class-of '|:|) >#<class <symbol>> >gosh> (define |:| (lambda (x) x)) >(define |:| (lambda (x) x)) >|:| >gosh> (|:| 3) >(|:| 3) >3 >gosh> (write '|:|) >(write '|:|) >|:|#<undef> >gosh> (display '|:|) >(display '|:|) >:#<undef> >gosh> > > >大和 > >> 予期される結果: >> r5rs p.38 7.1.1 Lexical structureより、 >> : → <special initial> → <initial> → <identifier> → <token> >> と還元され、変数名として問題なく認識される >> >> 実際に起った結果: >> 次のエラーが表示される;(2行目以降省略) >> Compile Error: variable required, but got: : >> >> 再現するコード: >> (define-syntax : >> (syntax-rules (-> unquote) >> ((_ x -> y) (list (cons x y))) >> ((_ x -> y (unquote e) f ...) (append (: x -> y) (: e f ...))))) >> >> また、次のもっと短いコード: >> (define : (lambda (x) x)) >> >> では、次のような結果が得られる: >> Compile Error: syntax-error: (define : (lambda (x) x)) >> >> 環境: >> OS: Windows 7 Ultimate (amd64) >> CPU: Core i7 920 >> MEM: 24GB (4GB x 6, DDR3) >> TERM: cmd.exe >> Softwares: Gauche(0.9.3.3/[utf-8,wthreads]/i686-pc-mingw32), >> IE(9.0.8122.16421), avast! antivirus (7.0.1426) ありがとうございました。:%s/:/|:|/gして解決することが出来ました。 r.k.source