Pipe その2

こういう形式はどうだろうか? | が identifier じゃないのが痛い。

(define-syntax ->
  (lambda (x)
    (syntax-case x ()
      [(_ (cmd1 args1 ...) (cmd2 args2 ...))
       #'(pipe ((symbol->string (syntax->datum #'cmd1)) (map symbol->string (syntax->datum #'(args1 ...))))
               ((symbol->string (syntax->datum #'cmd2)) (map symbol->string (syntax->datum #'(args2 ...)))))]
      [(_ cmd1 (cmd2 args2 ...))
       #'(pipe ((symbol->string (syntax->datum #'cmd1)) '())
               ((symbol->string (syntax->datum #'cmd2)) (map symbol->string (syntax->datum #'(args2 ...)))))]
      )))

;; 使用例
(-> ls (grep Pro))