Brian Dunning's FileMaker Custom Functions

Apply ( function ; value ) OBSOLETE USE ApplyFunction instead

Define an apply a temporary, anonymous function to a value

  Average rating: 4.0 (37 votes) Log in to vote

Debi Fuchs   Debi Fuchs - Show more from this author
Aptworks Consulting
http://www.aptworks.com

Share on Facebook Share on Twitter

  Sample input:
Let(
sq_plus = "[t]*[t]+[t]";
Apply(sq_plus; 3) +
Apply(sq_plus; 4) +
Apply(sq_plus; 5)
)
  Sample output:
62

  Function definition: (Copy & paste into FileMaker's Edit Custom Function window)

IMPORTANT: Use ApplyFunction instead. It avoids unnecessary complexity used here.

CUSTOM FUNCTION: Apply ( function ; value )
© 2008 Debi Fuchs of Aptworks Consulting, debi@aptworks.com

Apply an "inline" function to a value, handling the value either as a number/expression or as text.

BASIC EXAMPLE:

Let(
square = "[n]*[n]";
Apply( square; 3 ) + Apply( square; 4 ) + Apply( square; "2+3" )
) // --> 50

MULTIPLE ARGUMENT EXAMPLE:

Let(
exp = "GetValue([t];1) ^ GetValue([t];2)";
Apply( exp; List(2;5) ) + Apply( exp; List(3;4) )
) // --> 113

RECURSIVE EXAMPLE:

Let(
$factorial_fn= "if([n]=0;1;[n]*Apply($factorial_fn; [n]-1))";
Apply($factorial_fn; 5)
) // --> 120

MUTUALLY RECURSIVE EXAMPLE:

Let(
[
$even_fn = "if([n]=0; 1; Apply($odd_fn; [n]-1))";
$odd_fn = "if([n]=0; 0; Apply($even_fn; [n]-1))"
];
Apply($even_fn; 8)
) // --> 1


CREDITS: Thanks to Agnès Barouh for the idea of the "[n]" style function call syntax.

USAGE: Return the results of evaluating the string "function", assigning to placeholder "[t]" or "[n]" the given "value". Use "[t]" to treat the value as text; Use "[n]" to evaluate it before application. (Note that the use of "[t]" vs. "[n]" does not directly influence the "type" of the result...only the treatment of the input value.) Use "[n]" over "[t]" where possible, as this is faster; Do NOT use BOTH "[n]" and "[t]" placeholders (or BOTH "[t]"and "evaluate([t])" in one function, as this is very, very slow.

EXAMPLES:

Apply("[n] & 4"; 01+2)
// --> evaluate(3 & 4) --> "34"

Apply("[t] & 4"; 01+2)
// --> evaluate("3" & 4) --> "34"

Apply("[n] & 4"; "01+2")
// --> evaluate(01+2 & 4) --> "34"

Apply("[t] & 4"; "01+2")
// --> evaluate("01+2" & 4) --> "01+24"

Apply("[n] + 4"; "01+2")
// --> 7

Apply("[t] + 4"; "01+2")
// --> 16

Apply("GetAsDate([t])+30"; Date(1;1;2000))
// --> GetAsDate("1/1/2000") + 30 --> 1/31/2000

Apply("GetAsDate([n])+30"; "Date(1;1;2000)")
// --> GetAsDate(Date(1;1;2000)) + 30 --> 1/31/2000

Apply("GetAsDate([n])+30"; Date(1;1;2000))
// --> GetAsDate(1/1/2000) + 30 --> ?

Apply("GetAsDate([n])+30"; GetAsNumber(Date(1;1;2000)))
// --> GetAsDate(730120)+30 --> 1/31/2000

Apply("[t] + [n]"; "01+2")
// --> "01+2" + 01+2 --> 15


IMPLEMENTATION: Evaluate the result of substituting the input into an evaluated "Let" statement, treating the input as EITHER text or a number/expression.

NOTE: See "ApplyToRange" to apply a function to a range of numbers and "ApplyToList" to apply a function to each element of a list.

LAST MODIFIED: 11-AUG-2008 by Debi Fuchs of Aptworks Consulting

 

Comments

Log in to post comments.

 

Note: these functions are not guaranteed or supported by BrianDunning.com. Please contact the individual developer with any questions or problems.

Support this website.

This library has been a free commmunity resource for FileMaker users and developers for 20 years. It receives no funding and has no advertisements. If it has helped you out, I'd really appreciate it if you could contribute whatever you think it's worth: