person.matzo 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. gender:= Male | Female | Unspec;
  2. byGender := { [m,f,n] => { [Male] => m; [Female] => f; [_] => n }};
  3. ending := byGender["o","a","e"];
  4. pronoun := byGender["He","She","They"];
  5. noun := byGender["man","woman","person"];
  6. are := byGender["is","is","are"];
  7. have := byGender["has", "has", "have"];
  8. cons ::= p t c d g r l m n x;
  9. vowel ::= a e i o u;
  10. name := { [g] => (vowel | "") rep[1..3, cons vowel] cons ending[g] };
  11. hairColor ::= black brown blonde;
  12. eyeColor ::= brown green blue;
  13. job := { [g] =>
  14. "stonemason"
  15. | "baker"
  16. | "accountant"
  17. | case g in
  18. { Male => "fisherman"
  19. ; Female => "fisherwoman"
  20. } };
  21. tool := { ["stonemason"] => "chisel"
  22. ; ["baker"] => "bowl"
  23. ; ["accountant"] => "tablet"
  24. ; [_] => "fishing pole"
  25. };
  26. adjective ::= happy cheerful focused quiet meek rash;
  27. person :=
  28. let fix my-gender := gender in {
  29. let fix my-job := job[my-gender] in {
  30. "You come across " str/capitalize[name[my-gender]] ", a " noun[my-gender]
  31. " from the city of " str/capitalize[name[Female]] ". "
  32. pronoun[my-gender] " " are[my-gender] " a hardworking " my-job " with "
  33. hairColor " hair and " eyeColor " eyes. "
  34. str/capitalize[pronoun[my-gender]] " "
  35. have[my-gender] " a " tool[my-job] " and " are[my-gender] " very " adjective "." } };
  36. puts person;