定义三个元素的间隔列表?

时间:2012-09-16 15:08:45

标签: scheme

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

(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))))))

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

1 个答案:

答案 0 :(得分: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]