Racket 球拍基元函数列表

Racket 球拍基元函数列表,racket,primitive,built-in,Racket,Primitive,Built In,有球拍内置功能的列表吗?我在寻找一个类似python的列表。我似乎在文档中找不到 以下是一些列表: Racket文档中所有函数的索引: 备忘单: 现在,Racket上下文中的“原始功能”指的是在虚拟机中实现的所有功能(即不包括Racket中实现的功能),因此 第三份清单也可能相关 这个小程序生成所有原语的列表: #lang racket (define primitive-table (let ([ns (make-base-empty-namespace)]) ; make na

有球拍内置功能的列表吗?我在寻找一个类似python的列表。我似乎在文档中找不到

以下是一些列表:

Racket文档中所有函数的索引:

备忘单:

现在,Racket上下文中的“原始功能”指的是在虚拟机中实现的所有功能(即不包括Racket中实现的功能),因此 第三份清单也可能相关

这个小程序生成所有原语的列表:

#lang racket

(define primitive-table  
  (let ([ns (make-base-empty-namespace)]) ; make namespace with racket/base attached
    (parameterize ([current-namespace ns])
      (namespace-require ''#%kernel)      ; import all primitives
      (namespace-require ''#%unsafe)
      (namespace-require ''#%flfxnum)
      (namespace-require ''#%extfl)
      (namespace-require ''#%futures)
      (namespace-require ''#%foreign)

      (namespace-mapped-symbols))))

primitive-table

在我的Racket版本中有1487个原语。

谢谢,这正是我想要的。但出于好奇,为什么球拍需要这么多的原语?racket不能使用其他原语实现其中的一些吗?最后一个列表将包含最终用户不使用的级别过程和特殊表单,因为它的级别低于典型的scheme原语。通常,“原语”是使用这些原语的包装过程和语法。通过右键单击符号并选择“打开定义文件”,可以在IDE中看到这一点。例如,
map
在最常见的情况下通常根本不使用原语。同样的道理也适用于clojure和python。你的球拍不需要那么多。这个数字如此之大是由多种原因造成的。首先,有些函数需要是基元函数(即C函数)。其他函数可以在其他原语的基础上实现,但不能。几年前,当Racket没有JIT编译器时,用C实现的原语通常比Racket实现要快。因此,许多函数都是用C实现的。在后来的几年中,出现了从C原语到Racket实现的转变。最近的发展,如类型化Racket和在Racket中实现的新JIT编译器,无疑会加快这个过程。