举个例子:
(define sqrt (lambda (x) (* 2 (sqrt x))))
(sqrt 2)
2.828427 ...
如何在sqrt
不重新启动解释器(或取消定义阴影定义)的情况下调用原始的内置过程?
实际上,当我们这样做时,内部会发生什么?内置程序会被覆盖,还是两个过程在不同的名称空间中共存?
您对的定义sqrt
实际上会导致堆栈溢出,因为它是递归到自身而不是内建的sqrt
。:-P
无论如何,在Racket中,您对的定义sqrt
只会影响您当前的模块。可以sqrt
使用其他名称重新导入内置文件,然后从特定于模块的模块中调用该内置文件sqrt
:
(require (rename-in racket/base [sqrt racket-sqrt]))
(define sqrt (lambda (x) (* 2 (racket-sqrt x))))
请注意,您的代码不会影响其他不导入模块sqrt
定义的模块;他们将继续使用内置的sqrt
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句