Skip to content

Instantly share code, notes, and snippets.

@rpinkerton
Created September 20, 2014 07:57
Show Gist options
  • Save rpinkerton/8e900e1cf09c44397735 to your computer and use it in GitHub Desktop.
Save rpinkerton/8e900e1cf09c44397735 to your computer and use it in GitHub Desktop.
racket is dumb
#lang racket
; automating threading combinator
; Definition of a generic threadable object
(define (make-threadable params do merge final iters)
(final (threadable-iter params do merge final iters)))
; And a function to iterate a thread
(define (threadable-iter params do merge final iters)
(if (= iters 0)
(do params)
(threadable-iter (do params) do merge final (- iters 1))))
; The great function that threads automagically for you
;;(define (split threadable num)
; The threadable arguments for a monte carlo pi simulation, for testing
(define (monte-pi-do params)
(if (< (sqrt (+ (expt (random) 2) (expt (random) 2))) 1)
(list (+ (car params) 1) (+ (cadr params) 1))
(list (car params) (+ (cadr params) 1))))
(define (monte-pi-merge params1 params2)
(list (+ (car params1) (car params2)) (+ (cadr params1) (cadr params2))))
(define (monte-pi-final params)
(exact->inexact (* 4 (/ (car params) (cadr params)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment