Skip to content

Instantly share code, notes, and snippets.

@ktakashi
ktakashi / expt.scm
Last active November 2, 2015 08:55
expt performance comparison
;; for Sagittarius, Ypsilon
(import (rnrs) (time))
;; for Mosh
;; (import (rnrs) (mosh))
;; for Chez with --script option
;; (import (rnrs))
;; for Vicare
;; (import (rnrs) (vicare))
;; for Racket
;; (import (rnrs) (only (racket base) time))
@ktakashi
ktakashi / cutn.scm
Created October 29, 2015 12:21
Generalised cut
;; generalised cut
;; (import (scheme base) (scheme write))
(import (rnrs))
;; FIXME I think there's a better way
(define-syntax remove-duplicate
(syntax-rules ()
((_ (e* ...) reserve next)
(remove-duplicate "pair" () (e* ...) (e* ...) reserve next))
@ktakashi
ktakashi / ChangeLog
Last active October 21, 2024 22:17
Portable(?) R6RS er-macro-transformer
2015-10-24
- Changed comment
- Walk though returning form to wrap. Racket still doesn't work.
- Fixed incorrect example on definition of macro and usage environment.
Comment of: https://twitter.com/anohana/status/657865512370634753
@ktakashi
ktakashi / free-identifier.scm
Created October 15, 2015 19:06
free-identifier=? on syntax-rules
(import (scheme base)
(scheme write)
(rename (only (scheme base) car) (car r5rs:car)))
(define-syntax free-identifier=??
(syntax-rules ()
((_ a b)
(let-syntax ((foo (syntax-rules (a)
((_ a) #t)
((_ _) #f))))
@ktakashi
ktakashi / composable-macro.scm
Last active October 15, 2015 12:02
Composable macro
#!r6rs
(import (rnrs))
;; composing macro needs to be done CPS.
(define-syntax composem (syntax-rules ()))
(define-syntax extract/cps
(syntax-rules (composem extract/cps)
;; assume k is a macro which accepts cps in first argument
((_ (composem k) args ...) (k args ...))
((_ (composem k k* ...) args ...)
@ktakashi
ktakashi / assocm.scm
Created October 14, 2015 17:21
Macro assoc
(import (scheme base) (scheme write))
(define-syntax assocm
(syntax-rules ()
((_ key (alist ...))
(letrec-syntax ((foo (syntax-rules (key)
((_ (key . e) res (... ...)) '(key . e))
((_ (a . d) res (... ...)) (foo res (... ...))))))
(foo alist ...)))))
@ktakashi
ktakashi / check-port-error.scm
Created October 12, 2015 10:01
Closed port error
(import (rnrs))
(guard (e ((i/o-error? e) (display "&i/o-error: ") (display e))
((assertion-violation? e) (display "&assertion: ") (display e))
(else (display "other: ") (display e)))
(let ((in (open-bytevector-input-port #vu8(1 2 3 4 5))))
(close-port in)
(get-u8 in)))
(flush-output-port (current-output-port))
#|
;; -*- mode: scheme -*-
#!r6rs
(library (prefixed-syntax-rules)
(export prefixed-syntax-rules)
(import (rnrs))
(define-syntax prefixed-syntax-rules
(lambda (x)
(define (check-pattern p)
(define (prefiex? id)
@ktakashi
ktakashi / phasing.scm
Created August 19, 2015 19:58
Macro phasing
(import (except (rnrs) cons)
(for (only (rnrs) cons syntax-case lambda
display newline syntax) expand (meta 2)))
(define-syntax foo
(lambda (x)
(define-syntax expand-phase
(lambda (x)
(display (cons 1 2)) (newline)
#'#t))
@ktakashi
ktakashi / base64.html
Created June 12, 2015 12:46
Simple HTTP server for Sagittarius
<html>
<head>
<title>Base64 encode/decode</title>
</head>
<body>
<form action="/base64" method="POST" enctype="multipart/form-data">
Base64<br />
<textarea name="base64" id="base64"></textarea>
<br />
Plain<br />