如果是一个适当的功能,而不是一个特殊的形式

Any*_*orn 14 lisp functional-programming function special-form

我终于开始学习函数式语言(emacs lisp),它明确区分了函数和特殊形式,例如流控制,例如if.

特殊形式与功能有何不同,是否存在基本/理论上的原因?任何语言都提供功能if吗?

谢谢

gim*_*mpf 12

通过急切的评估,需要区分,具有惰性评估的语言(即Haskell)if等.可以是功能.

急切评估:调用函数之前评估函数的参数,并且只将结果传递给函数.

延迟评估:当且仅当访问它们时,才评估函数的参数.


seh*_*seh 8

如果if是一个正常的函数,那么它的参数 - then形式else形式 - 调用if函数之前进行评估,因为这是函数评估的规则:评估所有参数以产生值,然后将该值序列提供为列表中第一个符号指定的函数的参数.

相反,if你想要做的就是准确地评估当时形式其他形式之一,而不是两者.为了抑制对一个或另一个的评估,您需要宏或特殊形式.