factlog vocab ==> logic vocab

flac
kusumotonorio 2020-03-03 21:04:46 +09:00 committed by Steve Ayerhart
parent 8520361b0c
commit 241b902134
No known key found for this signature in database
GPG Key ID: 5BFD39C5359E967D
21 changed files with 92 additions and 92 deletions

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: tools.test factlog factlog.examples.factorial ; USING: tools.test logic logic.examples.factorial ;
IN: factlog.examples.factorial.tests IN: logic.examples.factorial.tests
{ { H{ { F 1 } } } } [ { factorial 0 F } query ] unit-test { { H{ { F 1 } } } } [ { factorial 0 F } query ] unit-test

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: factlog kernel assocs math ; USING: logic kernel assocs math ;
IN: factlog.examples.factorial IN: logic.examples.factorial
LOGIC-PREDS: factorial ; LOGIC-PREDS: factorial ;
LOGIC-VARS: N F N2 F2 ; LOGIC-VARS: N F N2 F2 ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: tools.test factlog lists factlog.examples.fib ; USING: tools.test logic lists logic.examples.fib ;
IN: factlog.examples.fib.tests IN: logic.examples.fib.tests
{ { H{ { L L{ 0 } } } } } [ { fibo 0 L } query ] unit-test { { H{ { L L{ 0 } } } } } [ { fibo 0 L } query ] unit-test

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: factlog kernel lists assocs math ; USING: logic kernel lists assocs math ;
IN: factlog.examples.fib IN: logic.examples.fib
LOGIC-PREDS: fibo ; LOGIC-PREDS: fibo ;
LOGIC-VARS: F F1 F2 N N1 L ; LOGIC-VARS: F F1 F2 N N1 L ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019 KUSUMOTO Norio. ! Copyright (C) 2019 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: tools.test factlog factlog.examples.fib2 ; USING: tools.test logic logic.examples.fib2 ;
IN: factlog.examples.fib2.tests IN: logic.examples.fib2.tests
{ { H{ { F 6765 } } } } [ { { H{ { F 6765 } } } } [
{ fibo 20 F } query { fibo 20 F } query

View File

@ -1,7 +1,7 @@
! Copyright (C) 2020 KUSUMOTO Norio. ! Copyright (C) 2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: factlog kernel lists assocs locals math ; USING: logic kernel lists assocs locals math ;
IN: factlog.examples.fib2 IN: logic.examples.fib2
LOGIC-PREDS: fibo ; LOGIC-PREDS: fibo ;
LOGIC-VARS: F F1 F2 N N1 N2 ; LOGIC-VARS: F F1 F2 N N1 N2 ;

View File

@ -1,8 +1,8 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: tools.test factlog factlog.examples.hanoi USING: tools.test logic logic.examples.hanoi
formatting sequences ; formatting sequences ;
IN: factlog.examples.hanoi.tests IN: logic.examples.hanoi.tests
{ t } [ { t } [
{ {

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: factlog kernel assocs math ; USING: logic kernel assocs math ;
IN: factlog.examples.hanoi IN: logic.examples.hanoi
LOGIC-PREDS: hanoi moveo informo ; LOGIC-PREDS: hanoi moveo informo ;
LOGIC-VARS: A B C M N X Y ; LOGIC-VARS: A B C M N X Y ;

View File

@ -1,8 +1,8 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: tools.test factlog lists factlog.examples.hanoi2 USING: tools.test logic lists logic.examples.hanoi2
formatting sequences ; formatting sequences ;
IN: factlog.examples.hanoi2.tests IN: logic.examples.hanoi2.tests
{ t } [ { t } [
{ {

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: factlog lists sequences assocs formatting ; USING: logic lists sequences assocs formatting ;
IN: factlog.examples.hanoi2 IN: logic.examples.hanoi2
LOGIC-PREDS: hanoi write-move ; LOGIC-PREDS: hanoi write-move ;
LOGIC-VARS: A B C X Y Z ; LOGIC-VARS: A B C X Y Z ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: tools.test factlog lists factlog.examples.money ; USING: tools.test logic lists logic.examples.money ;
IN: factlog.examples.money.tests IN: logic.examples.money.tests
{ {
{ {

View File

@ -1,8 +1,8 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: factlog lists assocs sequences kernel math USING: logic lists assocs sequences kernel math
locals formatting io ; locals formatting io ;
IN: factlog.examples.money IN: logic.examples.money
LOGIC-PREDS: sumo sum1o digitsumo delo donaldo moneyo ; LOGIC-PREDS: sumo sum1o digitsumo delo donaldo moneyo ;
LOGIC-VARS: S E N D M O R Y A L G B T LOGIC-VARS: S E N D M O R Y A L G B T

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019 Your name. ! Copyright (C) 2019 Your name.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: tools.test factlog factlog.examples.zebra-short ; USING: tools.test logic logic.examples.zebra-short ;
IN: factlog.examples.zebra-short.tests IN: logic.examples.zebra-short.tests
{ {
{ H{ { X japanese } } H{ { X japanese } } } { H{ { X japanese } } H{ { X japanese } } }

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019 KUSUMOTO Norio. ! Copyright (C) 2019 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: factlog arrays ; USING: logic arrays ;
IN: factlog.examples.zebra-short IN: logic.examples.zebra-short
! Do the same as this Prolog program ! Do the same as this Prolog program
! !

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: tools.test factlog lists factlog.examples.zebra ; USING: tools.test logic lists logic.examples.zebra ;
IN: factlog.examples.zebra.tests IN: logic.examples.zebra.tests
{ {
{ {

View File

@ -3,8 +3,8 @@
! Zebra Puzzle: https://rosettacode.org/wiki/Zebra_puzzle ! Zebra Puzzle: https://rosettacode.org/wiki/Zebra_puzzle
USING: factlog lists ; USING: logic lists ;
IN: factlog.examples.zebra IN: logic.examples.zebra
LOGIC-PREDS: houseso neighboro zebrao watero nexto lefto ; LOGIC-PREDS: houseso neighboro zebrao watero nexto lefto ;
LOGIC-VARS: Hs A B Ls X Y ; LOGIC-VARS: Hs A B Ls X Y ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: tools.test factlog lists factlog.examples.zebra2 ; USING: tools.test logic lists logic.examples.zebra2 ;
IN: factlog.examples.zebra2.tests IN: logic.examples.zebra2.tests
{ {
{ {

View File

@ -1,7 +1,7 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: factlog lists ; USING: logic lists ;
IN: factlog.examples.zebra2 IN: logic.examples.zebra2
LOGIC-PREDS: existso righto middleo firsto nexto LOGIC-PREDS: existso righto middleo firsto nexto
houseso zebrao watero ; houseso zebrao watero ;

View File

@ -1,15 +1,15 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: arrays help.markup help.syntax kernel quotations sequences USING: arrays help.markup help.syntax kernel quotations sequences
prettyprint assocs math make lists urls factlog.private ; prettyprint assocs math make lists urls logic.private ;
IN: factlog IN: logic
HELP: !! HELP: !!
{ $var-description "The cut operator.\nUse the cut operator to suppress backtracking." } { $var-description "The cut operator.\nUse the cut operator to suppress backtracking." }
{ $examples { $examples
"In the following example, it is used to define that cats generally eat mice, but Tom does not." "In the following example, it is used to define that cats generally eat mice, but Tom does not."
{ $example { $example
"USING: factlog prettyprint ;" "USING: logic prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: is-ao consumeso ;" "LOGIC-PREDS: is-ao consumeso ;"
@ -96,7 +96,7 @@ HELP: =:=
{ "quot" quotation } { "quot" quotation }
{ "goal" logic-goal } { "goal" logic-goal }
} }
{ $description "The quotations takes an environment and returns two values. " { $snippet "=:=" } " returns the internal representation of the goal which returns t if values returned by the quotation are same numbers.\n" { $snippet "=:=" } " is intended to be used in a quotation. If there is a quotation in the definition of rule, factlog uses the internal definition of the goal obtained by calling it." } { $description "The quotations takes an environment and returns two values. " { $snippet "=:=" } " returns the internal representation of the goal which returns t if values returned by the quotation are same numbers.\n" { $snippet "=:=" } " is intended to be used in a quotation. If there is a quotation in the definition of rule, " { $snippet "logic" } " uses the internal definition of the goal obtained by calling it." }
{ $see-also (==) =\= } ; { $see-also (==) =\= } ;
HELP: =\= HELP: =\=
@ -104,7 +104,7 @@ HELP: =\=
{ "quot" quotation } { "quot" quotation }
{ "goal" logic-goal } { "goal" logic-goal }
} }
{ $description "The quotations takes an environment and returns two values. " { $snippet "=\\=" } " returns the internal representation of the goal which returns t if values returned by the quotation are numbers and are not same.\n" { $snippet "=\\=" } " is intended to be used in a quotation. If there is a quotation in the definition of rule, factlog uses the internal definition of the goal obtained by calling it." } { $description "The quotations takes an environment and returns two values. " { $snippet "=\\=" } " returns the internal representation of the goal which returns t if values returned by the quotation are numbers and are not same.\n" { $snippet "=\\=" } " is intended to be used in a quotation. If there is a quotation in the definition of rule, " { $snippet "logic" } " uses the internal definition of the goal obtained by calling it." }
{ $see-also (==) =:= } ; { $see-also (==) =:= } ;
HELP: LOGIC-PREDS: HELP: LOGIC-PREDS:
@ -112,7 +112,7 @@ HELP: LOGIC-PREDS:
{ $syntax "LOGIC-PREDS: preds... ;" } { $syntax "LOGIC-PREDS: preds... ;" }
{ $examples { $examples
{ $code { $code
"USE: factlog" "USE: logic"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: cato mouseo ;" "LOGIC-PREDS: cato mouseo ;"
@ -128,7 +128,7 @@ HELP: LOGIC-VARS:
{ $syntax "LOGIC-VARS: vars... ;" } { $syntax "LOGIC-VARS: vars... ;" }
{ $examples { $examples
{ $example { $example
"USING: factlog prettyprint ;" "USING: logic prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: mouseo ;" "LOGIC-PREDS: mouseo ;"
@ -145,7 +145,7 @@ HELP: %!
{ $syntax "%! comment !%" } { $syntax "%! comment !%" }
{ $examples { $examples
{ $example { $example
"USE: factlog" "USE: logic"
"%! I think that I shall never see" "%! I think that I shall never see"
" A proof lovely as a factlog. !%" " A proof lovely as a factlog. !%"
"" ""
@ -156,7 +156,7 @@ HELP: \+
{ $var-description "Express negation. \\+ acts on the goal immediately following it.\n" } { $var-description "Express negation. \\+ acts on the goal immediately following it.\n" }
{ $examples { $examples
{ $example { $example
"USING: factlog prettyprint ;" "USING: logic prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: cato mouseo creatureo ;" "LOGIC-PREDS: cato mouseo creatureo ;"
@ -187,7 +187,7 @@ HELP: __
{ $var-description "An anonymous logic variable.\nUse in place of a regular logic variable when you do not need its name and value." } { $var-description "An anonymous logic variable.\nUse in place of a regular logic variable when you do not need its name and value." }
{ $examples { $examples
{ $example { $example
"USING: factlog prettyprint ;" "USING: logic prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"SYMBOLS: Tom Jerry Nibbles ;" "SYMBOLS: Tom Jerry Nibbles ;"
@ -220,7 +220,7 @@ HELP: appendo
{ $syntax "{ appendo List1 List2 List1+List2 }" } { $syntax "{ appendo List1 List2 List1+List2 }" }
{ $examples { $examples
{ $example { $example
"USING: factlog lists prettyprint ;" "USING: logic lists prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"SYMBOLS: Tom Jerry Nibbles ;" "SYMBOLS: Tom Jerry Nibbles ;"
@ -268,7 +268,7 @@ HELP: clear-pred
{ $description "Clears all the definition information for the given logic predicate." } { $description "Clears all the definition information for the given logic predicate." }
{ $examples { $examples
{ $example { $example
"USING: factlog prettyprint ;" "USING: logic prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: mouseo ;" "LOGIC-PREDS: mouseo ;"
@ -293,7 +293,7 @@ HELP: fact
{ $description "Registers the fact to the end of the logic predicate that is in the head." } { $description "Registers the fact to the end of the logic predicate that is in the head." }
{ $examples { $examples
{ $code { $code
"USE: factlog" "USE: logic"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: cato mouseo ;" "LOGIC-PREDS: cato mouseo ;"
@ -318,7 +318,7 @@ HELP: facts
{ $description "Registers these facts to the end of the logic predicate that is in the head." } { $description "Registers these facts to the end of the logic predicate that is in the head." }
{ $examples { $examples
{ $code { $code
"USE: factlog" "USE: logic"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: cato mouseo ;" "LOGIC-PREDS: cato mouseo ;"
@ -338,18 +338,18 @@ HELP: is
{ "quot" quotation } { "dist" "a logic predicate" } { "quot" quotation } { "dist" "a logic predicate" }
{ "goal" logic-goal } { "goal" logic-goal }
} }
{ $description "Takes a quotation and a logic variable to be unified. Each of the two quotations takes an environment and returns a value. " { $snippet "is" } " returns the internal representation of the goal.\n" { $snippet "is" } " is intended to be used in a quotation. If there is a quotation in the definition of rule, factlog uses the internal definition of the goal obtained by calling it." } ; { $description "Takes a quotation and a logic variable to be unified. Each of the two quotations takes an environment and returns a value. " { $snippet "is" } " returns the internal representation of the goal.\n" { $snippet "is" } " is intended to be used in a quotation. If there is a quotation in the definition of rule, " { $snippet "logic" } " uses the internal definition of the goal obtained by calling it." } ;
HELP: invoke HELP: invoke
{ $values { $values
{ "quot" quotation } { "quot" quotation }
{ "goal" logic-goal } { "goal" logic-goal }
} }
{ $description "Creates a goal which uses the values of obtained logic variables. It can be used to add new rules to or drop rules from the database while a " { $link query } " is running.\nThe argument " { $snippet "quot" } " must not return any values, the created goal always return " { $link t } ".\n" { $snippet "invoke" } " is intended to be used in a quotation. If there is a quotation in the definition of rule, factlog uses the internal definition of the goal obtained by calling it." } { $description "Creates a goal which uses the values of obtained logic variables. It can be used to add new rules to or drop rules from the database while a " { $link query } " is running.\nThe argument " { $snippet "quot" } " must not return any values, the created goal always return " { $link t } ".\n" { $snippet "invoke" } " is intended to be used in a quotation. If there is a quotation in the definition of rule, " { $snippet "logic" } " uses the internal definition of the goal obtained by calling it." }
{ $examples { $examples
"In this example, the calculated values are memorized to eliminate recalculation." "In this example, the calculated values are memorized to eliminate recalculation."
{ $example { $example
"USING: factlog kernel lists assocs locals math prettyprint ;" "USING: logic kernel lists assocs locals math prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: fibo ;" "LOGIC-PREDS: fibo ;"
@ -380,7 +380,7 @@ HELP: invoke*
{ "quot" quotation } { "quot" quotation }
{ "goal" logic-goal } { "goal" logic-goal }
} }
{ $description "Creates a goal which uses the values of obtained logic variables. The difference with " { $link invoke } " is that " { $snippet "quot" } " returns " { $link t } " or " { $link f } ", and the created goal returns it.\n" { $snippet "invoke*" } " is intended to be used in a quotation. If there is a quotation in the definition of rule, factlog uses the internal definition of the goal obtained by calling it." } { $description "Creates a goal which uses the values of obtained logic variables. The difference with " { $link invoke } " is that " { $snippet "quot" } " returns " { $link t } " or " { $link f } ", and the created goal returns it.\n" { $snippet "invoke*" } " is intended to be used in a quotation. If there is a quotation in the definition of rule, " { $snippet "logic" } " uses the internal definition of the goal obtained by calling it." }
{ $see-also invoke } ; { $see-also invoke } ;
HELP: lengtho HELP: lengtho
@ -388,7 +388,7 @@ HELP: lengtho
{ $syntax "{ lengtho List X }" } { $syntax "{ lengtho List X }" }
{ $examples { $examples
{ $example { $example
"USING: factlog lists prettyprint ;" "USING: logic lists prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"SYMBOLS: Tom Jerry Nibbles ;" "SYMBOLS: Tom Jerry Nibbles ;"
@ -405,7 +405,7 @@ HELP: listo
{ $syntax "{ listo X }" } { $syntax "{ listo X }" }
{ $examples { $examples
{ $example { $example
"USING: factlog lists prettyprint ;" "USING: logic lists prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"SYMBOLS: Tom Jerry Nibbles ;" "SYMBOLS: Tom Jerry Nibbles ;"
@ -421,7 +421,7 @@ HELP: membero
{ $syntax "{ membero X List }" } { $syntax "{ membero X List }" }
{ $examples { $examples
{ $example { $example
"USING: factlog lists prettyprint ;" "USING: logic lists prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"SYMBOLS: Tom Jerry Nibbles Spike ;" "SYMBOLS: Tom Jerry Nibbles Spike ;"
@ -467,7 +467,7 @@ When you query with logic variable(s), you will get the answer for the logic var
} }
{ $examples { $examples
{ $example { $example
"USING: factlog prettyprint ;" "USING: logic prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: cato mouseo creatureo ;" "LOGIC-PREDS: cato mouseo creatureo ;"
@ -502,7 +502,7 @@ HELP: retract
{ $description "Removes the first definition that matches the given head information." } { $description "Removes the first definition that matches the given head information." }
{ $examples { $examples
{ $example { $example
"USING: factlog prettyprint ;" "USING: logic prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: mouseo ;" "LOGIC-PREDS: mouseo ;"
@ -526,7 +526,7 @@ HELP: retract-all
{ $description "Removes all definitions that match a given head goal definition." } { $description "Removes all definitions that match a given head goal definition." }
{ $examples { $examples
{ $example { $example
"USING: factlog prettyprint ;" "USING: logic prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: mouseo ;" "LOGIC-PREDS: mouseo ;"
@ -559,7 +559,7 @@ If the body array contains only one goal definition, you can write it instead of
Gh Gb rule" } Gh Gb rule" }
{ $examples { $examples
{ $example { $example
"USING: factlog prettyprint ;" "USING: logic prettyprint ;"
"IN: scratchpad" "IN: scratchpad"
"" ""
"LOGIC-PREDS: mouseo youngo young-mouseo ;" "LOGIC-PREDS: mouseo youngo young-mouseo ;"
@ -651,23 +651,23 @@ HELP: writeo
{ $syntax "{ writeo X }" } { $syntax "{ writeo X }" }
{ $see-also writenlo nlo } ; { $see-also writenlo nlo } ;
ARTICLE: "factlog" "How to use factlog" ARTICLE: "logic" "Logic"
{ $vocab-link "factlog" } { $vocab-link "logic" }
" is an embedded language that runs on "{ $url "https://github.com/factor/factor" "Factor" } " with the capabilities of a subset of Prolog." $nl " is a vocab for an embedded language that runs on "{ $url "https://github.com/factor/factor" "Factor" } " with the capabilities of a subset of Prolog." $nl
"It is an extended port from tiny_prolog and its descendants, " { $url "https://github.com/preston/ruby-prolog" "ruby-prolog" } "." $nl "It is an extended port from tiny_prolog and its descendants, " { $url "https://github.com/preston/ruby-prolog" "ruby-prolog" } "." $nl
{ $code { $code
"USE: factlog "USE: logic
LOGIC-PREDS: cato mouseo creatureo ; LOGIC-PREDS: cato mouseo creatureo ;
LOGIC-VARS: X Y ; LOGIC-VARS: X Y ;
SYMBOLS: Tom Jerry Nibbles ;" SYMBOLS: Tom Jerry Nibbles ;"
} $nl } $nl
"In factlog, words that represent relationships are called " { $strong "logic predicates" } ". Use " { $link \ LOGIC-PREDS: } " to declare the predicates you want to use. " { $strong "Logic variables" } " are used to represent relationships. use " { $link \ LOGIC-VARS: } " to declare the logic variables you want to use." $nl "In the DSL, words that represent relationships are called " { $strong "logic predicates" } ". Use " { $link \ LOGIC-PREDS: } " to declare the predicates you want to use. " { $strong "Logic variables" } " are used to represent relationships. use " { $link \ LOGIC-VARS: } " to declare the logic variables you want to use." $nl
"In the above code, logic predicates end with the character 'o', which is a convention borrowed from miniKanren and so on, and means relation. This is not necessary, but it is useful for reducing conflicts with the words of, the parent language, Factor. We really want to write them as: " { $snippet "cat°" } ", " { $snippet "mouse°" } " and " { $snippet "creature°" } ", but we use 'o' because it's easy to type." $nl "In the above code, logic predicates end with the character 'o', which is a convention borrowed from miniKanren and so on, and means relation. This is not necessary, but it is useful for reducing conflicts with the words of, the parent language, Factor. We really want to write them as: " { $snippet "cat°" } ", " { $snippet "mouse°" } " and " { $snippet "creature°" } ", but we use 'o' because it's easy to type." $nl
{ $strong "Goals" } " are questions that factlog tries to meet to be true. To represent a goal, write an array with a logic predicate followed by zero or more arguments. factlog converts such definitions to internal representations." $nl { $strong "Goals" } " are questions that " { $snippet "logic" } " tries to meet to be true. To represent a goal, write an array with a logic predicate followed by zero or more arguments. " { $snippet "logic" } " converts such definitions to internal representations." $nl
{ $code "{ LOGIC-PREDICATE ARG1 ARG2 ... }" } { $code "{ LOGIC-PREDICATE ARG1 ARG2 ... }" }
{ $code "{ LOGIC-PREDICATE }" } $nl { $code "{ LOGIC-PREDICATE }" } $nl
"We will write factlog programs using these goals." $nl "We will write logic programs using these goals." $nl
{ $code { $code
"{ cato Tom } fact "{ cato Tom } fact
{ mouseo Jerry } fact { mouseo Jerry } fact
@ -742,7 +742,7 @@ $nl
"Gh { Gb4 Gb5 } rule" "Gh { Gb4 Gb5 } rule"
"Gh { Gb6 } rule" "Gh { Gb6 } rule"
} $nl } $nl
"factlog actually converts the disjunction in that way. You may need to be careful about that when deleting definitions that you registered using " { $link rule } ", etc." $nl { $snippet "logic" } " actually converts the disjunction in that way. You may need to be careful about that when deleting definitions that you registered using " { $link rule } ", etc." $nl
"You can use " { $link query-n } " to limit the number of answers to a query. Specify a number greater than or equal to 1." $nl "You can use " { $link query-n } " to limit the number of answers to a query. Specify a number greater than or equal to 1." $nl
{ $unchecked-example { $unchecked-example
"{ creatureo Y } 2 query-n ." "{ creatureo Y } 2 query-n ."
@ -923,7 +923,7 @@ mouseo clear-pred
{ creatureo X } query ." { creatureo X } query ."
"{ H{ { X Tom } } }\n{ H{ { X big } { Y a-big-cat } } H{ { X small } { Y a-small-cat } } }\n{ H{ { X Tom } } H{ { X Jerry } } H{ { X Nibbles } }" "{ H{ { X Tom } } }\n{ H{ { X big } { Y a-big-cat } } H{ { X small } { Y a-small-cat } } }\n{ H{ { X Tom } } H{ { X Jerry } } H{ { X Nibbles } }"
} $nl } $nl
"If you need to identify a logic predicate that has a different " { $strong "arity" } ", that is numbers of arguments, express it with a slash and an arity number. For example, " { $snippet "cato" } " with arity 1 is " { $snippet "cato/1" } ", " { $snippet "cato" } " with arity 2 is " { $snippet "cato/2" } ". But, note that factlog does not recognize these names." $nl "If you need to identify a logic predicate that has a different " { $strong "arity" } ", that is numbers of arguments, express it with a slash and an arity number. For example, " { $snippet "cato" } " with arity 1 is " { $snippet "cato/1" } ", " { $snippet "cato" } " with arity 2 is " { $snippet "cato/2" } ". But, note that " { $snippet "logic" } " does not recognize these names." $nl
{ $link clear-pred } " will clear all definitions of any arity. If you only want to remove the definition of a certain arity, you should use " { $link retract-all } " with logic variables." $nl { $link clear-pred } " will clear all definitions of any arity. If you only want to remove the definition of a certain arity, you should use " { $link retract-all } " with logic variables." $nl
{ $unchecked-example { $unchecked-example
"{ cato __ __ } retract-all "{ cato __ __ } retract-all
@ -931,14 +931,14 @@ mouseo clear-pred
"{ cato X } query ." "{ cato X } query ."
"f\n{ H{ { X Tom } } }" "f\n{ H{ { X Tom } } }"
} $nl } $nl
"You can " { $strong "trace" } " factlog's execution. The word to do this is " { $link trace } "." $nl "You can " { $strong "trace" } " " { $snippet "logic" } "'s execution. The word to do this is " { $link trace } "." $nl
"The word to stop tracing is " { $link notrace } "." $nl "The word to stop tracing is " { $link notrace } "." $nl
"Here is a Prolog definition for the factorial predicate " { $snippet "factorial" } "." $nl "Here is a Prolog definition for the factorial predicate " { $snippet "factorial" } "." $nl
"factorial(0, 1)." $nl "factorial(0, 1)." $nl
"factorial(N, F) :- N > 0, N2 is N - 1, factorial(N2, F2), F is F2 * N." $nl "factorial(N, F) :- N > 0, N2 is N - 1, factorial(N2, F2), F is F2 * N." $nl
"Let's think about how to do the same thing with factlog. It is mostly the following code, but is surrounded by backquotes where it has not been explained." $nl "Let's think about how to do the same thing. It is mostly the following code, but is surrounded by backquotes where it has not been explained." $nl
{ $code { $code
"USE: factlog "USE: logic
LOGIC-PREDS: factorialo ; LOGIC-PREDS: factorialo ;
LOGIC-VARS: N N2 F F2 ; LOGIC-VARS: N N2 F F2 ;
@ -951,7 +951,7 @@ LOGIC-VARS: N N2 F F2 ;
`F is F2 * N` `F is F2 * N`
} rule" } rule"
} $nl } $nl
"Within these backquotes are comparisons, calculations, and assignments (to be precise, " { $strong "unifications" } "). factlog has a mechanism to call Factor code to do these things. Here are some example." $nl "Within these backquotes are comparisons, calculations, and assignments (to be precise, " { $strong "unifications" } "). " { $snippet "logic" } " has a mechanism to call Factor code to do these things. Here are some example." $nl
{ $code "LOGIC-PREDS: N_>_0 N2_is_N_-_1 F_is_F2_*_N ;" } { $code "LOGIC-PREDS: N_>_0 N2_is_N_-_1 F_is_F2_*_N ;" }
{ $code "{ N_>_0 N } [ N of 0 > ] callback" } { $code "{ N_>_0 N } [ N of 0 > ] callback" }
{ $code "{ N2_is_N_-_1 N2 N } [ dup N of 1 - N2 unify ] callback" } { $code "{ N2_is_N_-_1 N2 N } [ dup N of 1 - N2 unify ] callback" }
@ -960,7 +960,7 @@ LOGIC-VARS: N N2 F F2 ;
"The word " { $link unify } " unifies the two following the environment in that environment." $nl "The word " { $link unify } " unifies the two following the environment in that environment." $nl
"Now we can rewrite the definition of factorialo to use them." $nl "Now we can rewrite the definition of factorialo to use them." $nl
{ $code { $code
"USE: factlog "USE: logic
LOGIC-PREDS: factorialo N_>_0 N2_is_N_-_1 F_is_F2_*_N ; LOGIC-PREDS: factorialo N_>_0 N2_is_N_-_1 F_is_F2_*_N ;
LOGIC-VARS: N N2 F F2 ; LOGIC-VARS: N N2 F F2 ;
@ -992,12 +992,12 @@ LOGIC-VARS: N N2 F F2 ;
"{ factorialo 10 F } query ." "{ factorialo 10 F } query ."
"{ H{ { F 3628800 } } }" "{ H{ { F 3628800 } } }"
} $nl } $nl
"factlog has features that make it easier to meet the typical requirements shown here." $nl { $snippet "logic" } " has features that make it easier to meet the typical requirements shown here." $nl
"There are the built-in logic predicates " { $link (<) } ", " { $link (>) } ", " { $link (>=) } ", and " { $link (=<) } " to compare numbers. There are also " { $link (==) } " and " { $link (\==) } " to test for equality and inequality of two arguments." $nl "There are the built-in logic predicates " { $link (<) } ", " { $link (>) } ", " { $link (>=) } ", and " { $link (=<) } " to compare numbers. There are also " { $link (==) } " and " { $link (\==) } " to test for equality and inequality of two arguments." $nl
"The word " { $link is } " takes a quotation and a logic variable to be unified. The quotation takes an environment and returns a value. And " { $link is } " returns the internal representation of the goal. " { $link is } " is intended to be used in a quotation. If there is a quotation in the definition of " { $link rule } ", factlog uses the internal definition of the goal obtained by calling it." $nl "The word " { $link is } " takes a quotation and a logic variable to be unified. The quotation takes an environment and returns a value. And " { $link is } " returns the internal representation of the goal. " { $link is } " is intended to be used in a quotation. If there is a quotation in the definition of " { $link rule } ", " { $snippet "logic" } " uses the internal definition of the goal obtained by calling it." $nl
"If you use these features to rewrite the definition of " { $snippet "factorialo" } ":" $nl "If you use these features to rewrite the definition of " { $snippet "factorialo" } ":" $nl
{ $code { $code
"USE: factlog "USE: logic
LOGIC-PREDS: factorialo ; LOGIC-PREDS: factorialo ;
LOGIC-VARS: N N2 F F2 ; LOGIC-VARS: N N2 F F2 ;
@ -1012,7 +1012,7 @@ LOGIC-VARS: N N2 F F2 ;
} $nl } $nl
"Use the built-in logic predicate " { $link (=) } " for unification that does not require processing with a quotation. " { $link (\=) } " will be true when such a unification fails. Note that " { $link (\=) } " does not actually do the unification." $nl "Use the built-in logic predicate " { $link (=) } " for unification that does not require processing with a quotation. " { $link (\=) } " will be true when such a unification fails. Note that " { $link (\=) } " does not actually do the unification." $nl
{ $link varo } " takes a argument and is true if it is a logic variable with no value. On the other hand, " { $link nonvaro } " is true if its argument is not a logic variable or is a concrete logic variable." $nl { $link varo } " takes a argument and is true if it is a logic variable with no value. On the other hand, " { $link nonvaro } " is true if its argument is not a logic variable or is a concrete logic variable." $nl
"Now almost everything about factlog is explained." "Now almost everything about " { $snippet "logic" } " is explained."
; ;
ABOUT: "factlog" ABOUT: "logic"

View File

@ -1,17 +1,17 @@
! Copyright (C) 2019-2020 KUSUMOTO Norio. ! Copyright (C) 2019-2020 KUSUMOTO Norio.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: tools.test factlog lists assocs math kernel namespaces USING: tools.test logic lists assocs math kernel namespaces
accessors sequences accessors sequences
factlog.examples.factorial logic.examples.factorial
factlog.examples.fib logic.examples.fib
factlog.examples.fib2 logic.examples.fib2
factlog.examples.hanoi logic.examples.hanoi
factlog.examples.hanoi2 logic.examples.hanoi2
factlog.examples.money logic.examples.money
factlog.examples.zebra logic.examples.zebra
factlog.examples.zebra2 ; logic.examples.zebra2 ;
IN: factlog.tests IN: logic.tests
LOGIC-PREDS: cato mouseo creatureo ; LOGIC-PREDS: cato mouseo creatureo ;
LOGIC-VARS: X Y ; LOGIC-VARS: X Y ;

View File

@ -8,7 +8,7 @@ prettyprint.custom prettyprint.sections quotations sequences
sequences.deep sets splitting strings words words.symbol sequences.deep sets splitting strings words words.symbol
vectors ; vectors ;
IN: factlog IN: logic
SYMBOL: !! ! cut operator in prolog: ! SYMBOL: !! ! cut operator in prolog: !
SYMBOL: __ ! anonymous variable in prolog: _ SYMBOL: __ ! anonymous variable in prolog: _
@ -270,7 +270,7 @@ SYMBOL: *anonymouse-var-no*
: proxy-var-for-'__' ( -- var-symbol ) : proxy-var-for-'__' ( -- var-symbol )
[ [
*anonymouse-var-no* counter "ANON-%d_" sprintf *anonymouse-var-no* counter "ANON-%d_" sprintf
"factlog.private" create-word dup dup "logic.private" create-word dup dup
define-symbol define-symbol
ANONYMOUSE-LOGIC-VAR swap set-global ANONYMOUSE-LOGIC-VAR swap set-global
] with-compilation-unit ; ] with-compilation-unit ;