2016-06-17 11 views

答えて

3

は、いくつかのリストは以下のとおりです。

ラケットのドキュメント内のすべての関数のインデックス:

http://docs.racket-lang.org/reference/doc-index.html

チートシート:

https://docs.racket-lang.org/racket-cheat/index.html?q=cheatsheet

今 "基本関数" Racketのコンテキストでは、仮想マシンに実装されているすべての機能を意味します(つまり、funcラケットで実装されているものは除外されているため)、 の3番目のリストも関連している可能性があります。

この小さなプログラムは、すべてのプリミティブのリストを生成します。

#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 

ラケットの私のバージョンでは1487個のプリミティブがあります。

+0

ありがとう、それは私が探していたものです。しかし好奇心から、なぜラケットはそんなに多くのプリミティブを必要としますか?他のプリミティブを使ってラケットで実装することはできませんでしたか? – Vityou

+0

最後のリストには、通常のスキームプリミティブよりも低いレベルであるため、エンドユーザーが使用しないレベルプロシージャと特殊フォームがあります。通常、「プリミティブ」は、これらを使用するラップされたプロシージャおよび構文です。シンボルを右クリックし、「ファイルを開く」を選択すると、IDEでこれを見ることができます。例えば。 'map'は通常、最も一般的な場合にプリミティブをまったく使用しません。 clojureとおそらくはPythonについても同じことが言えます。 – Sylwester

+0

@Vityou Racketはそれほど必要ではありません。その数が非常に多いのは、複数の理由によるものです。まず第一に、プリミティブ(つまりC関数)が必要ないくつかの関数*が必要です。他の関数は他のプリミティブの上に実装することができますが、そうではありません。数年前、RacketにJITコンパイラがない場合、Cで実装されたプリミティブは、Racketの実装よりも高速になることがよくありました。そのため、多くの機能がC言語で実装されました.C-primitivesからRacketの実装に移行しています。 Typed Racketや最近の開発では、 – soegaard

関連する問題