gpt4 book ai didi

function - Scheme函数是一种衬垫吗?

转载 作者:行者123 更新时间:2023-12-03 22:16:00 28 4
gpt4 key购买 nike

我正在关注计算机程序的结构和解释,在尝试解决 Ex 1.3 时,我第一次尝试得到以下代码:

(define (sumsq a b c)(
(define highest (if (> (if (> a b) a b) (if (> a c) a c)) (if (> a b) a b) (if (> a c) a c)))
(define second_h (if (> (if (> a b) b a) (if (> a c) c a)) (if (> a b) b a) (if (> a c) c a)))
(+ (* highest highest) (* second_h second_h)))

它不起作用,我查找了解决方案并在 SICP Wiki 找到了它们。
;; ex 1.3
;; implemented using only techniques covered to this point

(define (square x) (* x x))

(define (sum-of-squares x y)
(+ (square x) (square y)))

(define (largest-two-of-three x y z)
(if (>= x y)
(sum-of-squares x (if (>= y z) y z))
(sum-of-squares y (if (>= x z) x z))))

不同之处在于我使用多个语句来定义变量,然后对平方求和,而正确的方法是将我的每一行定义为函数。

Scheme 中的函数是一个衬垫吗?还是我错过了整件事?

最佳答案

您应该使用适当的缩进和换行符来概览您的程序流程。你的第一个提案是这样的:

(定义(sumsq a b c)
((定义最高
(如果(>(如果(> a b)a b)
(如果 (> a c) a c))
(如果 (> a b) a b)
(如果 (> a c) a c)))
(定义第二个-h
(如果 (> (如果 (> a b) b a)
(如果 (> a c) c a))
(如果 (> a b) b a)
(如果 (> a c) c a)))
(+ (* 最高最高)
(* second-h second-h)))

首先要注意:括号不匹配;打开的比关闭的多。仔细检查发现第二行的一个左括号是错误的。顺便说一句,这是在您的第一行末尾以某种方式悬空的那个。我敢猜测,当您尝试对此进行评估时,什么也没有发生,因为读者在等待语句的结尾。

适当的缩进非常重要。我认为 SICP 没有明确解释它,尽管示例通常是这样完成的。我找到了一个风格指南 here .

第二个观察:你重复了很多。在所有嵌套的 if 中陈述,我不确定你是否真的得到了正确的值(value)观。查看您找到的解决方案,了解如何大大简化此问题。

您试图通过提供子结果名称来打破复杂性。分解复杂性是好的,但通常最好不要命名结果,而是命名概念。想想你做什么,然后命名这些事件。这些是函数,它们构成了您最终几乎可以轻松解决问题的语言。

关于function - Scheme函数是一种衬垫吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/502968/

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