Advertisement
Guest User

Untitled

a guest
Jan 25th, 2020
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 1.53 KB | None | 0 0
  1. #lang racket
  2.  
  3. ;default params
  4.  
  5. (define (merge defaults passed result)
  6.   (if (empty? defaults)
  7.       (reverse result)
  8.       (merge (rest defaults) (if (empty? passed) passed (rest passed)) (if (empty? passed)
  9.                                 (cons (first defaults) result)
  10.                                 (cons (first passed) result))
  11.       )
  12.    )
  13. )
  14.  
  15. ;(merge '(1 2 3 4 5) '(3 3) '())
  16.  
  17. (define (default-parms f defaults)
  18.   (lambda args
  19.     (apply f (merge defaults args '()))))
  20.  
  21. (define g (default-parms list (list 42 99)))
  22.  
  23. (define f list)
  24. (g)
  25. (f 42 99)
  26.  
  27. (g 8)
  28. (f 8 99)
  29.  
  30. (g 8 9)
  31. (f 8 9)
  32.  
  33.  
  34. ;type-parms
  35. (define (valid args types)
  36.   (if (empty? types)
  37.       #t
  38.       (if ((first types) (first args)) ;if the next thing is valid
  39.           (valid (rest args) (rest types))
  40.           #f
  41.       )
  42.   )
  43. )
  44.  
  45. (define (type-parms f types)
  46.   (lambda args
  47.     (if (valid args types);valid
  48.         (apply f args)
  49.         (error "wrong arg type")
  50.      )
  51.    )
  52. )
  53.  
  54. (define h (type-parms f (list number? string?)))
  55. (h 0 "hello")  ;behaves fine
  56. ;(h 0 4)  ;throws error
  57.  
  58.  
  59.  
  60. ;new-sin2
  61. (define (degrees-to-radians angle) (* (/ angle 180) pi))
  62.  
  63.  
  64. (define (new-sin angle type)
  65.   (cond
  66.     [(symbol=? type 'degrees) (sin (degrees-to-radians angle))]
  67.     [(symbol=? type 'radians) (sin angle)]
  68.     [(error "input should be degrees or radians")])
  69.  
  70. )
  71.  
  72. (define new-sin2 (default-parms
  73.             (type-parms
  74.              new-sin
  75.              (list number? symbol?))
  76.             (list 0 'radians)))
  77.  
  78.  
  79. (new-sin2 5 'radians)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement