Skip to content

Instantly share code, notes, and snippets.

@xsc
xsc / user.clj
Created May 11, 2018
Transforming rewrite-clj's Midje testcases to standard Clojure tests
View user.clj
(ns user
(:require [rewrite-clj.zip :as z]
[rewrite-clj.node :as n]))
(defn token=
[loc v]
(and (= :token (z/tag loc))
(= v (z/sexpr loc))))
(defn fact?
@xsc
xsc / ast_spec.clj
Last active Oct 29, 2016
Useless Language AST (clojure.spec)
View ast_spec.clj
;; The AST consists of declarations and calls.
(s/def :lang/ast
(s/keys :req [:lang/declarations :lang/calls]))
;; Throughout, we'll use variables/calls identified by their name.
(s/def :lang/name
(s/and string? #(re-matches #"[a-z]+" %)))
(s/def :lang/variable-name
:lang/name)
@xsc
xsc / restricted_spec.clj
Last active Oct 26, 2016
Restricted/Dynamic Specs
View restricted_spec.clj
(s/def ::element
integer?)
(s/def ::list
(s/coll-of ::element))
(s/def ::map
(s/keys :req [::list]))
;; I'd like to make the '::map' spec more restrictive, i.e. only accept a
@xsc
xsc / benchmark.patch
Created Aug 31, 2014
pjson benchmarks
View benchmark.patch
From a74d2f6d2337d28a97d48aeb06299269bac6354d Mon Sep 17 00:00:00 2001
From: Yannick Scherer <yannick.scherer@stylefruits.de>
Date: Sun, 31 Aug 2014 15:51:53 +0200
Subject: [PATCH] benchmark adjustments.
---
src/main/bench/pjson/parse_bench.clj | 37 +++++++++++++++++-------------------
1 file changed, 17 insertions(+), 20 deletions(-)
diff --git a/src/main/bench/pjson/parse_bench.clj b/src/main/bench/pjson/parse_bench.clj
@xsc
xsc / fast_zip_utils.clj
Created Aug 7, 2013
node removal utilities for fast-zip
View fast_zip_utils.clj
(ns fast-zip-utils
(:require [fast-zip.core :as z])
(:import [fast_zip.core ZipperPath ZipperLocation]))
(defn remove-right
"Remove right sibling of the current node (if there is one)."
[^ZipperLocation zloc]
(let [path ^ZipperPath (.path zloc)]
(if (zero? (count (.r path)))
zloc
@xsc
xsc / base64.clj
Created May 4, 2013
Base64 Encoding/Decoding in Clojure
View base64.clj
(ns ^{ :doc "Base64 Encoding/Decoding in Clojure"
:author "Yannick Scherer" }
base64)
;; ## Conversion Functions
(def ^:private base64-chars
"Base64 Characters in the right order."
(vec
(concat
@xsc
xsc / repl.clj
Last active Dec 16, 2015
Clojure and Thrift using Java Interop (intended for the REPL)
View repl.clj
;; Processor
(import '(org.example Person PersonIndex PersonIndex$Processor
PersonIndex$Client PersonIndex$Iface))
(def person-index-processor
(PersonIndex$Processor.
(proxy [PersonIndex$Iface] []
(store [p]
(println "Storing Person:")
@xsc
xsc / kasumi.hs
Created Dec 15, 2012
KASUMI implementation in Haskell
View kasumi.hs
module Kasumi where
import Data.Bits
import Data.List
import Data.Word
-- Helpers
rol16 x 0 = x
rol16 x n = 0xFFFF .&. ((shiftL x n) .|. (shiftR x (16 - n)))
@xsc
xsc / main.clj
Created Nov 18, 2012
Counting Characters in Clojure
View main.clj
(ns character-counter.main)
;; ------------------------------------------------------------------------
;;
;; SEE HERE: http://dev.xscheme.de/2012/11/counting-characters-in-clojure/
;;
;; ------------------------------------------------------------------------
;; Different Count Strategies
(def count-a-with-regex
You can’t perform that action at this time.