Difference between revisions of "User:Dora Gustafson/occurences"
Jump to navigation
Jump to search
(Count occurencces in a list) |
|||
Line 27: | Line 27: | ||
} | } | ||
</lsl> | </lsl> | ||
This program is straight, a recursive approach follows | |||
<lsl> | |||
// count occurrences in list; by Dora Gustafson, Studio Dora 2014 | |||
// v1.1 inline code | |||
// v1.2 recursive approach | |||
list haystack = [1,2,1,2,1,2,3,2,4,5,2,6,4,2,3,2,1,8]; | |||
list needle = [2]; | |||
integer j = 0; | |||
tin( list L ) | |||
{ | |||
integer k = llListFindList( L, needle); | |||
if ( k >= 0 ) | |||
{ | |||
++j; | |||
if ( k+1 < llGetListLength(L) ) tin( llList2List( L, k+1, -1)); | |||
} | |||
} | |||
default | |||
{ | |||
state_entry() | |||
{ | |||
tin( haystack); | |||
llOwnerSay((string)needle+" occurs "+(string)j+" times in "+llDumpList2String( haystack, ", ")); | |||
} | |||
}</lsl> | |||
The advantage of recursion over straight code is a shorter code(the code is reused)<br> | |||
The disadvantages are longer execution time and more overhead generated at runtime | |||
: For these reasons the recursion approach is a bad choice to search a long list in LSL | |||
{{LSLC|Library}} | {{LSLC|Library}} |
Revision as of 02:19, 2 April 2014
Count Occurrences in a list
Look for and count anything, that can be an element, in a list
- This script is an example which include a list: "haystack" and an element: "needle"
- Here "haystack" and "needle" are constants and only meant to make up a working script
<lsl> // count occurrences in list; by Dora Gustafson, Studio Dora 2014 // v1.1 inline code
default {
state_entry() { list haystack = [1,2,1,2,1,2,3,2,4,5,2,6,4,2,3,2,1,8]; list needle = [2]; integer i = 0; integer j = 0; integer k = llListFindList( haystack, needle); integer m = llGetListLength( haystack ); while ( k >= 0 && i < m ) { i += k+1; k = llListFindList( llList2List( haystack, i, -1), needle); ++j; } llOwnerSay((string)needle+" occurs "+(string)j+" times in "+llDumpList2String( haystack, ", ")); }
} </lsl> This program is straight, a recursive approach follows <lsl> // count occurrences in list; by Dora Gustafson, Studio Dora 2014 // v1.1 inline code // v1.2 recursive approach
list haystack = [1,2,1,2,1,2,3,2,4,5,2,6,4,2,3,2,1,8]; list needle = [2]; integer j = 0;
tin( list L ) {
integer k = llListFindList( L, needle); if ( k >= 0 ) { ++j; if ( k+1 < llGetListLength(L) ) tin( llList2List( L, k+1, -1)); }
}
default {
state_entry() { tin( haystack); llOwnerSay((string)needle+" occurs "+(string)j+" times in "+llDumpList2String( haystack, ", ")); }
}</lsl>
The advantage of recursion over straight code is a shorter code(the code is reused)
The disadvantages are longer execution time and more overhead generated at runtime
- For these reasons the recursion approach is a bad choice to search a long list in LSL