Gauche > Archives > 2015/07/09

2015/07/09 02:48:59 UTCyamasushi
#
gosh> (use srfi-13)
#<undef>
gosh> (string-reverse "->sdfgsrsdfgsrgsresdgd>-" )
"->dgdsersgrsgfdsrsgfds>-"
gosh> (string-reverse "->s>-" )
"->s>-"
gosh> (string-reverse "->s>-a" )
"a->s>-"
gosh> (string-reverse "b->s>-a" )
"a->s>-b"                                                                                
gosh> (string-reverse "b->s-a" )
"a-s>-b"                                                                                 
gosh> (string-reverse "b-s-a" )
"a-s-b"                                                                                  
gosh> (string-reverse "b->-a" )
"a->-b"
#
->-のような文字列が反転してくれないんですが、これは何かの仕様でしょうか?(仕様でしたらすみません。
2015/07/09 02:57:51 UTCyamasushi
#
$ gosh -V
Gauche scheme shell, version 0.9.5_pre1 [utf-8,pthreads], i686-pc-linux-gnu
2015/07/09 03:24:31 UTCyamasushi
#
HEADでなかったので、いまビルドしています。すみません。
2015/07/09 03:43:03 UTCshiro
#
反転してませんか? "->-" を反転するとやっぱり "->-" だし、 "->" を反転すると ">-" ですよ。
2015/07/09 03:48:51 UTCyamasushi
#
あ、そうか。すみません。たしかにそうです。真剣に勘違いしていました。
2015/07/09 03:54:24 UTCshiro
#
私も一瞬、「あれ、何でだ?」と思って自分でREPLに入れるまで気づきませんでした。-> と <- を交換してくれる関数、というのも使いどころはありそうですが、かなりドメイン固有の操作になりそうですね。
2015/07/09 03:57:04 UTCyamasushi
#
これは、text.trでやる処理なんですね。こういう思い込みは言語化していないと気づかないものです。(汗
2015/07/09 04:13:47 UTCyamasushi
#
(use srfi-13)
(use text.tr)
(define-macro (defg op)
  (let1 rev ($ string->symbol
             $ string-tr ($ string-reverse $ symbol->string op) "<>" "><")
    `(begin
      (define (,op x y t)
        (list ,(make-keyword op) x y t))
      (define (,rev x y t)
        (list ,(make-keyword op) y x t))
      ) ) )
#
gosh> (defg =->)
<-=
gosh> (<-= 1 2 3)
(:=-> 2 1 3)
gosh> (=-> 1 2 3)
(:=-> 1 2 3)
#
こういう文脈でした。グラフのデータ入力用のマクロ(恥のかきついでです。