[解決済み] Scheme/Racketにおけるletrecの意味
2022-02-19 21:26:30
質問事項
そこで、私が理解している範囲では、以下のようになります。
let
,
let*
,
letrec
と
letrec*
は、Scheme/Racketで使われている合成糖です。
さて、簡単なプログラムがあったとします。
(let ((x 1)
(y 2))
(+ x y))
と訳される。
((lambda (x y) (+ x y)) 1 2)
持っていれば
(let* ((x 1)
(y 2))
(+ x y))
と訳される。
((lambda (x) ((lambda (y) (+ x y))) 2) 1)
さて、最初の質問ですが、私は
letrec
この式は、let の内部で再帰を使用できるようにするものですが、具体的にどのように行うのかがわかりません。具体的には
letrec
に変換されるのですか?
例えば、次のようなことです。
(letrec ((x 1)
(y 2))
(+ x y))
に翻訳されるのですか?
2つ目の質問も同様で
letrec*
- しかし
letrec*
と具体的にどう違うのかがわからない。
letrec
? また
letrec*
という表現に変換されるのでしょうか?
どのように解決するのですか?
論文 "FixingLetrecを参照してください。忠実かつ効率的な実装 Schemeの再帰的バインディング構文" by Oscar Waddell, Dipanwita Sarkar, and, R. Kent Dybvigです。
この論文では、単純なバージョンから始まり、より洗練された拡張を説明する。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン