Hi RChristiansen,

you wrote:
>This doesn't work...
>
>month: to-string now/month
>if (length? month < 2) [insert month "0"]
>
>** Script Error: Expected one of: string! - not: integer!.
>** Where: if (length? month < 2) [insert month "0"]

Try:

>> if (length? month) < 2 [insert month "0"]
== "5"

>How come?

Since you ask:

1. < is polymorph:

String comparison:

>> "1" < "2"
== true

When the left argument to < is of type string, < expects the right argument
to be of type string as well. 

2. Precedence: 
The < is evaluated first, then the length? operator. Example:
>> "123" < "1234"
== true
>> length? "123" < "1234"
** Script Error: length? expected series argument of type: series port tuple.
** Where: length? "123" < "1234"

What's the complaint? First "123" < "1234" is evaluated and returns true.
Then length? is applied to true. We are applying length? here to a boolean
value. 

Accordingly, this does not work:

>> length? "123" < 10
** Script Error: Expected one of: string! - not: integer!.
** Where: length? "123" < 10

Precedence, < is applied before length? Polymorphism, < detects that its
left argument is a string, and therefore expects the right argument to be a
string as well.

But this does work, because we force length? to be applied first and <
detects an integer left and expects an integer as its right argument:

>> (length? "123") < 10
== true



;- Elan >> [: - )]

Reply via email to