Inquisit expressions supports all of the basic operators for doing arithmetic, comparing values, and creating logical statements. The complete list of operators and their syntax is listed below.
Arithmetic operators are used to perform additional, subtraction, multiplication, and division.
Operator | Description | Examples |
---|---|---|
+ | Adds numeric operands or concatenates two or more strings. |
trial.condition1.correctcount + trial.condition2.correctcount values.firstscore + values.secondscore response.rw.windowcenter + 500 |
- | Subtracts numeric operands. |
100 - trial.mytrial.percentcorrect block.incompat.meanlatency - block.compat.meanlatency |
* | Multiplies numeric operands. |
trial.test.correctcount * 5 trial.test.trialcount * trial.test.meanlatency |
/ | Divides numeric operands. |
trial.mytrial.percentcorrect / 100 block.myblock.sumlatency / block.myblock.trialcount |
+= | Adds the value of an expression to the value of a variable and assigns the result to the variable. |
values.trialcount += 1 values.totalfalsealarms += values.falsealarmcount |
-= | Subtracts the value of an expression to the value of a variable and assigns the result to the variable. |
values.remainingtrialcount -= 1 values.totalpoints -= values.errorcount |
Comparison operators compare the values of the right and left operands and return a Boolean value of true or false.
Operator | Description | Examples |
---|---|---|
== | True if the right and left values are equal. Otherwise false. |
trial.iat.trialcount == 100 block.compat.percentcorrect == 0 trial.foo.correct == 1 |
!= | True if the left and right values are not equal. Otherwise false. |
trial.iat.trialcount != 1 block.compat.percentcorrect != 100 response.rw.windowcenter != 0 |
< | True if the left value is less than the right. Otherwise false. |
trial.iat.trialcount < 25 block.compat.percentcorrect < 100 trial.test.latency < 500 |
<= | True if the left value is less than or equal to the right. Otherwise false. |
trial.iat.trialcount <= 25 block.compat.percentcorrect <= 100 trial.test.latency <= 500 |
> | True if the left value is greater than the right. Otherwise false. |
trial.iat.currenttrialnumber > 25 block.compat.percentcorrect > 50 trial.test.latency > 500 |
>= | True if the left value is greater than or equal to the right. Otherwise false. |
trial.iat.currenttrialnumber >= 25 block.compat.percentcorrect >= 50 trial.test.latency >= 500 |
The assigment operator assigns a value to a property. Note that the operand on the left must be a writable property. Many properties (computer.cpuspeed, for example) are read-only values that can not be changed. An expression that attempts to assign a value to a read-only property will fail.
Operator | Description | Examples |
---|---|---|
= | Sets the value of the left operand to that of the right. |
items.targets.item.1 = trial.gettargets.response response.rw.windowcenter = response.rw.windowcenter - 100 values.score = trial.game.correctcount * 5 |
Logical operators return true or false depending on whether the operands are true or false. These operators are especially useful in conditional if-else statements that involve multiple conditions.
Operator | Description | Examples |
---|---|---|
&& | Logical AND. True if both the left AND right operators are true. False if either operand is false. |
if (block.test1.percentcorrect == 100 && block.test2.percentcorrect == 100) values.perfectscore = true if (block.test.percentcorrect < 70 && block.test.medianlatency > 500) response.rw.windowcenter = 600 |
|| | Logical OR. True if either the left OR right operand is true. False if both operands are false. |
if (block.test1.percentcorrect < 100 || block.test2.percentcorrect < 100) values.perfectscore = false if (trial.test.latency < 100 || trial.test.latency > 1000) values.discard = true |
! | Logical NOT. True if the operand is NOT true. False if the operand is NOT false. | values.imperfect = !values.perfect |
Conditional statements consist of two parts, a condition that evaluates to true or false, and a statement that is evaluated if the condition part is true. Conditional statements are often referred to as "if-else" statements. These are useful for event logic that conditionally updates values. They are also used by the branch attribute to determine whether any branching should occur.
Statement | Description | Examples |
---|---|---|
if ... else if ... else | If the condition is true, then evaluate the first statement, otherwise evaluate the second statement. |
if (block.test1.percentcorrect == 100 && block.test2.percentcorrect == 100) values.perfectscore = true if (block.test.percentcorrect < 70 && block.test.medianlatency > 500) response.rw.windowcenter = 600 if (block.test1.percentcorrect < 100 || block.test2.percentcorrect < 100) values.perfectscore = false else values.perfectscore = true |
You can use parentheses to set the order in which operations are applied, or to make your statements easier to read.
Delimiter | Description | Examples |
---|---|---|
() | Contains a set of statements that should be evaluated as a unit. |
values.imperfect = (trial.test2.sumlatency + trial.test1.sumlatency) / (trial.test2.trialcount + trial.test1.trialcount) |
Multiple statements can be expressed in event logic by separating each statement with a semi-colon.
Delimiter | Description | Examples |
---|---|---|
; | Delimiter for multiple statements |
values.imperfect = !values.perfect; items.targets.item.1 = trial.gettargets.response; values.score = trial.game.correctcount * 5 |