[mercury-users] Leveraging Perl

Richard A. O'Keefe ok at atlas.otago.ac.nz
Wed May 2 08:48:43 AEST 2001

Peter Schachte <schachte at cs.mu.OZ.AU> wrote:
	One thing you can't do as easily in Mercury is write a simple text file
	filter.  For example, take a .html file containing cities and their current
	weather observations as a big table, and extract and print out the
	information for a particular city.  This is the kind of thing that's pretty
	quick and easy to hack together in Perl.
This is also the kind of thing that is terribly easy to hack WRONG in Perl.
By far the simplest way to do it would be to use SWI Prolog, with its
SGML parser that lets you slurp in HTML or most other SGML applications
(*not* just XML) as a Prolog data structure and then process it as a tree.

I would far rather write something like

    desendant(element(table,_,Rows), Document),
    member(element(tr,_,[element(th,_,['Paris'])|ParisInfo]), Rows)

than any analogous Perl text.  SOmeone really should port the SWI SGML
parser (there's a C core that does everything plus glue to adapt it to
SWI Prolog) to Mercury.

Oh yes,
    descendant(X, X).
    descendant(X, element(_,_,Children)) :-
        member(Child, Children),
        descendant(X, Children).

A very serious problem with using Perl is that it encourages you to treat
structured data as strings, and thereby get them wrong.  I have seen plenty
of Perl scripts for poking around in C sources, for example, but never yet
seen one that got C lexical syntax right.

	Another thing Mercury is not as good at as Perl is rapid prototyping.  If
	you were writing a text processing application in a speed programming
	contest, would you choose Perl or Mercury?  I'd take Perl every time.
I might choose Haskell (types rather like Mercury but normally inferred,
with the advantage of the QuickTest library) or Smalltalk (superlative IDE,
SUnit testing kit), to be honest.  The only "speed programming contests" I
know anything about are the national/regional/international ACM programming
contests, and to win in those your program must produce CORRECT answers.

(For what it's worth, I solved one year's national programming contest
problems in C and Haskell.  The Haskell code was dramatically shorter.
Perl has C-like syntax.  Case closed.)
mercury-users mailing list
post:  mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-users-request at cs.mu.oz.au Message: subscribe

More information about the users mailing list