所以我在下面有这个代码:
(define escape
(lambda ()
(set! halt (call/cc (lambda (k) k)))
0))
(define multiply
(lambda (l)
(if (null? l)
1
(if (zero? (car l))
(halt halt)
(* (car l) (multiply (cdr l)))))))
我不得不重新设计“乘法”以避免“逃避”并获取延续的值,以便“停止”返回答案的值我想出这个解决方案它看起来如何?
(define multiply
(lambda ()
(let ((result (call/cc (lambda (k) (set! halt k) '()))))
(if (procedure? halt)
(tester
((multiply (lambda (k)
(if (= k 0) (halt k)
(multiply (* k 1))))))
(result 1))
halt))))
答案 0 :(得分:0)
您是否只是尝试使用call/cc
编写早期返回的乘法函数?
(define multiply
(lambda (l)
(call/cc
(lambda (k)
(let loop ([l l])
(cond
[(null? l) 1]
[(= 0 (car l)) (k 0)]
[else (* (car l) (multiply (cdr l)))]))))))