gpt4 book ai didi

方案评审顺序标准

转载 作者:行者123 更新时间:2023-12-01 06:11:41 24 4
gpt4 key购买 nike

我正在为一个类编写一个程序,用一个新变量替换最左边出现的一个变量。 (它实际上也允许您自己提供等价关系)。问题是,在 Chez Scheme 8.2 中,如果最左边的出现在列表中,这将替换最右边的出现。我们使用运行某个版本的方案(我不确定是哪个版本)的服务器,并且在服务器上它正确地替换了最左边的事件。下面是代码:

(define subst-leftmost
(lambda (new old ls proc)
(let ([keep-going? #t])
(letrec ([helper
(lambda (ls)
(cond [(null? ls) ls]
[(or (pair? (car ls)) (null? (car ls)))
(cons (helper (car ls)) (helper (cdr ls)))]
[(and keep-going? (proc old (car ls)))
(set! keep-going? #f) (cons new (cdr ls))]
[else (cons (car ls) (helper (cdr ls)))]))]) (helper ls))))

这样调用:(subst-leftmost 'x 'a '(d b c (a) b a) eq?) 它应该产生输出 (d b c (x) b a),并在服务器上执行。然而,在 Chez 方案中,它产生 (d b c (a) b x)。我认为差异是由于行

[(or (pair? (car ls)) (null? (car ls)))
(cons (helper (car ls)) (helper (cdr ls)))]

以未设置的顺序评估汽车的助手和 cdr 的助手。

我的问题是:哪个版本的方案符合标准,我如何修改我的代码以使其在两个版本中都能正常工作?

(我已经和我的教授谈过这个问题了。他将在周一在类里面就此发表演讲,一旦他能考虑一下,但我很好奇。我也已经得到了作业的满分,所以在这方面不要担心帮助我的道德问题。)

最佳答案

没有,抱歉。 Here's the relevant legalese.如果您需要按特定顺序计算子表达式,请使用 LET 或 LET*。

关于方案评审顺序标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5521920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com