定义一个过程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))))))
我正朝着正确的方向前进吗?或者我的逻辑是完全错误的?
答案 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]