君にもできるデータセンター縮退炉

Lisp Advent Calendar 2015 5 日目。

昨日はりひにーさんで Lisp なら括弧とシンボルを並べるだけ!!! でした。

こーいう CoffeeScript で書いたコードを:

# chapter002.coffee
http = require 'http'

options =
    hostname: 'www.google.co.jp'
    port: 80
    path: '/upload'
    method: 'POST'

request = http.request options, (response) ->
    console.log 'status code: ' + response.statusCode
    console.log 'headers: ' + JSON.stringify( response.headers )

    response.setEncoding 'utf8'

    response.on 'data', (chunk) ->
        console.log 'body: ' + chunk

request.on 'error', (err) ->
    console.log 'problem with request: ' + err.message

request.write 'data\n'
request.write 'data\n'
request.end()

Guile 風な Shceme で書いてみた。
少し Clojure 風。

;; chapter002.scm
(use-modules (nodejs)
             (nodejs http)
             (nodejs json))

(define options '((#:hostname . "www.google.co.jp")
                  (#:port     . 80)
                  (#:path     . "/upload")
                  (#:method   . #:POST)))

(define request (http/request options
                              (lambda (response)
                                (console/log "status code: " (slot-ref response 'statusCode))
                                (console/log "headers: " (JSON/stringify (slot-ref response 'headers)))

                                (.setEncoding response #:utf8)

                                (.on response #:data
                                     (lambda (chunk)
                                       (console/log "body: " chunk))))))

(.on request #:error
     (lambda (err)
       (console/log "plobrem with request: " (slot-ref err 'message))))

(.write request "data\n")
(.write request "data\n")
(.end request)