2017年4月3日月曜日

開発環境

Head First Python (Paul Barry (著)、O'Reilly Media)のChapter 9.(The Context Management Protocol: Hooking Into Python's With Statement) の SHARPEN YOUR PENCIL(No. 6522) を Scheme で取り組んでみる。

Relational Database 、 MySQL、MariaDBの代わりに ファイルに履歴を書き込むことで代用。

SHARPEN YOUR PENCIL(No. 6522)

コード(Emacs)

(begin
  (define (with context-manager)
    (context-manager 'enter)
    (context-manager 'exit))
  
  (define (use-database config)
    (define (enter)
      (open-input-file (cdr (assq 'database config))))
    (define (exit) #f)
    (define (dispatch m)
      (cond ((eq? m 'config) config)
            ((eq? m 'enter) enter)
            ((eq? m 'exit) 'exit)))
    dispatch)

  (define dbconfig (list (cons 'host "127.0.0.1")
                         (cons 'user "vsearch")
                         (cons 'password "vsearchpasswd")
                         (cons 'database "vsearchlogDB.log")))

  (define ud (use-database dbconfig))
  (define file ((ud 'enter)))
  (display (ud 'config))
  (newline)
  (display file)
  (newline)
  'done
)

入出力結果(Terminal, ksi, ksc)

$ ./ksi < dbcm.scm
> ((host . 127.0.0.1) (user . vsearch) (password . vsearchpasswd) (database . vsearchlogDB.log))
#<input-port vsearchlogDB.log>
=> done
> $

0 コメント:

コメントを投稿