-2

定义一个过程 triscet,它采用一个二元素数字列表,表示数字轴上的 [a, b] 区间,其中 a < b。返回一个由三个元素组成的区间列表,它是将给定区间分成三个相等长度的结果。IE

(trisect '(-4 8))
((-4 0) (0 4) (4 8))

帮助编写程序?

(define triscet
  (lambda '(a b)
   (if < a b)
    (cons (quotient a 3(cons (quotient b 3 ls))))))

我朝着正确的方向前进吗?还是我的逻辑完全错误?

4

1 回答 1

1

到目前为止,您的解决方案并未走上正轨。首先,从提供的输入中,您应该收到一个包含两个元素列表的参数,而不是两个参数。而且您不需要检查一个是否小于另一个(除非您希望收到不正确的输入,并且仅作为错误检查)。

让我们考虑一下需要做什么才能将区间分成三个部分。这是帮助您入门的解决方案的一般结构(假设输入正确),您自己填写空白:

(define (trisect interval)
  (let* ((start  <???>)  ; start of interval
         (end    <???>)  ; end of interval
         (offset <???>)) ; size of each chunk if we divide the interval in 3
    (list (list start <???>)  ; 1st subinterval: [start, start+offset]
          (list <???> <???>)  ; 2nd subinterval: [start+offset, start+2*offset]
          (list <???> end)))) ; 3rd subinterval: [start+2*offset, end]
于 2012-09-16T16:09:10.417 回答