2016-10-27 10 views
0

私はこのスキームを研究し始め、組み込み手続きがどのように「ペア?働く私は組み込みプロシージャのコードを見る方法を見つけることができなかったので、明らかにコードを意味し、それを書く方法はわかりません。私はここにいます。 「リスト」と同じ質問がありましたか?手続きを自分で書いていたが、「ペア?全く分かりません。どうも!組込みスキーム・プロシージャーのコード "pair?"

+0

使用しているスキームの実装のソースコードを見てみたいと思うようです。だから...どのような体系の実装を使っていますか? :) –

+0

はい、サー! DrRacket) – Dmitrii

+0

ラケットの 'pair?'(私は体系について知らない)はプリミティブです。各 'Scheme_Object *'には、どのタイプであるかを示すタグがあります。 'pair?'はそのタグを調べ、ペアタイプの値と一致するなら '#t'を返します。 –

答えて

0

私はあなたが 'ペア?'の実装を探していると思います。ラケットのプリミティブそれはlist.c現在です:もしそうなら

https://github.com/racket/racket/blob/master/racket/src/racket/src/list.c

を具体的に、pair_p_primの定義を見て。

希望すると便利です。

編集:それはなぜラケットで書かれていないのですか?

回答:pair?は、Racket and Schemeのプリミティブです。これは、RacketではRacketで実装されていないことを意味します.Racketが実装されている言語で実装されています。言語のこの部分については、Cです。 Racket実装が下位レベルのプリミティブセットを提供するように更新された場合、pair?関数はもはやプリミティブではないかもしれません。最後に、実装言語が言語 が開発されているものと同じである「ブートストラッピング」実装を提供するために、実装者が古いコンパイラの存在を利用する言語もあります。

希望すると便利です。

+0

いいえ、それは私が欲しいものではありません。プロシージャの仕組みのコードが必要です。ここに例があります。組み込みプロシージャ "list?"そのように定義することができます。 (もし、(ペア?p) (リスト?(cdr p)) false)))) (if(null?p) true()私は手順 "ペアのために同じ定義が必要ですか?" – Dmitrii

+0

上記の編集を参照してください。 –

+0

Thx!それが本当に助けになりました! – Dmitrii

関連する問題