]> gitweb.factorcode.org Git - factor.git/commitdiff
Define involutary words with "define-involution"
authorSamuel Tardieu <sam@rfc1149.net>
Tue, 13 Jan 2009 15:58:31 +0000 (16:58 +0100)
committerSamuel Tardieu <sam@rfc1149.net>
Tue, 13 Jan 2009 15:58:31 +0000 (16:58 +0100)
extra/inverse/inverse-docs.factor
extra/inverse/inverse-tests.factor
extra/inverse/inverse.factor

index c2615fc4112e165ee30516685a43a6696245b2ef..6b575d6d08723365494fc85ceab95234d2c06c5d 100644 (file)
@@ -14,12 +14,17 @@ HELP: undo
 HELP: define-inverse
 { $values { "word" "a word" } { "quot" "the inverse" } }
 { $description "Defines the inverse of a given word, taking no arguments from the quotation, only the stack." }
-{ $see-also define-dual define-pop-inverse } ;
+{ $see-also define-dual define-involution define-pop-inverse } ;
 
 HELP: define-dual
 { $values { "word1" "a word" } { "word2" "a word" } }
 { $description "Defines the inverse of each word as being the other one." }
-{ $see-also define-inverse } ;
+{ $see-also define-inverse define-involution } ;
+
+HELP: define-involution
+{ $values { "word" "a word" } }
+{ $description "Defines a word as being its own inverse." }
+{ $see-also define-dual define-inverse } ;
 
 HELP: define-pop-inverse
 { $values { "word" "a word" } { "n" "number of arguments to be taken from the inverted quotation" } { "quot" "a quotation" } }
index 3dce620857860f544acf644c8415fcba555eff15..a9234fcff40e7eba29d6a0f59d6809e2c6d6eb2f 100644 (file)
@@ -78,3 +78,5 @@ C: <nil> nil
 
 [ [ sq ] ] [ [ sqrt ] [undo] ] unit-test
 [ [ sqrt ] ] [ [ sq ] [undo] ] unit-test
+[ [ not ] ] [ [ not ] [undo] ] unit-test
+[ { 3 2 1 } ] [ { 1 2 3 } [ reverse ] undo ] unit-test
index ec4df1ba693226971d3ea9140d24c2b6c3a11965..924a6d38142e3aff9c98ee01d9e3683f18d64b32 100755 (executable)
@@ -23,6 +23,8 @@ M: fail summary drop "Matching failed" ;
 : define-dual ( word1 word2 -- )
     2dup swap [ 1quotation define-inverse ] 2bi@ ;
 
+: define-involution ( word -- ) dup 1quotation define-inverse ;
+
 : define-math-inverse ( word quot1 quot2 -- )
     pick 1quotation 3array "math-inverse" set-word-prop ;
 
@@ -132,18 +134,18 @@ MACRO: undo ( quot -- ) [undo] ;
 
 ! Inverse of selected words
 
-\ swap [ swap ] define-inverse
+\ swap define-involution
 \ dup [ [ =/fail ] keep ] define-inverse
 \ 2dup [ over =/fail over =/fail ] define-inverse
 \ 3dup [ pick =/fail pick =/fail pick =/fail ] define-inverse
 \ pick [ [ pick ] dip =/fail ] define-inverse
 \ tuck [ swapd [ =/fail ] keep ] define-inverse
 
-\ not [ not ] define-inverse
+\ not define-involution
 \ >boolean [ { t f } memq? assure ] define-inverse
 
 \ tuple>array \ >tuple define-dual
-\ reverse [ reverse ] define-inverse
+\ reverse define-involution
 
 \ undo 1 [ [ call ] curry ] define-pop-inverse
 \ map 1 [ [undo] [ over sequence? assure map ] curry ] define-pop-inverse