Hi Skip,

    You are right.

        Don

----- Original Message ----- 
From: "Skip Cave" <[email protected]>
To: "Chat forum" <[email protected]>
Sent: Wednesday, April 29, 2009 3:14 AM
Subject: Re: [Jchat] Language S


> Don,
>
> Your conversion of my tacit expression to S seems OK. However, since I
> have no way to execute the tacit S expression, it is difficult for me to
> say whether it would produce the same results as the original tacit J
> expression.
>
> The true proof of the pudding would be for you to develop a simple tacit
> S interpreter, to see what issues you get into. Your  rules for
> converting from J tacit to S tacit seem fairly straightforward. You
> should be able to write a J program that takes an S tacit expression,
> converts it into a J tacit expression, executes the J expression, and
> returns the result. If you can do this, then we can explore the S syntax
> much more thoroughly. If your interpreter would also print out the
> interim J tacit version of the S expression, then we would have an
> excellent vehicle for discussing the finer points of S tacit syntax vs.
> J tacit.
>
> Skip Cave
>
>
> Don Watson wrote:
>> Hi Skip,
>>
>>     I will indeed do as you suggest. It's a good idea and I totally agree
>> that it is up to me to convince everyone.
>>
>>     In the meantime, you gave me the following example to convert. I have
>> done my best. If I have not made a mistake with my lack of J experience, 
>> I
>> would be surprised. You said:
>>
>>
>>>    3 (<:@[ <.[ <.@(] * [ % [: >./ ]) (- <./)@]) i. 21
>>> 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 2 2 2 2 2
>>>
>>
>>
>>> How would S simplify this tacit expression?
>>>
>>
>>     Here we go, starting from your expression:
>>
>> 3 ( <:@[ <.[ <.@(] * [ % [: >./ ]) (- <./)@]) i. 21   29
>>
>> Let's replace all "]" and "[" by y and x for the moment and take away the
>> arguments.
>>
>>  ( <:@x <.x <.@(y * x % [: >./ y) (- <./)@y)
>>
>> The parenthesis of the fork aren't needed, nor is the "@:" to the right 
>> of
>> it.
>>
>> ( <:@x <.x <.@(y * x % [: >./ y) - <./y)
>>
>> The cap isn't needed since verbs are monadic if they have a verb to their
>> left in a right to left system.
>>
>> ( <:@x <.x <.@(y * x % >./ y) - <./y)
>>
>> The next "@" is acting as a parenthesis that makes certain that the "x<." 
>> is
>> used before the subtraction, so we can replace it with parentheses.
>>
>> ( <:@x <.(x <.(y * x % >./ y)) - <./y)
>>
>> The last "@" symbol is also acting as a parenthesis to ensure that the
>> monadic verb "<:" acts on x before it is input to the dyadic verb on its
>> right, so that we can parenthesize it and remove the "<@"
>>
>> ( (<:x) <.(x <.(y * x % >./ y)) - <./y)
>>
>> Thus this must be the equivalent explicit expression. To turn it into
>> revised tacit form, replace all "x"s with "[" and all "y"s with "]". Now 
>> we
>> have converted current tacit form to a revised tacit form we can put the
>> arguments back.
>>
>> 3  ( (<:[) <.([ <.(] * [ % >./ ])) - <./]) i. 21
>>
>> Right to left tends to generate more parentheses - but it is much easier 
>> to
>> convert to tacit form and once you understand right to left, that's the 
>> only
>> rule you have to learn, apart from replacing x and y with [ and ] to turn
>> into tacit and vice versa to return.
>>
>>     I expect you to find mistakes, but it's an attempt.
>>
>>         Don
>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
>>
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm 

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to