A boolean expression is required
This error message is produced when a statement requires a boolean value to evaluate, but instead the receives a different type. The Relevance language is strongly typed, and inattention to proper type matching is the source of most bugs. Among other things, a boolean type is required after if and whose statements. For example:
Q: Names of files whose (version of it = "5") of system folder
This example works because the value in the parenthesis is a boolean. Otherwise you get this error, as in this incorrect example:
Q: Names of files whose (version of it) of system folder
E: A boolean expression is required.
Here, the parenthetical statement doesn't evaluate to a boolean, so the expression fails with an error.
The test for an if-then statement must also be boolean. You might think a non-zero number would evaluate to true, but types must be carefully matched, and in the Relevance language, a number is a number, and not a boolean:
Q: if 1 then "boo" else "hoo"
E: A boolean expression is required.
One (1) is a number; use a boolean instead:
Q: if 1=1 then "boo" else "hoo"
A: boo
Which is the same as
Q: if true then "boo" else "hoo"
A: boo
Along the same lines, you might think to test for an executable file like this:
Q: If regapp "besclient.exe" then version of regapp "besclient.exe" as string
else "N/A"
E: A boolean expression is required.
Instead, you should check for the existence of the file, which is boolean:
If exists regapp "besclient.exe" then version of regapp "besclient.exe" as string
else "N/A"