-2

数直線上の [a, b] 間隔 (a < b) を表す数の 2 要素リストを取る手続き trisket を定義します。間隔の 3 つの要素のリストを返します。これは、指定された間隔を 3 つの等しい長さに分割した結果です。すなわち

(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

これまでのソリューションは正しい方向に進んでいません。まず、提供された入力から、 2つのパラメーターではなく、2つの要素のリストを含む単一のパラメーターを受け取る必要があります。また、一方が他方よりも小さいかどうかを確認する必要はありません(誤った入力を受け取ると予想される場合を除き、エラーチェックとしてのみ)。

間隔を3つの部分に分割するために何をする必要があるかを考えてみましょう。開始するためのソリューションの一般的な構造は次のとおりです(正しい入力を想定)。自分で空欄に記入してください。

(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 に答える