R5RS給出建議的宏定義的庫語法形式:如果有的話,Scheme中的letrec定義有什麼錯誤?
http://schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-10.html#%_sec_7.3
,其也限定letrec,以一種非常複雜的方式,肯定不是我將如何定義它,我會簡單地使用:
(define-syntax letrec2
(syntax-rules()
((letrec2 ((name val) ...) body bodies ...)
((lambda()
(define name val) ...
body bodies ...)))))
據我瞭解letrec的語義,我經常使用它作爲命名let。它以這種方式工作,然而,由於我與哲學家的辯論中有我認爲他們可以駁斥狹義相對論或已建立的音系理論的公平分享,所以我知道當你認爲你對複雜問題有一個簡單的解決方案時,錯誤。這個宏有些地方不符合letrec的語義,否則他們可能會使用它。
在這個定義中,定義對於letrec的本體來說是本地的,它們可以互相引用來進行相互遞歸,我不太確定什麼(如果有的話)是錯誤的。
引用我:「只有在某些實現中,內部定義纔是原始形式。」引用schemewiki:「仍然有一些Scheme實現只提供了一個原始的頂級定義,並根據letrecs實現了內部定義......」您的定義僅適用於某些實現。我引用了R5RS的介紹,以說明爲什麼我認爲R5RS作者沒有選擇你的實現。如果我關於R5RS哲學的觀點沒有道理,我願意回答你關於它的問題。 – Davorak 2010-06-11 23:56:50
@Davorak好吧,從技術上講,定義將在所有實現中起作用。只是在一些實現中,它使用的內部'define'將被擴展爲'letrec'的本地實現。 – dubiousjim 2012-11-04 17:54:04