function is_spam_rules(email): # hand-written rules
   return "free money" in email.text or email.sender in blocklist


 function is_spam_model(email, model): # learned from labeled examples
   features = extract_features(email)
   return model.predict(features)
 # rules are transparent but brittle; learned models adapt but need data and checks
