なんだこれ?

Formato
C
Post date
2019-11-26 17:25
Publication Period
Unlimited
  1. struct A {
  2. var f: () -> Int
  3. }
  4. extension A: Equatable {
  5. static func == (l: A, r: A) -> Bool { l.f() == r.f() }
  6. }
  7. extension A: AdditiveArithmetic {
  8. static let zero = A { 0 }
  9. static func + (l: A, r: A) -> A { A { l.f() + r.f() } }
  10. static func += (l: inout A, r: A) {
  11. let n = l.f()
  12. l.f = { n + r.f() }
  13. }
  14. static func - (l: A, r: A) -> A { A { l.f() - r.f() } }
  15. static func -= (l: inout A, r: A) {
  16. let n = l.f()
  17. l.f = { n - r.f() }
  18. }
  19. }
  20. extension A: ExpressibleByIntegerLiteral {
  21. init(integerLiteral value: Int) { f = { value } }
  22. }
  23. extension A: Numeric {
  24. init?<T: BinaryInteger>(exactly source: T) {
  25. guard let g = Int(exactly: source).map({ s in { s } }) else { return nil }
  26. f = g
  27. }
  28. var magnitude: Int.Magnitude { f().magnitude }
  29. static func * (l: A, r: A) -> A { A { l.f() * r.f() } }
  30. static func *= (l: inout A, r: A) {
  31. let n = l.f()
  32. l.f = { n * r.f() }
  33. }
  34. }
Descargar Printable view

URL of this paste

Embed with JavaScript

Embed with iframe

Raw text