Skip to content

Instantly share code, notes, and snippets.

(define-syntax cut
(ir-macro-transformer
(lambda (form inject compare?)
`(cut% () () ,@(cdr form)))))
;; ir-macro-transformer version
(define-syntax cut%
(ir-macro-transformer
(lambda (form inject compare?)
(let ((slots (cadr form))
(define count 0)
(define x 5)
(define p
(delay
(begin (set! count (+ count 1))
(* x 3))))
(force p) ; runtime error: invalid application: #t
@stibear
stibear / force-bug.scm
Created February 22, 2014 18:47
Bug of `force` in picrin
(define count 0)
(define end 5)
(define p
(delay
(begin (set! count (+ count 1))
(if (> count end)
count
(force p)))))
(force p) ; runtime error: invalid application: #t
(define-record-type pare
(kons x y)
pare?
(x kar)
(y kdr))
(kons 'a 'b) ;=> #<record pare>
(define-library (scheme record)
(import (scheme base)
(scheme cxr)
(picrin macro))
(define record-marker (list 'record-marker))
(define real-vector? vector?)
(define (vector? x)
This file has been truncated, but you can view the full file.
~/picrin-stibear/picrin $ make run
bin/picrin
gc run!
sym_pool realloced
gc run!
gc run!
gc run!
gc run!
sym_pool realloced
gc run!
cd src; \
yacc -d parse.y; \
flex scan.l
cc -Wall -Wextra -std=c99 -g -DDEBUG=1 -O0 -shared -fPIC src/*.c -o lib/libpicrin.so -I./include -I./extlib -L./lib -lm -lxfile
src/codegen.c: 関数 ‘global_def’ 内:
src/codegen.c:1467:38: 警告: 符号付きと符号無しの整数式の間での比較です [-Wsign-compare]
if ((gidx = global_ref(pic, name)) != -1) {
^
lex.yy.c: 関数 ‘yy_scan_bytes’ 内:
lex.yy.c:1857:17: 警告: 符号付きと符号無しの整数式の間での比較です [-Wsign-compare]
> (define (circular-list? x)
(and (pair? x)
(let rec ((lst (cdr x)))
(cond ((not (pair? lst)) #f)
((null? lst) #f)
((eq? x lst) #t)
(else (rec (cdr lst)))))))
* * * *
.git/ .travis.yml Makefile etc/ lib/ t/
.gitignore AUTHORS README.md extlib/ piclib/ tools/
@stibear
stibear / ir2.scm
Last active December 31, 2015 10:29
(define-syntax aif
(ir-macro-transformer
(lambda (form inject compare?)
(let ((it (inject 'it))
(test (cadr form))
(then (caddr form))
(else (cadddr form)))
`(let ((,it ,test))
(if ,it ,then ,else))))))
(define-syntax swap!
(ir-macro-transformer
(lambda (form inject compare?)
(let ((a (cadr form))
(b (caddr form)))
`(let ((tmp ,a))
(set! ,a ,b)
(set! ,b tmp))))))