;;; q2.41
;;3つの組み合わせを作ります
(define (make-trio n)
  (flatmap
   (lambda (i)
     (flatmap
      (lambda (j)
        (map
         (lambda (k)
           (list k j i))
         (enumerate-interval 1 (- j 1))))
      (enumerate-interval 1 (- i 1))))
   (enumerate-interval 1 n))
  )
                                        ;(caddr (list 1 3 4))
                                        ;(make-trio 4);=>おk

;;合計が引数と一致するか?
(define (equal-sum-of-3? ans ls)
  (= ans (accumulate + 0 ls))
  )
                                        ;(equal-sum-of-3? 5 (list 1 2 3));=>#f ok
                                        ;(equal-sum-of-3? 6(list 1 2 3));=>#t ok

;;3つと合計
(define (make-sum-of-3-sum ls)
  (list (car ls)
        (cadr ls)
        (caddr ls)
        (+ (car ls) (cadr ls) (caddr ls))
        )
  )

;;make-trioでgenてfilterに通した後make-su..で整形した物をmap
(define (trio3 n ans)
  (map
   make-sum-of-3-sum
   (filter
    (lambda (ls)
      (equal-sum-of-3? ans ls))
    (make-trio n)
    )
   )
  )
;;usageとか
(trace equal-sum-of-3?)
(trace filter)
(car(make-trio 6));=>(1 2 3)とか おk
(car(cdr(make-trio 6)));=>(1 2 4)とか おk
(trio3 8 8)

;;; q2.42 問題読むのがめんどい=>逃亡
;;; q2.43 問題を読むのがめんどい=>逃亡

あああああああああ