Template:For loop

From Event-B
Revision as of 13:16, 23 February 2009 by imported>Mathieu
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search


Description

The template calls a specified template up to 150 times, where one parameter takes each of a list of values; in addition to the variable parameter, for up to 4 parameters a fixed value can be specified.

Usage

(Note the change for the constant values.)

{{for
  |call=template to call
  |what to separate the entries with (unnamed parameter; required, but can be the empty string)
  |pc1n=name of first parameter with constant value 
  |pc1v=first constant value
  |pc2n=name of second parameter with constant value
  |pc2v=second constant value
  |pc3n=name of third parameter with constant value
  |pc3v=third constant value
  |pc4n=name of fourth parameter with constant value
  |pc4v=fourth constant value
  |pv=name of variable parameter
  |prefix=constant first part of the value of pv
  |postfix=constant last part of the value of pv
  |list of 1 to 150 parameter values (without prefixes and postfixes), with separator "|"
     (empty parameter values work in the regular way, they are ''not'' ignored like undefined ones)

}}

The separator is unnamed, allowing it to start and/or end with newlines and spaces. This parameter should be put before the list. If a parameter value in the list contains an equals sign the list should use named parameters, at least from that point, where it should be noted that e.g. the third item in the list is parameter 4, because parameter 1 is the separator. If the separator contains an equals sign then represent it with {{=}}, see template:= ( talk edit history links ).

Examples

Code Result
1{{for|, 1|00|01|02|03|04|05|06|07|08|09
|10|11|12|13|14|15|16|17|18|19
|20|21|22|23|24|25|26|27|28|29
|30|31|32|33|34|35|36|37|38|39
|40|41|42|43|44|45|46|47|48|49
|50|51|52|53|54|55|56|57|58|59
|60|61|62|63|64|65|66|67|68|69
|70|71|72|73|74|75|76|77|78|79
|80|81|82|83|84|85|86|87|88|89
|90|91|92|93|94|95|96|97|98|99
  |call=1x
}}
100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199

Note that the last part of the separator is used as a prefix; the first prefix needs to be put separately.


{{for|-|a|3||c|g|call=3x}} using template:3x ( talk edit history links ) gives

aaa-333--ccc-ggg

{{for|

|a|3||c|g|call=3x}} gives

aaa

333


ccc

ggg

{|class="wikitable sortable"
|-
!Test
|-
| {{for|
{{!}}-
{{!}} |a|b|c|d|e|call=3x}}
|}

gives:

Test
aaa
bbb
ccc
ddd
eee

Using template:table row example ( talk edit history links ),

{| class="wikitable sortable" 
|-
!number!!reciprocal
|-
| {{for|
{{!}}-
{{!}} |call=table row example|3|1|5|3|2}}
|}

gives

number reciprocal
3 0.33333333333333
1 1
5 0.2
3 0.33333333333333
2 0.5

{{for| / |call=short DOW|3|1|5|3|2}} using template:short DOW ( talk edit history links ) gives

Wed / Mon / Fri / Wed / Tue

{{for|; |call=t2|pc1n=2|pc1v=constant|abc|def|ghi|postfix=pof}} using template:t2 ( talk edit history links ) gives:

parameter 1 is "abcpof", parameter 2 is "constant"; parameter 1 is "defpof", parameter 2 is "constant"; parameter 1 is "ghipof", parameter 2 is "constant"


{{for|, |call=concat and link to w:en:|pc1n=1|pc1v=John_|pv=2||Lennon|Wayne}} using Template:Timc gives Template:Concat and link to w:en:, Template:Concat and link to w:en:, Template:Concat and link to w:en:

A for-call can give a row or column of choice, e.g. using template:power ( talk edit history links ):

{{for|,|2|3|call=power|prefix=2,}} gives Template:Power,Template:Power

{{for|,|2|3|call=power|prefix=3,}} gives Template:Power,Template:Power

{{for|,|2|3|call=power|postfix=,2}} gives Template:Power,Template:Power

{{for|,|2|3|call=power|postfix=,3}} gives Template:Power,Template:Power


A constant parameter is ignored if it is the same as the (implicitly or explicitly given) variable parameter:

{{for|; |call=t2|pc1n=1|pc1v=7|pc2n=2|pc2v=5|abc|def|ghi}} using template:t2 ( talk edit history links ) gives:

parameter 1 is "abc", parameter 2 is "5"; parameter 1 is "def", parameter 2 is "5"; parameter 1 is "ghi", parameter 2 is "5"


Using template:plus square ( talk edit history links ), {{#expr:{{for||call=plus square|pv=1|1|2|3|4|5}}}} gives Expression error: Unrecognised punctuation character "["..

Semi-recursive: see Template talk:Foreach/recursion

Substitution

For successive levels of substitution use one or more or the following (the first, the first two, the first three, or all)

  • substf=subst: - substitute the parser functions in template:for ( talk edit history links )
  • substfa=subst: - substitute the call of auxiliary template:for/aux ( talk edit history links )
  • substa=subst: - substitute the parser functions in for/aux (reduces the number of items from 150 to the actual number)
  • substfa=subst: - substitute the calls of the user template

If at least the first three are applied, and the separator contains {{!}}, one can replace it with {{subst:!}} to substitute that too.

For full substitution Special:ExpandTemplates can also be used.

Old version

Note that formerly this template had a named separator parameter sep.

See also