Skip to content

Instantly share code, notes, and snippets.

@ktakashi
ktakashi / inner.scm
Last active December 31, 2015 06:59
innerっぽい何か
(import (rnrs) (clos user) (clos core))
(define-class <generic-inner> (<generic>) ())
(define-method compute-applicable-methods ((gf <generic-inner>) args)
`(,@(reverse! (call-next-method))
;; add very bottom one
,(make-method (list <top>)
(lambda (call-next-method o) ""))))
(define-generic inner :class <generic-inner>)
@ktakashi
ktakashi / bottom.scm
Created December 15, 2013 09:03
<bottom>
(define-method last ((o <bottom>)) (print 'bottom) (call-next-method))
(define-method last ((o <top>)) (print 'top) o)
(print (last 'ok))
@ktakashi
ktakashi / intern.lisp
Created January 11, 2014 10:25
Case insensitive intern
(defun my-intern (s &rest package)
(declare (type string s)
(type symbol package)
(optimize (debug 0) (speed 3) (safety 0)))
(let ((readtable-case (readtable-case *readtable*)))
(apply #'intern (case readtable-case
((:upcase) (string-upcase s))
((:downcase) (string-downcase s))
((:preserve) s)
((:invert) ;; lazy..
@ktakashi
ktakashi / circular-equal.scm
Created January 24, 2014 08:19
Cyclic list's equal?
;; For R6RS
(import (rnrs) (rnrs mutable-pairs))
;; For R7RS
;;(import (scheme base) (scheme cxr) (scheme write))
(define a (list 1 2))
(define b (list 1 2 1 2))
(set-cdr! (cdr a) a) ;; #0=(1 2 . #0#)
(set-cdr! (cdddr b) b) ;; #0=(1 2 1 2 . #0#)
(display (equal? a b)) (newline)
(display (equal? b a)) (newline)
@ktakashi
ktakashi / name-is-given.scm
Created February 4, 2014 07:41
Should this be an error?
(import (rnrs))
(define-syntax outer-define
(lambda (x)
(syntax-case x ()
((_ name def)
#'(define-syntax name
(lambda (xx)
(syntax-case xx ()
((_ val)
@ktakashi
ktakashi / bound.scm
Created February 7, 2014 08:12
Ypsilon 0.9.6-update3 のバグ?
(import (rnrs))
(define sx1 #'x)
(define sx2 #f)
(let ()
(set! sx2 #'x))
(display (bound-identifier=? sx1 sx2)) (newline)
;; should print #t
@ktakashi
ktakashi / record.scm
Created February 7, 2014 11:23
CLOS based R6RS record implementation
(import (rnrs) (clos user) (clos core))
(define-class <record-type-descriptor> ()
((name :init-keyword :name)
(parent :init-keyword :parent :reader record-type-parent)
(uid :init-keyword :uid)
(sealed? :init-keyword :sealed?)
(opaque? :init-keyword :opaque?)
(fields :init-keyword :fields :reader rtd-fields)
;; instanciate class
@ktakashi
ktakashi / jal.scm
Created February 10, 2014 12:22
JAL password hash
(import (rnrs) (crypto) (math) (time))
(define target (hash MD5 (string->utf8 "hoge$567890")))
(print target)
(define (solve)
(define md5-hash (hash-algorithm MD5))
(define buf (make-bytevector (hash-size md5-hash)))
(define value (u8-list->bytevector
(append (map char->integer (string->list "hoge$"))
'(0 0 0 0 0 0))))
@ktakashi
ktakashi / tools.scm
Created February 11, 2014 21:32
SXPath like JSON query tools (scratch)
(import (rnrs) (srfi :1) (json) (pp))
(define data (call-with-input-file "data.json" json-read))
(pp data)
(define (json:first-node data)
(cond ((vector? data) (vector-ref data 0))
((pair? data) (if (pair? (cdr data)) (cadr data) (cdr data)))
(else data))) ;; value node?
@ktakashi
ktakashi / twitter-client.scm
Created February 19, 2014 08:31
Simple Twitter client for Sagittarius using json-tools
;; inspired by http://g000001.cddddr.org/3601131164
(import (rnrs)
(net twitter)
(text json select)
(text json tools)
(srfi :42))
#|
((consumer-key "......")
(consumer-secret ".....")