gpt4 book ai didi

方案:评估逻辑表达式列表

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:50 25 4
gpt4 key购买 nike

我正在尝试在 Scheme 中编写一个程序,该程序接受一个表示逻辑表达式的列表并计算整个表达式。我需要返回一个列表,其中包含在达到最终值之前完成的每个中间结果。输入看起来像 '(((~ #t) V #t V (#f & (~ #f))) & #t & (~ (#t V #f))) 其中 & => 和 V => 或者,和 ~ => 不是。该输入的输出应类似于“(#f#t #f#f#f#f#t #f#f),最右边是最终结果,最左边是完成的第一个评估。”

我有一个可以评估列表的函数,但是我一直无法弄清楚如何构建历史列表。这是我到目前为止获得的代码。

(define atom?
(lambda (x)
(and (not (pair? x)) (not (null? x)))))

(define evaluate1
(lambda (lst rst)
(cond
((null? lst) 'ErrEmptyList)
((equal? (cadr lst) 'V) (cons rst (or (car lst) (caddr lst))))
((equal? (cadr lst) '&) (cons rst (and (car lst) (caddr lst)))))))

(define evaluate
(lambda (lst)
(cond
((null? lst) 'ErrEmptyList)
((null? (cdr lst))
(cond
((atom? (car lst)) (car lst))
(else
(evaluate (car lst)))))
((equal? (car lst) '~) (not (cadr lst)))
((and (and (atom? (car lst)) (atom? (caddr lst))) (null? (cdddr lst))) (evaluate1 lst))
(else
(cond
((atom? (car lst)) (evaluate (flatten (cons (cons (car lst) (cadr lst)) (evaluate (cddr lst))))))
(else
(evaluate (flatten (cons (cons (evaluate (car lst)) (cadr lst)) (list (evaluate (cddr lst))))))))))))

对于给定的示例,我的代码只是返回 #f 的结果,我如何构建要返回的结果列表,而不仅仅是最终结果。我是计划的新手,非常感谢任何指导或帮助。

最佳答案

如果我没看错的话,这个问题本质上是“商店传递风格”的一个例子。 (哦,没有关于 SPS 的维基百科条目?)这个想法是每个函数都必须返回一个历史列表,并且每个调用都必须包含一个。

开发它的最佳方法是遵循(如何设计程序)[ http://www.htdp.org/] .我无法用一段话来概括它,但除此之外,它要求您在编写程序之前先编写测试。

最后,如果您使用的是 Racket,match 表单将使您的代码更具可读性。

关于方案:评估逻辑表达式列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35304267/

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