原始内容和内置功能在Racket中是一样的吗? 如果不是,它们之间有什么区别?
答案 0 :(得分:3)
简短的回答是否!
原始函数是那些未在其自己的运行时中实现但由运行时固有实现的函数。例如。 cons
在C中实现,并且球拍VM附带实现它的代码。 list*
也是,但它并不需要是原始的。一些原语只是为了加快速度。
内置函数意味着它们带有语言。这些都是基元和所有标准库,它们在语言本身中实现,并随实现一起提供。一个例子是make-list
。如果您在IDE中单击并选择“打开定义文件”,您将在球拍中看到它的实现:
(define (make-list n x)
(unless (exact-nonnegative-integer? n)
(raise-argument-error 'make-list "exact-nonnegative-integer?" n))
(let loop ([n n] [r '()])
(if (zero? n) r (loop (sub1 n) (cons x r)))))
pkgs.racket-lang.org中的许多软件包都是一个既不是原始函数也不是内置函数的函数。