ブログは死なず、ただ放置されるのみ。

終わっちゃいましたね。

最初は echo

というわけで DOS窓ではなく UNIX な echo を Scheme でやっと自力で書けた。

ksh% gosh -V
Gauche scheme interpreter, version 0.8.13 [utf-8] です。

です。(Windowsバイナリ版)

(define (main args)
  (define (printargs n)
    (if (null? n)
      0
      (begin
        (display (car n))
        (display " " )
        (printargs (cdr n))
      )
    )
  )
  (printargs (cdr args))
)

閉じ括弧をガシガシ合体させてしまうのが Lisper 風味だと思ってやってみる。

(define (main args)
  (define (printargs n)
    (if (null? n)
      0
      (begin
        (display (car n))
        (display " " )
        (printargs (cdr n)))))
  (printargs (cdr args))
)

おかしい、同じコードなのに、なんかカッコよく見える…。
ちなみに echo を実装するには

  • 可変長の入力を得る
  • 可変長の文字列の配列を標準出力に吐く

ということが必要なので、Hello World なんかより、よっぽど言語の特性が分かって良いんじゃないかと思います。で、次は cat.scm の予定です。

で、その後、ls.scm に進化。

(define (main args)
  (define (ls str n)
    (if (null? n)
      str
      (ls
	(string-append str " " (car n))
        (cdr n))))
  (if (null? (cdr args))
    (sys-system "dir/w")
    (display (ls "" (cdr args))))
)

おもしれえ。だいぶハマってきました。