diff options
author | rsiddharth <s@ricketyspace.net> | 2019-07-15 19:21:01 -0400 |
---|---|---|
committer | rsiddharth <s@ricketyspace.net> | 2019-07-15 19:21:01 -0400 |
commit | 6bf176f3e091328ceb43de82b6514a23ccef755e (patch) | |
tree | f13a92b052f821f0844c77f67e7f9d04fc208b6b | |
parent | a2fc1fda91fbae99f3f14b3370ccd67871ac6c87 (diff) |
two/twentynine.scm: Add mobile-balanced?
* net/ricketyspace/sicp/two/twentynine.scm (has-submobile?)
(torque, mobile-balanced?): New functions.
-rw-r--r-- | net/ricketyspace/sicp/two/twentynine.scm | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/net/ricketyspace/sicp/two/twentynine.scm b/net/ricketyspace/sicp/two/twentynine.scm index 8e1aaa2..8b763ea 100644 --- a/net/ricketyspace/sicp/two/twentynine.scm +++ b/net/ricketyspace/sicp/two/twentynine.scm @@ -7,7 +7,8 @@ right-branch branch-length branch-structure - total-weight)) + total-weight + mobile-balanced?)) (define (make-mobile left right) (list left right)) @@ -37,6 +38,25 @@ (+ (branch-weight (left-branch mobile)) (branch-weight (right-branch mobile)))) +(define (has-submobile? branch) + (not (number? (branch-structure branch)))) + +(define (torque branch) + (* (branch-length branch) + (branch-weight branch))) + +(define (mobile-balanced? m) + (let ((lb (left-branch m)) + (rb (right-branch m))) + (and + (cond ((has-submobile? lb) + (mobile-balanced? (branch-structure lb))) + (else #t)) + (cond ((has-submobile? rb) + (mobile-balanced? (branch-structure rb))) + (else #t)) + (= (torque lb) (torque rb))))) + ;;; Guile REPL ;;; ;;; scheme@(guile-user)> (make-mobile |