Viikon pähkinä

Jarkko Hietaniemi jhi at iki.fi
Mon Mar 15 09:29:58 CST 1999


Sami Poikonen writes:
 > 
 > Koitetaanpa saada keskustelua listalle nyt tällaisella ongelmalla;
 > 
 > Meillä on merkkijono $str. 
 > Se sisältää useita sanoja.
 > On tietyt sanat qw(AND OR NOT XOR) 
 > jotka eivät saa esiintyä peräkkäin.
 > eli "AND AND OR" on väärin.
 > Poikkeuksena kuitenkin "AND NOT" ja "OR NOT" ovat sallittuja.
 > 
 > Tehtävä: tee regexp, joka korvaa vialliset kohdet merkkijonosta
 > vaikka ilmoituksella [error! (virheellinen merkkijono)]

Sanoisin että pähkinä on väärä :-)

Eli yllä kuvatulla tavalla kyllä saa muutaman helpon virheen
siivilöityä pois mutta koska kyseessähän on(han?) jokin kyselykieli
joka sallii millaisen vaan laillisen AND OR NOT XOR yhdistelyn,
sellaisen kielen oikeellisuutta ei pelkillä regexpeillä tarkisteta.
(Tai, no, ehkä Ilyan uusimmilla anabolisteroidiversioilla...)

Tarvitsee ihan oikeasti jäsentää lauseke.  Esimerkiksi: ylläolevien
sääntöjen mukaan "a NOT b" on oikein, tai "AND a OR", tai "a NOT",
tai "OR a b", tai "XOR a", tai "a b c", tai ...

 > Esim.
 > x AND y -> x AND y
 > a AND OR y -> x [error! AND OR] y
 > a NOT OR NOT y -> x [error! NOT OR NOT] y
 > 
 > Tehtävähän on äärimmäisen helppo, jos poikkeustapauksia "AND NOT" ja "AND
 > OR" ei tarvitse ottaa huomioon.

Jos nyt välttämättä haluat vastauksen tähän väärään pähkinään:

$ok{AND}{NOT} = $ok{OR}{NOT} = 1;
$op = "AND|OR|NOT|XOR";
s/\b($op)\s+($op)\b/$ok{$1}{$2}?"$1 $2":"[error! ($1 $2)]"/eg;

 > ps. Onko olemassa jotain moduulia, joka osaisi yksinkertaisia
 > loogistenlauseiden sievennyksia; tautologiat, de morganin lauseen yms.

Ei tule mieleen.

-- 
$jhi++; # http://www.iki.fi/jhi/
        # There is this special biologist word we use for 'stable'.
        # It is 'dead'. -- Jack Cohen



More information about the Helsinki-pm mailing list