Name: Anonymous 2009-12-29 23:30
The Society of Invasive Cardovascular Professionals
;; There is exactly one solution, regardless of whether or not we know Mary Ann's
;; last name. Lorna's Father is Mr Hall
;; Name Daughter Ship
;; Mr Moore Mary Ann Lorna
;; Sir Barnacle Melissa Gabrielle
;; Colonel Downing Rosalind Melissa
;; Mr Hall Lorna Rosalind
;; Dr Parker Gabrielle Mary Ann
;; The program that generates this answer is
(require (planet murphy/amb:1:1/amb))
(define (lornas-father)
(let ((mr-moores-ship 'lorna)
(mr-moores-daughter 'mary-ann)
(sir-barnacles-ship 'gabrielle)
(sir-barnacles-daughter 'melissa))
(let ((colonel-downings-ship 'melissa)
(colonel-downings-daughter (amb 'mary-ann 'gabrielle 'lorna 'rosalind 'melissa)))
(amb-assert (not (eq? colonel-downings-ship colonel-downings-daughter)))
(let ((mr-halls-ship 'rosalind)
(mr-halls-daughter (amb 'mary-ann 'gabrielle 'lorna 'rosalind 'melissa)))
(amb-assert (not (eq? mr-halls-ship mr-halls-daughter)))
(let ((dr-parkers-ship (amb 'mary-ann 'gabrielle 'lorna 'rosalind 'melissa))
(dr-parkers-daughter (amb 'mary-ann 'gabrielle 'lorna 'rosalind 'melissa)))
(amb-assert (not (eq? dr-parkers-ship dr-parkers-daughter)))
(amb-assert (distinct? (list mr-moores-ship
sir-barnacles-ship
colonel-downings-ship
mr-halls-ship
dr-parkers-ship)))
(amb-assert (distinct? (list mr-moores-daughter
sir-barnacles-daughter
colonel-downings-daughter
mr-halls-daughter
dr-parkers-daughter)))
(let ((gabrielles-dads-ship
(cond ((eq? 'gabrielle mr-moores-daughter) mr-moores-ship)
((eq? 'gabrielle sir-barnacles-daughter) sir-barnacles-ship)
((eq? 'gabrielle colonel-downings-daughter) colonel-downings-ship)
((eq? 'gabrielle mr-halls-daughter) mr-halls-ship)
((eq? 'gabrielle dr-parkers-daughter) dr-parkers-ship))))
(amb-assert (eq? dr-parkers-ship gabrielles-dads-ship))
(cond ((eq? 'lorna mr-moores-daughter) 'mr-moore)
((eq? 'lorna colonel-downings-daughter) 'colonel-dowling)
((eq? 'lorna sir-barnacles-daughter) 'sir-barnacle)
((eq? 'lorna mr-halls-daughter) 'mr-hall)
((eq? 'lorna dr-parkers-daughter) 'dr-parker))))))))
(define (distinct? items)
(cond ((null? items) true)
((null? (cdr items)) true)
((member (car items) (cdr items)) false)
(else (distinct? (cdr items)))))
(amb 'mary-ann 'gabrielle 'lorna 'rosalind 'melissa) and including a (amb-assert (not (eq? mr-moores-daughter mr-moores-ship)))