On Sat, Jul 2, 2022 at 12:21 PM Jacques Bailhache
<[email protected]> wrote:
> but I don't see how to implement the combinator S.
> It must satisfy :
> ((S ap a) ap b) ap c = (a ap c) ap (b ap c)
Here's one approach:
ap=: {{ ({. {{ x`:6 y }} }.) x,y }}
I=: ]`''
K=: {{ if. 1<#y do. 1{.y else. K`y end. }}`''
S=: {{ if. 2<#y do. (((0{y) ap (2{y)) ap ((1{y) ap 2{y))`'' else. S`y end. }}`''
N=: 9:`''
a=: K
b=: I
c=: N
(((S ap a) ap b) ap c) = (a ap c) ap (b ap c)
1
(Note that the result of N is not valid in an argument list for K or S.)
Note also that I have not implemented "parenthesis" here (I have not
implemented encapsulating a function with an incomplete argument list
as a single deferred function with deferred structure but without
immediate structure). The wikipedia writeup on SKI combinators refers
to binary trees, so I thought I should mention that.
I hope this helps,
--
Raul
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm