在Haskell中,我可能会这样实现if:
if' True x y = x
if' False x y = y
spin 0 = ()
spin n = spin (n - 1)
Run Code Online (Sandbox Code Playgroud)
这表现我的期望:
haskell> if' True (spin 1000000) () -- takes a moment
haskell> if' False (spin 1000000) () -- immediate
Run Code Online (Sandbox Code Playgroud)
在Racket中,我可以实现这样的缺陷if:
(define (if2 cond x y) (if cond x y))
(define (spin n) (if (= n 0) (void) (spin (- n 1))))
Run Code Online (Sandbox Code Playgroud)
这表现我的期望:
racket> (if2 …Run Code Online (Sandbox Code Playgroud) evaluation haskell lazy-evaluation expression-evaluation idris