Add exercise 4.38
This commit is contained in:
parent
34400a1bc4
commit
a16df8cca2
|
@ -14,5 +14,11 @@
|
|||
(amb (car items) (an-element-of (cdr items))))
|
||||
|
||||
(define (an-integer-starting-from n)
|
||||
(amb n (an-integer-starting-from (+ n 1))))))
|
||||
(amb n (an-integer-starting-from (+ n 1))))
|
||||
|
||||
(define (distinct? items)
|
||||
(cond ((null? items) true)
|
||||
((null? (cdr items)) true)
|
||||
((member (car items) (cdr items)) false)
|
||||
(else (distinct? (cdr items)))))))
|
||||
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
#lang sicp
|
||||
|
||||
(#%require "ambeval.rkt")
|
||||
|
||||
(define (multiple-dwelling)
|
||||
(let ((baker (amb 1 2 3 4 5))
|
||||
(cooper (amb 1 2 3 4 5))
|
||||
(fletcher (amb 1 2 3 4 5))
|
||||
(miller (amb 1 2 3 4 5))
|
||||
(smith (amb 1 2 3 4 5)))
|
||||
(require
|
||||
(distinct? (list baker cooper fletcher miller smith)))
|
||||
(require (not (= baker 5)))
|
||||
(require (not (= cooper 1)))
|
||||
(require (not (= fletcher 5)))
|
||||
(require (not (= fletcher 1)))
|
||||
(require (> miller cooper))
|
||||
;; (require (not (= (abs (- smith fletcher)) 1)))
|
||||
(require (not (= (abs (- fletcher cooper)) 1)))
|
||||
(list (list 'baker baker)
|
||||
(list 'cooper cooper)
|
||||
(list 'fletcher fletcher)
|
||||
(list 'miller miller)
|
||||
(list 'smith smith))))
|
||||
|
||||
;; Exercise 4.38: without the constraint that smith and fletcher do
|
||||
;; not live on adjacent floors, there are 5 solutions:
|
||||
|
||||
;;; Amb-Eval input:
|
||||
(multiple-dwelling)
|
||||
|
||||
;;; Starting a new problem
|
||||
;;; Amb-Eval value:
|
||||
((baker 1) (cooper 2) (fletcher 4) (miller 3) (smith 5))
|
||||
|
||||
;;; Amb-Eval input:
|
||||
try-again
|
||||
|
||||
;;; Amb-Eval value:
|
||||
((baker 1) (cooper 2) (fletcher 4) (miller 5) (smith 3))
|
||||
|
||||
;;; Amb-Eval input:
|
||||
try-again
|
||||
|
||||
;;; Amb-Eval value:
|
||||
((baker 1) (cooper 4) (fletcher 2) (miller 5) (smith 3))
|
||||
|
||||
;;; Amb-Eval input:
|
||||
try-again
|
||||
|
||||
;;; Amb-Eval value:
|
||||
((baker 3) (cooper 2) (fletcher 4) (miller 5) (smith 1))
|
||||
|
||||
;;; Amb-Eval input:
|
||||
try-again
|
||||
|
||||
;;; Amb-Eval value:
|
||||
((baker 3) (cooper 4) (fletcher 2) (miller 5) (smith 1))
|
||||
|
||||
;;; Amb-Eval input:
|
||||
try-again
|
||||
|
||||
;;; There are no more values of
|
||||
(multiple-dwelling)
|
Loading…
Reference in New Issue