Because you have to compare ito the interpreters at the time, which were stepping through every character of the line, parsing each command
A=0
B=10
X=A+B
Print X
and doing this in real time, storing each value and then calling subroutines to handle each section, maybe running several hundred bytes of code to complete.
Forth would look something like:
0
10
+
.s
then compile and make this:
LD SP,0FFFFH
LD BC,00000H
LD HL,00010H
PUSH BC
PUSH HL
Call AddStack
POP IY
Call PrintIY
maybe 30 opcodes to complete?
Yes I know all that code is nonsense, this is 30 years ago!!!
It wasn't like modern compliers which are huge and can spend all day optimising every little operation. But basically what you wrote in BASIC was nothing like what the CPU ran, but what you wrote in FORTH was just one step away from the actual opcodes.