在过程调用中强制从左到右评估顺序
Forcing left-to-right evaluation order in procedure call
在某些情况下,以保证从左到右的求值顺序调用过程很有用。例如,当使用从端口读取的数据调用记录构造函数时,顺序很重要。通常这些字段的顺序与文件中的顺序相同,因此不需要重新洗牌。因此,通常通过let*
引入名称和排序的方法有点繁琐。
标准库中是否有一些现成的语法可以提供此功能?基本上,我希望写的不是 (f a b c)
,而是像 (ordered f a b c)
这样的东西,它被翻译成
(let* ((t0 f)
(t1 a)
(t2 b)
(t3 c))
(t0 t1 t2 t3))
使用新符号 t0
到 t3
。
您提出的情况还不够普遍,不足以作为标准库中的一项功能,特别是考虑到 let*
的解决方法非常简单。此外,该语言通过其 macro-writing 设施使您能够轻松地为自己提供此功能,这意味着它应该出现在标准库中的理由更少。如果您发现自己经常需要这样做,请编写一个宏作为您的库的一部分。
在某些情况下,以保证从左到右的求值顺序调用过程很有用。例如,当使用从端口读取的数据调用记录构造函数时,顺序很重要。通常这些字段的顺序与文件中的顺序相同,因此不需要重新洗牌。因此,通常通过let*
引入名称和排序的方法有点繁琐。
标准库中是否有一些现成的语法可以提供此功能?基本上,我希望写的不是 (f a b c)
,而是像 (ordered f a b c)
这样的东西,它被翻译成
(let* ((t0 f)
(t1 a)
(t2 b)
(t3 c))
(t0 t1 t2 t3))
使用新符号 t0
到 t3
。
您提出的情况还不够普遍,不足以作为标准库中的一项功能,特别是考虑到 let*
的解决方法非常简单。此外,该语言通过其 macro-writing 设施使您能够轻松地为自己提供此功能,这意味着它应该出现在标准库中的理由更少。如果您发现自己经常需要这样做,请编写一个宏作为您的库的一部分。