You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
907 B
Racket
28 lines
907 B
Racket
8 years ago
|
#lang br/quicklang
|
||
|
(require sugar/list)
|
||
|
|
||
8 years ago
|
(define (read-syntax path port)
|
||
8 years ago
|
(define triads (slice-at (map string-split (string-split (port->string port) "\n")) 3))
|
||
|
(define new-triples
|
||
|
(slice-at (flatten (for/list ([triad (in-list triads)])
|
||
|
(apply map list triad))) 3))
|
||
|
(strip-bindings
|
||
8 years ago
|
#`(module mod "lang-b.rkt"
|
||
8 years ago
|
#,@(for*/list ([triple (in-list new-triples)])
|
||
8 years ago
|
`(triangle ,@triple)))))
|
||
8 years ago
|
(provide read-syntax)
|
||
8 years ago
|
|
||
|
(define-macro (mb . TRIANGLES)
|
||
|
#'(#%module-begin
|
||
|
(length (filter valid-triangle? (list . TRIANGLES)))))
|
||
|
(provide (rename-out [mb #%module-begin]))
|
||
|
|
||
|
(define-macro (triangle A B C)
|
||
8 years ago
|
#'(map string->number (list A B C)))
|
||
8 years ago
|
(provide triangle)
|
||
|
|
||
|
(define (valid-triangle? triangle)
|
||
|
(match-define (list a b c) triangle)
|
||
|
(and (> (+ a b) c)
|
||
|
(> (+ b c) a)
|
||
|
(> (+ a c) b)))
|