当前位置:  开发笔记 > 编程语言 > 正文

SICP练习1.3请求评论

如何解决《SICP练习1.3请求评论》经验,为你挑选了4个好方法。



1> 小智..:

仅使用本书那一点提出的概念,我会这样做:

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

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

(define (min x y) (if (< x y) x y))

(define (max x y) (if (> x y) x y))

(define (sum-squares-2-biggest x y z)
  (sum-of-squares (max x y) (max z (min x y))))



2> Chris Jester..:

big被称为max.当它存在时使用标准库功能.

我的方法不同.我只需添加所有三个的正方形,然后减去最小的正方形,而不是大量的测试.

(define (exercise1.3 a b c)
  (let ((smallest (min a b c))
        (square (lambda (x) (* x x))))
    (+ (square a) (square b) (square c) (- (square smallest)))))

当然,无论您喜欢这种方法还是一堆if测试,都取决于您.


使用SRFI 95的替代实现:

(define (exercise1.3 . args)
  (let ((sorted (sort! args >))
        (square (lambda (x) (* x x))))
    (+ (square (car sorted)) (square (cadr sorted)))))

如上所述,但作为一个单行(感谢synx @ freenode #scheme); 还需要SRFI 1和SRFI 26:

(define (exercise1.3 . args)
  (apply + (map! (cut expt <> 2) (take! (sort! args >) 2))))


我认为代码应首先优化清晰度,然后再提高性能.但是,我愿意接受合理的人可以对此表示不同意见.:-)

3> Bill the Liz..:

我用下面的代码,它使用内置的做到了min,maxsquare程序.它们非常简单,只能使用文本中引入的内容.

(define (sum-of-highest-squares x y z)
   (+ (square (max x y))
      (square (max (min x y) z))))



4> Scott Hoffma..:

这样的事情怎么样?

(define (p a b c)
  (if (> a b)
      (if (> b c)
          (+ (square a) (square b))
          (+ (square a) (square c)))
      (if (> a c)
          (+ (square a) (square b))
          (+ (square b) (square c)))))

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有