PasteRack.org
Paste # 89800
2015-05-19 04:56:36

Fork as a new paste.

Paste viewed 504 times.


Embed:

Y combinator in typed/racket

  1. #lang typed/racket
  2.  
  3. (define Y
  4.   (;(ann ;; Not needed
  5.     (λ (f)
  6.       (f f))
  7.    ;(All (A) (→ (Rec r (→ r A)) A))) ;; Not needed
  8.    (ann
  9.     (λ (z)
  10.       (λ (f)
  11.         (f (λ (x) (((z z) f) x)))))
  12.     (Rec r ( r (All (T R) ( ( ( T R) ( T R)) ( T R))))))))
  13.  
  14. (: factorial ( Real Real))
  15. (define factorial
  16.   (Y (λ ([recursive-factorial : ( Real Real)])
  17.        (λ ([x : Real])
  18.          (if (<= x 0)
  19.              1
  20.              (* x (recursive-factorial (- x 1))))))))
  21.  
  22. (factorial 5)

=>

- : Real

120