Help lint fixes for iota

db4
Slava Pestov 2010-01-15 17:04:14 +13:00
parent 4e6a5a772f
commit 7f7e1e4e1d
3 changed files with 19 additions and 19 deletions

View File

@ -4,7 +4,7 @@ USING: help.markup help.syntax kernel math strings ;
IN: roman IN: roman
HELP: >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." } { $description "Converts a number to its lower-case Roman Numeral equivalent." }
{ $notes "The range for this word is 1-3999, inclusive." } { $notes "The range for this word is 1-3999, inclusive." }
{ $examples { $examples
@ -15,7 +15,7 @@ HELP: >roman
} ; } ;
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." } { $description "Converts a number to its upper-case Roman numeral equivalent." }
{ $notes "The range for this word is 1-3999, inclusive." } { $notes "The range for this word is 1-3999, inclusive." }
{ $examples { $examples
@ -26,7 +26,7 @@ HELP: >ROMAN
} ; } ;
HELP: roman> HELP: roman>
{ $values { "str" "a string" } { "n" "an integer" } } { $values { "str" string } { "n" integer } }
{ $description "Converts a Roman numeral to an integer." } { $description "Converts a Roman numeral to an integer." }
{ $notes "The range for this word is i-mmmcmxcix, inclusive." } { $notes "The range for this word is i-mmmcmxcix, inclusive." }
{ $examples { $examples
@ -39,7 +39,7 @@ HELP: roman>
{ >roman >ROMAN roman> } related-words { >roman >ROMAN roman> } related-words
HELP: roman+ HELP: roman+
{ $values { "string" string } { "string" string } { "string" string } } { $values { "x" string } { "x" string } { "x" string } }
{ $description "Adds two Roman numerals." } { $description "Adds two Roman numerals." }
{ $examples { $examples
{ $example "USING: io roman ;" { $example "USING: io roman ;"
@ -49,7 +49,7 @@ HELP: roman+
} ; } ;
HELP: roman- HELP: roman-
{ $values { "string" string } { "string" string } { "string" string } } { $values { "x" string } { "x" string } { "x" string } }
{ $description "Subtracts two Roman numerals." } { $description "Subtracts two Roman numerals." }
{ $examples { $examples
{ $example "USING: io roman ;" { $example "USING: io roman ;"
@ -61,7 +61,7 @@ HELP: roman-
{ roman+ roman- } related-words { roman+ roman- } related-words
HELP: roman* HELP: roman*
{ $values { "string" string } { "string" string } { "string" string } } { $values { "x" string } { "x" string } { "x" string } }
{ $description "Multiplies two Roman numerals." } { $description "Multiplies two Roman numerals." }
{ $examples { $examples
{ $example "USING: io roman ;" { $example "USING: io roman ;"
@ -71,7 +71,7 @@ HELP: roman*
} ; } ;
HELP: roman/i 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." } { $description "Computes the integer division of two Roman numerals." }
{ $examples { $examples
{ $example "USING: io roman ;" { $example "USING: io roman ;"
@ -81,7 +81,7 @@ HELP: roman/i
} ; } ;
HELP: roman/mod 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." } { $description "Computes the quotient and remainder of two Roman numerals." }
{ $examples { $examples
{ $example "USING: kernel io roman ;" { $example "USING: kernel io roman ;"

View File

@ -11,14 +11,14 @@ IN: stack-checker
ARTICLE: "inference-simple" "Straight-line stack effects" 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." "The simplest case is when a piece of code does not have any branches or recursion, and just pushes literals and calls words."
$nl $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 $nl
"The stack effect of each element in a code snippet is composed. The result is then the stack effect of the snippet." "The stack effect of each element in a code snippet is composed. The result is then the stack effect of the snippet."
$nl $nl
"An example:" "An example:"
{ $example "[ 1 2 3 ] infer." "( -- object object object )" } { $example "[ 1 2 3 ] infer." "( -- x x x )" }
"Another example:" "Another example:"
{ $example "[ 2 + ] infer." "( object -- object )" } ; { $example "[ 2 + ] infer." "( x -- x )" } ;
ARTICLE: "inference-combinators" "Combinator stack effects" 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:" "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" } { $heading "Examples" }
{ $subheading "Calling a combinator" } { $subheading "Calling a combinator" }
"The following usage of " { $link map } " passes the stack checker, because the quotation is the result of " { $link curry } ":" "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:" "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: fry math sequences ;" "[ '[ _ + ] map ] infer." "( x x -- x )" }
{ $example "USING: locals math sequences ;" "[| a | [ a + ] map ] infer." "( object object -- object )" } { $example "USING: locals math sequences ;" "[| a | [ a + ] map ] infer." "( x x -- x )" }
{ $subheading "Defining an inline combinator" } { $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:" "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" } { $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 } ":" "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" } { $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:" "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 { $code
@ -61,14 +61,14 @@ $nl
} }
"To make this work, use " { $link dip } " to pass the quotation instead:" "To make this work, use " { $link dip } " to pass the quotation instead:"
{ $example { $example
"[ [ reverse ] [ [ reverse ] map ] dip call ] infer." "( object -- object )" "[ [ reverse ] [ [ reverse ] map ] dip call ] infer." "( x -- x )"
} ; } ;
ARTICLE: "inference-branches" "Branch stack effects" 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 } "." "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 $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," "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 )" } "." ; "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" 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:" "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" } { $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:" "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:" "An inline recursive word must have a fixed stack effect in its base case. The following will not infer:"
{ $code { $code
": foo ( quot ? -- ) [ f foo ] [ call ] if ; inline" ": foo ( quot ? -- ) [ f foo ] [ call ] if ; inline"

View File

@ -283,7 +283,7 @@ HELP: unless-zero
{ $examples "This word is equivalent to " { $link if-zero } " with an empty first quotation:" { $examples "This word is equivalent to " { $link if-zero } " with an empty first quotation:"
{ $example { $example
"USING: sequences math prettyprint ;" "USING: sequences math prettyprint ;"
"3 [ ] [ sq ] if-empty ." "3 [ ] [ sq ] if-zero ."
"9" "9"
} }
{ $example { $example