Add prolog module
This commit is contained in:
68
test.scm
68
test.scm
@@ -1,7 +1,8 @@
|
||||
(use-modules (d-)
|
||||
(d- json)
|
||||
(srfi srfi-1)
|
||||
(d- test))
|
||||
(d- json)
|
||||
(srfi srfi-1)
|
||||
(d- test)
|
||||
(d- prolog))
|
||||
|
||||
(define-test-suite "~>"
|
||||
(define-test "unwrapped"
|
||||
@@ -145,14 +146,57 @@
|
||||
(define-test "object"
|
||||
(assert-equal '() (json "{}"))
|
||||
(assert-equal '((cat . 1)
|
||||
(bat . #t)
|
||||
(rat . "yessir"))
|
||||
(json "{\"cat\": 1, \"bat\": true, \"rat\": \"yessir\"}"))
|
||||
(bat . #t)
|
||||
(rat . "yessir"))
|
||||
(json "{\"cat\": 1, \"bat\": true, \"rat\": \"yessir\"}"))
|
||||
(assert-equal '((butter . 1)
|
||||
(brownie))
|
||||
(json "{\"butter\": 1, \"brownie\": {}}"))
|
||||
(brownie))
|
||||
(json "{\"butter\": 1, \"brownie\": {}}"))
|
||||
(assert-equal '(1 2)
|
||||
(json "{\"hello\": 1, \"world\": 2}"
|
||||
#:obj-acons
|
||||
(lambda (_key value rest)
|
||||
(cons value rest))))))
|
||||
(json "{\"hello\": 1, \"world\": 2}"
|
||||
#:obj-acons
|
||||
(lambda (_key value rest)
|
||||
(cons value rest))))))
|
||||
|
||||
(define-test-suite "prolog"
|
||||
;; Stolen verbatim from PAIP (Norvig 92)
|
||||
(define-test "zebra"
|
||||
(<- (member ?item (?item . ?rest)))
|
||||
(<- (member ?item (?x . ?rest)) (member ?item ?rest))
|
||||
|
||||
(<- (nextto ?x ?y ?list) (iright ?x ?y ?list))
|
||||
(<- (nextto ?x ?y ?list) (iright ?y ?x ?list))
|
||||
|
||||
(<- (iright ?left ?right (?left ?right . ?rest)))
|
||||
(<- (iright ?left ?right (?x . ?rest))
|
||||
(iright ?left ?right ?rest))
|
||||
|
||||
(<- (= ?x ?x))
|
||||
|
||||
(<- (zebra ?h ?w ?z)
|
||||
(= ?h ((house norwegian ? ? ? ?)
|
||||
?
|
||||
(house ? ? ? milk ?) ? ?))
|
||||
(member (house englishman ? ? ? red) ?h)
|
||||
(member (house spaniard dog ? ? ?) ?h)
|
||||
(member (house ? ? ? coffee green) ?h)
|
||||
(member (house ukrainian ? ? tea ?) ?h)
|
||||
(iright (house ? ? ? ? ivory)
|
||||
(house ? ? ? ? green) ?h)
|
||||
(member (house ? snails winston ? ?) ?h)
|
||||
(member (house ? ? kools ? yellow) ?h)
|
||||
(nextto (house ? ? chesterfield ? ?)
|
||||
(house ? fox ? ? ?) ?h)
|
||||
(nextto (house ? ? kools ? ?)
|
||||
(house ? horse ? ? ?) ?h)
|
||||
(member (house ? ? luckystrike orange-juice ?) ?h)
|
||||
(member (house japanese ? parliaments ? ?) ?h)
|
||||
(nextto (house norwegian ? ? ? ?)
|
||||
(house ? ? ? ? blue) ?h)
|
||||
|
||||
(member (house ?w ? ? water ?) ?h)
|
||||
(member (house ?z zebra ? ? ?) ?h))
|
||||
(define get-solution (?- (zebra ? ?water-drinker ?zebra-owner)))
|
||||
(define solution (get-solution))
|
||||
(assert-equal 'norwegian (assq-ref solution '?water-drinker))
|
||||
(assert-equal 'japanese (assq-ref solution '?zebra-owner))))
|
||||
|
||||
Reference in New Issue
Block a user