Alan Turing specified six primitive function for his machine from which an 
unlimited variety of more complex functions may be built. None of these 
primitive functions could be expressed in terms of the others in the set. It is 
the smallest set that includes the basic functions.

Built-in APL and J function are not so much primitives in a mathematical 
sense—they are more aptly thought of as indigenous. The built-in functions 
include anything that is convenient to have at hand. I think there are also 
considerations of performance and the compiler.

Donna Y
[email protected]


> On Oct 15, 2017, at 10:52 PM, Roger Hui <[email protected]> wrote:
> 
> Isn't it simpler as:
> 
>   jdot=: 0j1&* : (+ 0j1&*) " 0
> 
> Although, the point isn't that it can be defined simply.  The point is to
> have such a function as a primitive.
> 
> 
> 
> 
> On Sun, Oct 15, 2017 at 5:38 PM, Raul Miller <[email protected]> wrote:
> 
>> Well... I do have to admit that j. is both easier to type and (without
>> considerable complex work) significantly more efficient than
>> 
>>   jdot=: ((], 0j_1*-) -:@(++)) : (+ 0j1*])"0
>> 
>> It can also be nice to use.
>> 
>> Thanks,
>> 
>> --
>> Raul
>> 
>> 
>> On Sun, Oct 15, 2017 at 6:55 PM, Roger Hui <[email protected]>
>> wrote:
>>> This is a very interesting topic: What should be a primitive?
>>> 
>>> For example, why do you think j. is a primitive?  This is exercise 8 in
>> *Some
>>> Exercises in APL Language Design
>>> <http://www.jsoftware.com/papers/APLDesignExercises.htm>*.  A possible
>>> answer is also included there.  I don't know that that is _the_ answer in
>>> the context of J.  Iverson designed it and I implemented it without
>>> discussion.  (I should have asked him about it.)  I think the j. function
>>> is one of those masterstrokes which separates a master from the rest of
>> us.)
>>> 
>>> I don't think there is a simple answer to the first question above.  I
>>> believe you have to consider the five "important characteristics of
>>> notation", found in *Notation as a Tool of Thought
>>> <http://www.jsoftware.com/papers/tot.htm>*.  Note that non-redundancy is
>>> not included.
>>> 
>>> 
>>> 
>>> 
>>> 
>>> On Sun, Oct 15, 2017 at 9:04 AM, Raul Miller <[email protected]>
>> wrote:
>>> 
>>>> It's interesting to note how J includes a fair bit of redundancy
>>>> 
>>>> For example, we have - but we also have <: (which is -&1) and we have
>>>> -. (which is 1&-). Why do we have these?
>>>> 
>>>> Primarily, for educational contexts. It can be useful when teaching
>>>> people to have specific words for commonly used operations.
>>>> 
>>>> The underlying principle here, I think, is one of giving people
>>>> multiple perspectives when relaying a concept. I think the hope is
>>>> that at least some of it will "stick".
>>>> 
>>>> But, also, for example, using -. for logical negation segues easily
>>>> into bayesian probability. There, we do not simply have 1 and 0 for
>>>> true and false, but we have a whole range of probabilities in between.
>>>> We can keep using -. for logical negation (it becomes the probability
>>>> of the event NOT happening), but we have to switch from *. to * for
>>>> combing events.
>>>> 
>>>> If A and B are independent probability variables then A*B is the
>>>> probability that both are true. Similarly, if A and B are logical
>>>> variables, then A*B is true if and only if both A and B are true. We
>>>> can use * for logical AND. But the corresponding OR statement would be
>>>> *&.-.
>>>> 
>>>> And J does not define that "bayesian OR" as a primitive, perhaps in
>>>> part to emphasize the need for understanding its derivation, perhaps
>>>> in part because it's only 5 characters already to get the
>>>> implementation and perhaps in part to emphasize the divide between
>>>> probability and logic.
>>>> 
>>>> Anyways, without -. we would instead need *&.(1&-) which is just a bit
>>>> more unwieldy (but which, ok, would still work).
>>>> 
>>>> Food for thought, perhaps...
>>>> 
>>>> Thanks,
>>>> 
>>>> --
>>>> Raul
>>>> ----------------------------------------------------------------------
>>>> 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
>> 
> ----------------------------------------------------------------------
> 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