Skip to content

Instantly share code, notes, and snippets.

View dannypsnl's full-sized avatar

Lîm Tsú-thuàn dannypsnl

View GitHub Profile
@dannypsnl
dannypsnl / cond.js
Last active January 26, 2022 18:28
define your owned `cond`
function cond(...clauses) {
for (let [test, e] of clauses) {
if (eval(test)) {
return eval(e);
}
}
}
let hi = "test";
@dannypsnl
dannypsnl / generator.rkt
Created January 26, 2022 18:14
generators
#lang racket/base
(require racket/generator)
(define nat-gen
(generator
()
(let loop ([x 0])
(yield x)
(loop (add1 x)))))
(define pos-gen
@dannypsnl
dannypsnl / qs.rkt
Last active May 30, 2022 10:51
quick sort
#lang racket/base
(require racket/match
racket/list
racket/sequence
racket/random)
(define (is l)
(define (insert x ys)
(match ys
[(list) (list x)]
const assert = require("assert");
module.exports = function extend(Extend, Interfaces, method) {
assert(Extend !== undefined);
assert(Extend instanceof Function);
return function (prop) {
// super
const super_ = new Extend(prop);
this.__proto__ = super_;
// interface
@dannypsnl
dannypsnl / sliding-on-list.rkt
Last active January 20, 2022 04:37
general sliding on list
#lang racket
(define (f lst window-size step
#:drop [drop? #t])
(if (< (length lst) window-size)
(if drop?
'()
(list lst))
(cons (take lst window-size)
(f (drop lst step)
@dannypsnl
dannypsnl / quick-sort.rkt
Last active January 19, 2022 08:06
quick sort
#lang racket
(require racket/random)
(define target (stream->list (in-range 1000000 0 -1)))
(define/match (q1 l)
[('()) '()]
[((cons pivot rest))
(define (less x) (< x pivot))
(define-values (l b) (partition less rest))
@dannypsnl
dannypsnl / test.scala
Last active January 5, 2022 19:06
visitor power
import org.junit.Test
import org.junit.Assert.*
class Test2:
@Test def t1(): Unit = {
val t1 = Fork(1, Node(2), Node(3))
assertEquals(2, t1.accept(new Depth()))
}
@Test def t2(): Unit = {
@dannypsnl
dannypsnl / improve-dt-encoding.rkt
Last active September 3, 2022 01:52
improve dependent type encoding
#lang racket
(require syntax/parse/define
(for-syntax syntax/stx))
(define-for-syntax (subst stx m)
(syntax-parse stx
[(A a ...)
#`(A #,@(stx-map (λ (b) (subst b m)) #'(a ...)))]
[name:id (hash-ref m (syntax->datum #'name) stx)]))
@dannypsnl
dannypsnl / class.rkt
Last active August 17, 2021 00:29
we can bring more information from macro
#lang racket
(require syntax/parse/define
(rename-in racket/base
[define origin-define])
(for-syntax syntax/transformer
syntax/stx
racket/string
racket/syntax
racket/list
@dannypsnl
dannypsnl / define-syntax-parser.rkt
Last active August 14, 2021 22:07
define-syntax-parser is amazing sucks
#lang racket
(require syntax/parse/define
(for-syntax syntax/transformer))
(define-for-syntax (type-equal? t1 t2)
(equal? (syntax->datum t1) (syntax->datum t2)))
(define-for-syntax (check-type term type)
(unless (type-equal? (typeof term) type)
(raise-syntax-error 'type-mismatch