Advertisement
Guest User

Untitled

a guest
Jan 4th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 1.89 KB | None | 0 0
  1. (load "RewriteSchemes.scm")
  2. (load "StringProcessing.scm")
  3. (define (carpet->svg c w h)
  4.     (treetostring (append
  5.         `(svg ((height ,h) (width ,w)) )
  6.         (map (lambda (x) `(polygon ((points ,(pointstostring (cdr x))) (style ,(string-append "fill:" (vertexdeviationcolour (cdr x)) "; stroke:#000040; stroke-width:2px;"))))) c))))     
  7.  
  8. (define toparse "Quadpattern= (quad (_ _) (_ _) (_ _) (_ _)) => (tri (|2 |3) (|4 |5) (|0 |1)),(tri (|6 |7) (|0 |1) (|4 |5)),
  9. Tripattern=(tri (_ _) (_ _) (_ _))=>(tri (|0 |1) (|2 |3) ((/ (+ |2 |4) 2) (/ (+ |3 |5) 2))),(tri ((/ (+ |2 |4) 2) (/ (+ |3 |5) 2)) (|4 |5) (|0 |1)),")
  10.  
  11. (define (assignment? s)  (if (string? s) (if (null? (cdr (string-split-first s "="))) #f (not (equal? (substring (cdr (string-split-first s "=")) 0 1) ">")))  #f))
  12. (define (assignment name value) (cons 'assign (cons name (rule value))))
  13. (define (rule s) (let ((io (string-split s "=>")))
  14.     (let ((i (car io)) (o (cadr io)))
  15.         (cons `,(split-s-expression-string i) (map split-s-expression-string (string-split o ","))))))
  16. (define (parse_definition s)
  17.     (if (assignment? s)
  18.     ((lambda (x) (assignment (car x) (cdr x))) (string-split-first s "=")) (rule s)))
  19. (define (parse_definitions s)
  20. (map parse_definition (string-split s "
  21. ")))
  22. (define rules (parse_definitions toparse))
  23. (define definitions (map (lambda (x) (cons (cadr x) (patternrule (caddr x) (cdddr x)))) (filter (lambda (x) (equal? (car x)'assign)) rules)))
  24. (define (iterate defs l) (if (null? l) '() (append (map (lambda (x) (cons (car x) (map (lambda (y) (list (eval (car y) user-initial-environment) (eval (cadr y) user-initial-environment))) (cdr x)))) (funclist defs (car l))) (iterate defs (cdr l)))))
  25. (define (carpet defs i l) (if (zero? i) l (carpet defs (- i 1) (iterate defs l))))
  26. (define output (carpet (map (lambda (x) (cdr x)) definitions) 8 '((quad (0 0) (1480 0) (1480 1480) (0 1480)))))
  27. (save "testo" (carpet->svg output "1480" "1480"))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement