Plan3 Tests

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "add.n3 - Add Numbers Together"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

add doc "Two valued version of the builtin add function"; 
 def ((p q) 
   (add p q)
 ) .

main script (
   (say (add 35 150))
) .

# EOF

- add.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "argv.n3 - Print Out Argv Value 0"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (say (argv 0))
   (say (argv 1))
) .

# EOF

- argv.n3

@keywords .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "chain.n3 - Quoted Arguments Test"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

chain def (((list a) (list b))
   (say a)
   (say b)
) .

date def (()
   (say "Date:")
   (return "2007-10-25")
) .

time def (()
   (say "Time:")
   (return "12:25 PM")
) .

main script ((chain date time)) .

# EOF

- chain.n3

@keywords .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "chain.n3 - Quoted Arguments Test"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

chain def (((list a) (list b))
   (say (a))
   (say (b))
) .

date def (()
   (say "Date:")
   (return "2007-10-25")
) .

time def (()
   (say "Time:")
   (return "12:25 PM")
) .

main script ((chain date time)) .

# EOF

- chain2.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "dbslurp.n3 - DBPedia Slurp"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

data def (()
   (var resources (list))
   (select ?s ?p ?o where { ?s ?p ?o }
      (for t in (list ?s ?p ?o)
          (if (startswith t "http://dbpedia.org/resource/")
              (push t resources))))
   (return resources)
) .

main script (
   (for resource in (data)
      (store (semantics resource)))
   (output)
) .

# EOF

- dbslurp.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix db: <http://dbpedia.org/property/> .

<> doc "dbslurp2.n3 - DBPedia Slurp 2"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

data def (()
   (var resources (list))
   (select ?s ?p ?o where { ?s ?p ?o }
      (for t in (list ?s ?p ?o)
          (if (startswith t "http://dbpedia.org/resource/")
              (push t resources))))
   (return resources)
) .

main script (
   (var names (list))
   (for resource in (data)
      (push ( (semantics resource)))
   (output)
) .

# EOF

- dbslurp2.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "dbslurp3.n3 - DBPedia Slurp 3"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (select ?s ?p ?o where { ?s ?p ?o }
      (for t in (list ?s ?p ?o)
          (if (startswith t "http://dbpedia.org/resource/")
              (store (semantics t)))))
   (output)
) .

# EOF

- dbslurp3.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix u: <delete.n3#> .

<> doc "delete.n3 - Delete a Statement"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (store stdin)
   (delete { ?s ?p u:Test })
   (output)
) .

# EOF

- delete.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix log: <http://www.w3.org/2000/10/swap/log#> .

<> doc "double.n3 - Double Call Test"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

shout def ((arg)
   (out arg) (say "!")
) .

main script (
   (shout "Yo")
   (shout "Dude")
) .

# EOF

- double.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "join.n3 - Join and Say Hello World"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (dump "program")
) .

# EOF

- dump.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix u: <friends.n3#> .

<> doc "foaf.n3 - Print a List of Friends"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

# @forSome test .
main script (
   (say "<ul>")
   (store (semantics <http://inamidst.com/sbp/foaf.rdf>))
   (var names (select ?name where { [ foaf:name "Sean B. Palmer"; 
                                      foaf:knows [ foaf:name ?name ] ]}))
   (for name in (sort names) 
      (say ("<li>" name "</li>")))
   (say "</ul>")
) .

# EOF

- foaf.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix u: <friends.n3#> .

<> doc "foaf.n3 - Print a List of Friends"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (store (semantics <http://inamidst.com/sbp/foaf.rdf>))
   (var Q {[ foaf:name "Sean B. Palmer"; 
             foaf:knows [ foaf:name ?name ] ]})
   (for name in (sort (select ?name where Q)) 
      (say name))
) .

# EOF

- foaf2.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix u: <friends.n3#> .

<> doc "foaf.n3 - Print a List of Friends"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (store <http://inamidst.com/sbp/foaf.rdf>)
   (var Q {[ foaf:name "Sean B. Palmer"; 
             foaf:knows [ foaf:name ?name ] ]})
   (for name in (sort (select ?name where Q)) 
      (say name))
) .

# EOF

- foaf3.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix u: <friends.n3#> .

<> doc "friends.n3 - Print a List of Friends"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (say "<ul>")
   (for name in (select ?name where { ?f u:friend ?name }) 
      (say ("<li>" name "</li>")))
   (say "</ul>")
) .

# EOF

- friends.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix u: <friends.n3#> .

<> doc "friends2.n3 - Print a List of Friends"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (say "<ul>")
   (select ?name where { ?f u:friend ?name } 
      (say ("<li>" ?name "</li>")))
   (say "</ul>")
) .

# EOF

- friends2.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix e: <grep#> .
@prefix i: <grep.n3#> .

<> doc "grep.n3 - Search Files for Pattern"; 
   usage ("grep.n3" opts "pattern" "filenames+" 
          ("-h" "--help" "Display a help message")
          ("-t" "--test" "Perform builtin code tests")); 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

e:grep def ((i:filenames i:pattern) 
   (doc "Grep through filenames for pattern")
   (example (e:grep ("tag:pluvo.org,2006:words") "ria")
            (prints "20. Thesmophoriazousae"))
   (for i:line (lines i:filenames)
      (if (search i:pattern i:line) do (out i:line))) .

e:args main 
   ((if (arg "--help") or (not args) do (help))
    (if (arg "--test") do (check e:grep) (quit))
    (e:grep args.filenames args.pattern)) .

# EOF

- grep.p3.n3

<> :doc "grep.n3 - Search Files for Pattern"; 
   dc:author [ foaf:name "Sean B. Palmer"; 
               foaf:homepage <http://inamidst.com/sbp/> ]; 
   :usage ("grep.n3" :options "pattern" "filenames+" 
           "-h/--help 'Display a help message'"
           "-t/--test 'Perform builtin code tests'") .

_:grep :def ((_:filenames _:pattern) 
   (:Comment "Grep through filenames for pattern)
   (:Example (_:grep ("tag:pluvo.org,2006:words") "ria")
             (:prints "20. Thesmophoriazousae"))
   (:for _:line (:lines _:filenames)
         ((:Regexp _:pattern) _:line (:out _:line)))

_:main :main ((_:argv)
   (or (:Arg "--help") (:not :args) (:help))
   ((:Arg "--test") (:check _:grep) (_:quit))
   (_:grep (:args!"filenames") (:args!"pattern")))

# EOF

- grep.plan3.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "hello.n3 - Hello World Test"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

hello def (() (say "Hello, world!")) .
main script ((hello)) .

# EOF

- hello.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "index.n3 - List Index Test"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (var letters (list "p" "q" "r" "s" "t"))
   (say (letters 1))
) .

# EOF

- index.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "join.n3 - Join and Say Hello World"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (var output (join " " ("Hello" "world!")))
   (say output)
) .

# EOF

- join.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "out.n3 - Output Test"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (out "Hello world!")
   (say)
) .

# EOF

- out.n3

@prefix log: <http://www.w3.org/2000/10/swap/log#> .

:chaffy a log:Chaff .

:p :q :r .

:chaffy :b :c .

:a :chaffy :c .

:notchaffy :b :c .

:a :b :chaffy .

# EOF

- purge-example.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix log: <http://www.w3.org/2000/10/swap/log#> .

<> doc "purge.n3 - Do the Equivalent of --purge"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

purge def (()
   (select ?p where { ?p a log:Chaff }
       ((delete { ?p [] [] })
        (delete { [] ?p [] })
        (delete { [] [] ?p })))
) .

main script (
   (store <purge-example.n3>)
   (purge)
   (output)
) .

# EOF

- purge.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "query.n3 - Query Test"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (query { <> doc ?s })
) .

# EOF

- query.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix p3: <http://example.org/ns/plan3-funcs#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "say.n3 - Function Disambiguation Test"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

say def (()
   (p3:say "Hello world!")
) .

main script ((say)) .

# EOF

- say.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "select.n3 - Query Select Test"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

@forAll s.
main script (
   (select s from { <> doc s })
) .

# EOF

- select.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "select2.n3 - Query Select Test"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (var docs (select ?s from program where { <> doc ?s }))
   (say (docs 0))
) .

# EOF

- select2.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "stdin.n3 - Read Stdin to the Working Context"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (store stdin)
   (select ?s ?p ?o where { ?s ?p ?o }
      (say ?s ?p ?o))
) .

# EOF

- stdin.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "dbslurp3.n3 - DBPedia Slurp 3"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (store { { ?s a Test } => { ?s a Tested } . something a Test })
   (think)
   (select ?tested where { ?tested a Tested } 
      (say "Tested: " ?tested))
) .

# EOF

- think.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<> doc "types.n3 - Print Out Various Types"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

main script (
   (out "<http://example.org/>: ") (type <http://example.org/>)
   (out "<http://example.org/#frag>: ") (type <http://example.org/#frag>)
   (out "_:test: ") (type _:test)
   (out "\"test\": ") (type "test")
   (out "?test: ") (type ?test)
   (out "{ p q r }: ") (type { p q r })
   (out "(): ") (type ())
   (out "(p q r): ") (type (p q r))
   (out "1: ") (type 1)
   (out "1.1: ") (type 1.1)
) .

# EOF

- types.n3

@keywords a .
@prefix : <http://example.org/ns/plan3#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix log: <http://www.w3.org/2000/10/swap/log#> .

<> doc "values.n3 - Dictionary-Like Behaviour"; 
   dc:author [ foaf:homepage <http://inamidst.com/sbp/> ] .

get def ((subj pred)
   ((select ?obj where { subj pred ?obj }) 0)
) .

set def ((subj pred obj)
   (delete { subj pred ?o })
   (store { subj pred obj })
) .

show def (()
   (select ?s ?p ?o where { ?s ?p ?o }
      (say ?s ?p ?o))
   (say)
) .

main script (
   (say "Setting: Bob friends 2")
   (set Bob friends 2)
   (out "get Bob friends: ") (say (get Bob friends))
   (say "Setting: Bob friends 3")
   (set Bob friends 3)
   (out "get Bob friends: ") (say (get Bob friends))
   (say "Working context: ") (show)
) .

# EOF

- values.n3