Help lint fixes for iota
parent
4e6a5a772f
commit
7f7e1e4e1d
|
@ -4,7 +4,7 @@ USING: help.markup help.syntax kernel math strings ;
|
|||
IN: roman
|
||||
|
||||
HELP: >roman
|
||||
{ $values { "n" "an integer" } { "str" "a string" } }
|
||||
{ $values { "n" integer } { "str" string } }
|
||||
{ $description "Converts a number to its lower-case Roman Numeral equivalent." }
|
||||
{ $notes "The range for this word is 1-3999, inclusive." }
|
||||
{ $examples
|
||||
|
@ -15,7 +15,7 @@ HELP: >roman
|
|||
} ;
|
||||
|
||||
HELP: >ROMAN
|
||||
{ $values { "n" "an integer" } { "str" "a string" } }
|
||||
{ $values { "n" integer } { "str" string } }
|
||||
{ $description "Converts a number to its upper-case Roman numeral equivalent." }
|
||||
{ $notes "The range for this word is 1-3999, inclusive." }
|
||||
{ $examples
|
||||
|
@ -26,7 +26,7 @@ HELP: >ROMAN
|
|||
} ;
|
||||
|
||||
HELP: roman>
|
||||
{ $values { "str" "a string" } { "n" "an integer" } }
|
||||
{ $values { "str" string } { "n" integer } }
|
||||
{ $description "Converts a Roman numeral to an integer." }
|
||||
{ $notes "The range for this word is i-mmmcmxcix, inclusive." }
|
||||
{ $examples
|
||||
|
@ -39,7 +39,7 @@ HELP: roman>
|
|||
{ >roman >ROMAN roman> } related-words
|
||||
|
||||
HELP: roman+
|
||||
{ $values { "string" string } { "string" string } { "string" string } }
|
||||
{ $values { "x" string } { "x" string } { "x" string } }
|
||||
{ $description "Adds two Roman numerals." }
|
||||
{ $examples
|
||||
{ $example "USING: io roman ;"
|
||||
|
@ -49,7 +49,7 @@ HELP: roman+
|
|||
} ;
|
||||
|
||||
HELP: roman-
|
||||
{ $values { "string" string } { "string" string } { "string" string } }
|
||||
{ $values { "x" string } { "x" string } { "x" string } }
|
||||
{ $description "Subtracts two Roman numerals." }
|
||||
{ $examples
|
||||
{ $example "USING: io roman ;"
|
||||
|
@ -61,7 +61,7 @@ HELP: roman-
|
|||
{ roman+ roman- } related-words
|
||||
|
||||
HELP: roman*
|
||||
{ $values { "string" string } { "string" string } { "string" string } }
|
||||
{ $values { "x" string } { "x" string } { "x" string } }
|
||||
{ $description "Multiplies two Roman numerals." }
|
||||
{ $examples
|
||||
{ $example "USING: io roman ;"
|
||||
|
@ -71,7 +71,7 @@ HELP: roman*
|
|||
} ;
|
||||
|
||||
HELP: roman/i
|
||||
{ $values { "string" string } { "string" string } { "string" string } }
|
||||
{ $values { "x" string } { "x" string } { "x" string } }
|
||||
{ $description "Computes the integer division of two Roman numerals." }
|
||||
{ $examples
|
||||
{ $example "USING: io roman ;"
|
||||
|
@ -81,7 +81,7 @@ HELP: roman/i
|
|||
} ;
|
||||
|
||||
HELP: roman/mod
|
||||
{ $values { "string" string } { "string" string } { "string" string } { "string" string } }
|
||||
{ $values { "x" string } { "x" string } { "x" string } { "x" string } }
|
||||
{ $description "Computes the quotient and remainder of two Roman numerals." }
|
||||
{ $examples
|
||||
{ $example "USING: kernel io roman ;"
|
||||
|
|
|
@ -11,14 +11,14 @@ IN: stack-checker
|
|||
ARTICLE: "inference-simple" "Straight-line stack effects"
|
||||
"The simplest case is when a piece of code does not have any branches or recursion, and just pushes literals and calls words."
|
||||
$nl
|
||||
"Pushing a literal has stack effect " { $snippet "( -- object )" } ". The stack effect of a most words is always known statically from the declaration. Stack effects of " { $link POSTPONE: inline } " words and " { $link "macros" } ", may depend on literals pushed on the stack prior to the call, and this case is discussed in " { $link "inference-combinators" } "."
|
||||
"Pushing a literal has stack effect " { $snippet "( -- x )" } ". The stack effect of a most words is always known statically from the declaration. Stack effects of " { $link POSTPONE: inline } " words and " { $link "macros" } ", may depend on literals pushed on the stack prior to the call, and this case is discussed in " { $link "inference-combinators" } "."
|
||||
$nl
|
||||
"The stack effect of each element in a code snippet is composed. The result is then the stack effect of the snippet."
|
||||
$nl
|
||||
"An example:"
|
||||
{ $example "[ 1 2 3 ] infer." "( -- object object object )" }
|
||||
{ $example "[ 1 2 3 ] infer." "( -- x x x )" }
|
||||
"Another example:"
|
||||
{ $example "[ 2 + ] infer." "( object -- object )" } ;
|
||||
{ $example "[ 2 + ] infer." "( x -- x )" } ;
|
||||
|
||||
ARTICLE: "inference-combinators" "Combinator stack effects"
|
||||
"If a word calls a combinator, one of the following two conditions must hold for the stack checker to succeed:"
|
||||
|
@ -30,15 +30,15 @@ ARTICLE: "inference-combinators" "Combinator stack effects"
|
|||
{ $heading "Examples" }
|
||||
{ $subheading "Calling a combinator" }
|
||||
"The following usage of " { $link map } " passes the stack checker, because the quotation is the result of " { $link curry } ":"
|
||||
{ $example "USING: math sequences ;" "[ [ + ] curry map ] infer." "( object object -- object )" }
|
||||
{ $example "USING: math sequences ;" "[ [ + ] curry map ] infer." "( x x -- x )" }
|
||||
"The equivalent code using " { $vocab-link "fry" } " and " { $vocab-link "locals" } " likewise passes the stack checker:"
|
||||
{ $example "USING: fry math sequences ;" "[ '[ _ + ] map ] infer." "( object object -- object )" }
|
||||
{ $example "USING: locals math sequences ;" "[| a | [ a + ] map ] infer." "( object object -- object )" }
|
||||
{ $example "USING: fry math sequences ;" "[ '[ _ + ] map ] infer." "( x x -- x )" }
|
||||
{ $example "USING: locals math sequences ;" "[| a | [ a + ] map ] infer." "( x x -- x )" }
|
||||
{ $subheading "Defining an inline combinator" }
|
||||
"The following word calls a quotation twice; the word is declared " { $link POSTPONE: inline } ", since it invokes " { $link call } " on the result of " { $link compose } " on an input parameter:"
|
||||
{ $code ": twice ( value quot -- result ) dup compose call ; inline" }
|
||||
"The following code now passes the stack checker; it would fail were " { $snippet "twice" } " not declared " { $link POSTPONE: inline } ":"
|
||||
{ $unchecked-example "USE: math.functions" "[ [ sqrt ] twice ] infer." "( object -- object )" }
|
||||
{ $unchecked-example "USE: math.functions" "[ [ sqrt ] twice ] infer." "( x -- x )" }
|
||||
{ $subheading "Defining a combinator for unknown quotations" }
|
||||
"In the next example, " { $link POSTPONE: call( } " must be used because the quotation the result of calling a runtime accessor, and the compiler cannot make any static assumptions about this quotation at all:"
|
||||
{ $code
|
||||
|
@ -61,14 +61,14 @@ $nl
|
|||
}
|
||||
"To make this work, use " { $link dip } " to pass the quotation instead:"
|
||||
{ $example
|
||||
"[ [ reverse ] [ [ reverse ] map ] dip call ] infer." "( object -- object )"
|
||||
"[ [ reverse ] [ [ reverse ] map ] dip call ] infer." "( x -- x )"
|
||||
} ;
|
||||
|
||||
ARTICLE: "inference-branches" "Branch stack effects"
|
||||
"Conditionals such as " { $link if } " and combinators built on top have the same restrictions as " { $link POSTPONE: inline } " combinators (see " { $link "inference-combinators" } ") with the additional requirement that all branches leave the stack at the same height. If this is not the case, the stack checker throws a " { $link unbalanced-branches-error } "."
|
||||
$nl
|
||||
"If all branches leave the stack at the same height, then the stack effect of the conditional is just the maximum of the stack effect of each branch. For example,"
|
||||
{ $example "[ [ + ] [ drop ] if ] infer." "( object object object -- object )" }
|
||||
{ $example "[ [ + ] [ drop ] if ] infer." "( x x x -- x )" }
|
||||
"The call to " { $link if } " takes one value from the stack, a generalized boolean. The first branch " { $snippet "[ + ]" } " has stack effect " { $snippet "( x x -- x )" } " and the second has stack effect " { $snippet "( x -- )" } ". Since both branches decrease the height of the stack by one, we say that the stack effect of the two branches is " { $snippet "( x x -- x )" } ", and together with the boolean popped off the stack by " { $link if } ", this gives a total stack effect of " { $snippet "( x x x -- x )" } "." ;
|
||||
|
||||
ARTICLE: "inference-recursive-combinators" "Recursive combinator stack effects"
|
||||
|
@ -87,7 +87,7 @@ $nl
|
|||
"An inline recursive word cannot pass a quotation on the data stack through the recursive call. For example, the following will not infer:"
|
||||
{ $unchecked-example ": bad ( ? quot: ( ? -- ) -- ) 2dup [ not ] dip bad call ; inline recursive" "[ [ drop ] bad ] infer." "Cannot apply “call” to a run-time computed value\nmacro call" }
|
||||
"However a small change can be made:"
|
||||
{ $example ": good ( ? quot: ( ? -- ) -- ) [ good ] 2keep [ not ] dip call ; inline recursive" "[ [ drop ] good ] infer." "( object -- )" }
|
||||
{ $example ": good ( ? quot: ( ? -- ) -- ) [ good ] 2keep [ not ] dip call ; inline recursive" "[ [ drop ] good ] infer." "( x -- )" }
|
||||
"An inline recursive word must have a fixed stack effect in its base case. The following will not infer:"
|
||||
{ $code
|
||||
": foo ( quot ? -- ) [ f foo ] [ call ] if ; inline"
|
||||
|
|
|
@ -283,7 +283,7 @@ HELP: unless-zero
|
|||
{ $examples "This word is equivalent to " { $link if-zero } " with an empty first quotation:"
|
||||
{ $example
|
||||
"USING: sequences math prettyprint ;"
|
||||
"3 [ ] [ sq ] if-empty ."
|
||||
"3 [ ] [ sq ] if-zero ."
|
||||
"9"
|
||||
}
|
||||
{ $example
|
||||
|
|
Loading…
Reference in New Issue