solution to 4.43
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Sun, 6 Jan 2013 17:01:00 +0000 (22:31 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Sun, 6 Jan 2013 17:58:00 +0000 (23:28 +0530)
src/sicp/ex4_43.rkt [new file with mode: 0644]

diff --git a/src/sicp/ex4_43.rkt b/src/sicp/ex4_43.rkt
new file mode 100644 (file)
index 0000000..0cbe9e6
--- /dev/null
@@ -0,0 +1,53 @@
+#lang racket
+
+(require "amb-eli.rkt")
+(require "distinct.rkt")
+
+#|
+
+Fathers: 
+
+1. Moore  - yatch - lorna
+2. Colonel Downing - melissa
+3. Mr. Hall - rosalind
+4. Sir Barnacle Hood (Melissa's father) - gabreille
+5. Dr. Parker - mary ann moore
+
+Daughters
+
+1. Mary Ann Moore
+2. Gabrielle
+3. Lorna
+4. Rosalind
+5. Melissa's father is Sir Barnacle Hood
+
+|#
+
+(define (get-yatch father)
+  (case (string->symbol (string-append (symbol->string father) "-y"))
+    [(moore-y) 'lorna]
+    [(downing-y) 'melissa]
+    [(hall-y) 'rosa]
+    [(barnacle-y) 'gab]
+    [(parker-y) 'mary]))
+
+(define (father x) (first x))
+(define (daughter x) (second x))
+(define (yat x) (third x))
+
+(define (yatch)
+  (let ([moore (list (amb 'mary) 'lorna)]
+        [downing  (list 'downing (amb 'gab 'lorna 'rosa) 'melissa)]
+        [hall (list 'hall (amb 'gab 'lorna) 'rosa)]
+        [barnacle (list 'barnacle (amb 'melissa) 'gab)]
+        [parker (list 'parker (amb 'gab 'lorna 'rosa) 'mary)])
+    (let ([gab-father (amb hall downing parker)]
+          [lorna-father (amb hall downing parker)])
+      (assert (eq? (daughter gab-father) 'gab))
+      (assert (eq? (daughter lorna-father) 'lorna))
+      (assert (eq? (yat gab-father) (daughter parker)))
+      (assert (not (eq? (daughter lorna-father) (yat lorna-father))))
+      (assert (not (eq? (daughter gab-father) (yat gab-father))))
+      lorna-father)))
+
+(yatch)