10.4. IMPLICIT ITERATION using vs .net torender ecc200 on web,windows application QR Exhibit 10.35. Implici .

net vs 2010 Data Matrix t looping in dBMAN. Assume the current record type has elds named lastname, sex, hours, grosspay, and withheld, and that the current le contains records of this type for each employee. Statistics can be gathered on subsets of the le selected by simple statements which access each record in the le and test or process it.

Examples of dBMAN commands follow: 1. display all for lastname = Jones and sex = M 2. copy to lowpay.

dat all for grosspay < 10000 3. sum grosspay, withheld to grosstot, wheldtot all for hours > 0 Line 1 nds and displays all male employees named Jones. Line 2 creates a new le that contains copies of some of the records in the current le.

Line 3 sums the current gross pay and withholding elds for all employees who have logged some working hours.. A more important bene t of implicit looping is its exibility. Any size or shape of arrays can be accommodated, so long as every operator is called with arguments whose shapes make sense when combined. APL de nes iteration patterns for scalar/scalar, scalar/vector, scalar/matrix, vector/vector, vector/matrix, and so on through higher and higher dimensional objects.

The APL code that counts the occurrences of W in Z (+/ Z=W ) will work on any shape matrix, and it also will provide a meaningful answer if W is a simple integer. Di erent C code would have to be written for those cases. The primary data aggregate type supported by functional languages is the list, and the implicit iterative functions in these languages process lists.

In APL the data aggregate type is the array, and operators are iterated over arrays. A data base language such as dBASE also makes extensive use of implied iteration to process all data elements of its basic aggregate type, which is le . dBMAN, a dBASE look-alike for the Atari computer, supports many operations that test or manipulate each record in a le, in turn, possibly producing a new le as the result.

Examples of such operations are display and sum [Exhibit 10.35]. The term fourth-generation language , sometimes applied to data base languages, recognizes the great ease with which large volumes of data can be manipulated using implicitly iterative statements.

. Backtracking A few languages exist that not only support implicit iteration, but combine it with a trial-and-error backtracking algorithm to enable the programmer to write pattern matching expressions. Prolog will search a data base of relations and extract items, one at a time, that match a pattern speci ed by the programmer. SNOBOL and its successor, ICON, search text strings for the rst section that.

CHAPTER 10. CONTROL STRUCTURES Exhibit 10.36. A data base of Prolog relationships.

1. 2. 3.

4. 5. 6.

likes(Sara,John) likes(Jana,Mike) likes(Mary,Dave) likes(Beth,Sean) likes(Mike,Jana) likes(Dave,Mary) 7. likes(John,Jana) 8. likes(Sean,Mary) 9.

does(Mike,skating) 10. does(Jana,swimming) 11. does(Sara,skating) 12.

does(Dave,skating) 13. 14. 15.

16. does(John,skating) does(Sean,swimming) does(Mary,skating) does(Beth,swimming). matches a speci ed pat gs1 datamatrix barcode for .NET tern (these patterns can be very complex). In all three languages the semantics of the search command requires that all possibilities must be examined before returning a FAIL result.

In some cases this can be done only by making a trial match, then continuing the matching process. If the process later fails, then the system must back up to the point it made the trial match, discard that possibility, and search for a di erent trial match. This process is called backtracking .

The implementation of backtracking uses a stack to store pointers to the positions at which each trial match was made. It is a well-understood recursive process but nontrivial to write and potentially very slow to execute. We can illustrate this process by a Prolog example.

Prolog maintains a data base of facts and relations. It searches this data base in response to queries, looking for a set of facts that match the user s requirements. Each query is one or a series of patterns to be matched, in order.

As each pattern is matched, any variables in the pattern become bound to the corresponding values in the fact, and a marker is left pointing to that fact. If some later pattern cannot be matched, Prolog will come back to this marker and try to nd another match. All searches start at the top of the data base and move sequentially through it.

If the end of the data base is reached and a matching fact is not found, Prolog returns the answer no . Exhibit 10.36 contains a brief data base about a group of teenagers, their current crushes, and their favored activities.

The numbers listed are not part of the data base but are for the purpose of tracing the pattern matching operation. The reader should keep in mind that this data base and the query we will trace are both very simple. Prolog can express far more complex relationships with multiple, nested dependencies.

The owner of this data base is looking for a compatible couple to share an afternoon of sport with himself and his date. Exhibit 10.37 gives his query, which contains four goals to be satis ed together.

When and if a match is found, Prolog will tell him the girl, the guy, and the activity he wants. The chart below the query traces the steps Prolog would follow in trying to match all the patterns. String processing and arti cial intelligence application programs commonly need to perform exhaustive searches.

Thus the implicit iteration plus backtracking provided in ICON and Prolog make them very appropriate and very powerful languages for these application areas..
Copyright © . All rights reserved.