Skip to content

Instantly share code, notes, and snippets.

@ktakashi
ktakashi / bound-keyword.scm
Created April 29, 2015 13:01
Binding variable to a keyword
#|
Is this the expected behaviour?
env GAUCHE_KEYWORD_IS_SYMBOL=1 gosh
|#
;; (foo) returns :foo because it's not bound yet.
(define (foo) :foo)
(define :foo 'bar)
@ktakashi
ktakashi / identifier-syntax.sld
Last active August 29, 2015 14:19
identifier-syntax implemented in er-macro-transformer
(define-library (identifier-syntax)
(export identifier-syntax)
(import (scheme base)
(rename (only (rnrs) make-variable-transformer identifier?)
(identifier? %identifier?))
(sagittarius)
(match))
(begin
;; helpers might need to be in separate library
(define (identifier? x) (or (symbol? x) (%identifier? x)))
@ktakashi
ktakashi / tagged.scm
Last active August 29, 2015 14:19
Subset of tagged language on er macro
(import (scheme base) (scheme write) (scheme cxr))
(cond-expand
(chibi (import (chibi) (chibi match)))
(sagittarius (import (sagittarius) (match)))
(gauche (import (gauche base) (util match)))
(chicken (import-for-syntax (matchable)))
(else #t))
(cond-expand
@ktakashi
ktakashi / record-type.scm
Created March 26, 2015 20:01
Record type test
#!r6rs
(import (rnrs))
(define-record-type test)
test
#|
Sagittarius: ok
Mosh: error
@ktakashi
ktakashi / er.scm
Created March 26, 2015 08:12
Assertion error on Gauche
(import (scheme base) (scheme write) (scheme cxr))
(cond-expand
(chibi (import (chibi)))
(gauche (import (gauche base)))
(sagittarius (import (sagittarius)))
(else (error "not supported")))
(define-syntax comp
@ktakashi
ktakashi / patch.diff
Created March 25, 2015 14:33
Nausicaa oopp result on Sagittarius
diff --git a/lib/nausicaa/language/classes.sls b/lib/nausicaa/language/classes.s
index 5c82b39..e5f0a9c 100644
--- a/lib/nausicaa/language/classes.sls
+++ b/lib/nausicaa/language/classes.sls
@@ -1149,7 +1149,7 @@
((??next-from ??next-to) (... ...))
(??mixin-spec (... ...))))))
(_
- (synner "invalid syntax"))
+ (synner "invalid syntax" stx))
@ktakashi
ktakashi / bench.scm
Last active August 29, 2015 14:17
Experimental Scheme2C
(import (rnrs) (core base) (sagittarius dynamic-module) (time)
(sagittarius control))
(define ht
(let ((ht (make-eqv-hashtable)))
(dotimes (i 1000 ht)
(hashtable-set! ht i (number->string i 16)))))
(print "Scheme implementation")
(time (dotimes (i 1000)
@ktakashi
ktakashi / sql.scm
Created March 18, 2015 09:39
R6RS portable S-exp to SQL converter
(import (for (rnrs) run expand)
(match))
(define *command-handler* (make-eq-hashtable))
(define *sql-type* (make-eq-hashtable))
(define-syntax define-sql-handler
(lambda (x)
(define (->name c s)
(string->symbol
@ktakashi
ktakashi / count-calling.scm
Created March 9, 2015 07:49
Should write! be called each time even given bytevector is empty.
#!r6rs
(import (rnrs))
(define (print . args) (for-each display args) (newline))
(define (make-count-write-call-output-port vec)
(define (write! bv start count)
(vector-set! vec 0 (+ (vector-ref vec 0) 1))
count)
(define (close!) #t)
@ktakashi
ktakashi / custom-bout.scm
Last active August 29, 2015 14:16
Returning value of custom binary output port
#!r6rs
(import (rnrs))
(define (print . args) (for-each display args) (newline))
(define (make-predefined-buffer-output-port buf)
(define left (bytevector-length buf))
(define index 0)
(define (write! bv start count)
(cond ((zero? left) 0)