開発環境
- macOS Sierra - Apple (OS)
 - Emacs (Text Editor)
 - Scheme (プログラミング言語)
 - kscm(コンパイラ(ksc)・インタプリタ(ksi)、実装)
 - 計算機プログラムの構造と解釈(参考書籍)
 
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 コメント:
コメントを投稿