Shopping Cart

Search:

Signup

Contact

FileMaker is a registered trademark of FileMaker, Inc. in the U.S. and other countries.

FileMaker Pro Custom Functions

xShuffle ( string; control )

Rate this function:

Discuss this Custom Function

Nick Lightbody, Deskspace Systems Limited
http://www.deskspace.com

To shuffle a string

Sample Input:
 abcdef, 7
Sample Output:
 cfdeba

Then copy & paste into FileMaker Advanced's Edit Custom Function window.

Description:

Understanding a tail recursive FileMaker Custom Function.

This is just for any non-mathamaticians out there for whom recursion is not second nature. Filemaker has offered recursion since 2007 and this is the first time I felt I understood tail recursion, so this may be helpful for a few former Arts students like me.

Sometimes, when doing encryption it is useful to shuffle sets of characters, for example when creating substitution keys.
In the past I have just written simple scripts in Filemaker to do this because, although I have used and adapted recursive custom functions several times, I have never really understood the difference between a normal recursive function and a tail recursive function.

This is important because the normal form is limited to 10,000 cycles in FileMaker but the tail form can run to 50,000 cycles.

The other day I had to create a shuffle routine within a database definition hence, as I couldn't script it, I had to work out how to create a suitable recursive function.

A quick search found an erudite explanation by Ray Cologon from 2006 which explained the difference...

http://www.filemakertoday.com/com/archive/index.php?t-9986.html

Here is the key quote: "Tail recursion has nothing to do with whether you 'loop' backwards from the end or forward from the beginning. What matters is how values accumulate and are passed down through successive function calls (and in particular, whether the function must feed values via a temporary memory 'stack' in the course of its operation). In the simplest terms, recursive functions that are constructed so that they don't depend on the stack are tail recursive."

In other words, it is tail recursive if you pass all the results of the expression on to the next iteration as parameters without creating local variables.

With that understood it was fairly simple to construct my shuffle function so that it output the shuffled string and a control value, so the control value reduced by 1 on each call and the result of the expression no longer called itself when the control had reduced to zero.

Nick Lightbody
September 9th 2015

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

This is my Custom Function and I want to edit it