#lang racket
(require "util/p-list.rkt") ;;; 属性リストユーティリティを置いたパスに従う
(putprop! 'Harry '(Jane Bill) '#:children)
(putprop! 'Jane '(Joe Diane) '#:children)
(putprop! 'Bill '(Julia Mike) '#:children)
(putprop! 'Julia '(Frank Suzan) '#:children)
(putprop! 'Frank '(Anne) '#:children)
;;; 展開関数
(define (expand person)
(keyword-get person '#:children '()))
;;; 深さ優先探索
(define (depth person1 person2)
(let loop ((stack (expand person1)))
(if (null? stack)
null
(let ((person (car stack)))
(or (eq? person person2)
(loop (append (expand person) (cdr stack))))))))
I2xhbmcgcmFja2V0CgoocmVxdWlyZSAidXRpbC9wLWxpc3Qucmt0IikgOzs7IOWxnuaAp+ODquOCueODiOODpuODvOODhuOCo+ODquODhuOCo+OCkue9ruOBhOOBn+ODkeOCueOBq+W+k+OBhgoKKHB1dHByb3AhICdIYXJyeSAnKEphbmUgQmlsbCkgJyM6Y2hpbGRyZW4pCihwdXRwcm9wISAnSmFuZSAnKEpvZSBEaWFuZSkgJyM6Y2hpbGRyZW4pCihwdXRwcm9wISAnQmlsbCAnKEp1bGlhIE1pa2UpICcjOmNoaWxkcmVuKQoocHV0cHJvcCEgJ0p1bGlhICcoRnJhbmsgU3V6YW4pICcjOmNoaWxkcmVuKQoocHV0cHJvcCEgJ0ZyYW5rICcoQW5uZSkgJyM6Y2hpbGRyZW4pCgo7Ozsg5bGV6ZaL6Zai5pWwCihkZWZpbmUgKGV4cGFuZCBwZXJzb24pCiAgKGtleXdvcmQtZ2V0IHBlcnNvbiAnIzpjaGlsZHJlbiAnKCkpKQoKOzs7IOa3seOBleWEquWFiOaOoue0ogooZGVmaW5lIChkZXB0aCBwZXJzb24xIHBlcnNvbjIpCiAgKGxldCBsb29wICgoc3RhY2sgKGV4cGFuZCBwZXJzb24xKSkpCiAgICAoaWYgKG51bGw/IHN0YWNrKQogICAgICAgIG51bGwKICAgICAgICAobGV0ICgocGVyc29uIChjYXIgc3RhY2spKSkKICAgICAgICAgIChvciAoZXE/IHBlcnNvbiBwZXJzb24yKQogICAgICAgICAgICAgIChsb29wIChhcHBlbmQgKGV4cGFuZCBwZXJzb24pIChjZHIgc3RhY2spKSkpKSkpKQ==