GNU APL 中的柯里化
Currying in GNU APL
我试图在 GNU APL 中“套用”一个函数,但它似乎不起作用?
例如:
(1∘+) 1
SYNTAX ERROR
(1∘+)1
^ ^
我做错了什么? ∘ 是不是使用了错误的字形?
GNU APL 没有 Bind meaning of ∘
, found in Dyalog 和相关的实现。相反,∘
字形专门用于外积符号,∘.f
.
不过,您可以自己定义一个合理的替代品:
∇ r←(a o b)z
→3⌊⎕NC'b'
r←z a b ⋄ →0
r←a b z
∇
它几乎可以像原语一样使用,除了需要在其左侧与名称相邻时使用 space 或在其右侧使用 non-glyph:
(1o+) 1
2
(+o 1) 1
2
1o+ 1
2
注意上面的替代品不提供功能composition。为了也包括这一点,我们必须寻求更复杂的定义:
∇ r←x(a o b)y ⍝ ∘
→2⌈¯5+2⊥3⌊⎕NC⍪'ab'
r←a b y ⋄ →0 ⍝ A∘f
r←y a b ⋄ →0 ⍝ f∘B
⍎'x←{⍵}'/⍨0=⎕NC'x'
r←x a b y ⍝ f∘g
∇
现在一切正常:
(1o+) 1
2
(+o 1) 1
2
1o+ 1
2
1+o|¯1
2
我试图在 GNU APL 中“套用”一个函数,但它似乎不起作用?
例如:
(1∘+) 1
SYNTAX ERROR
(1∘+)1
^ ^
我做错了什么? ∘ 是不是使用了错误的字形?
GNU APL 没有 Bind meaning of ∘
, found in Dyalog 和相关的实现。相反,∘
字形专门用于外积符号,∘.f
.
不过,您可以自己定义一个合理的替代品:
∇ r←(a o b)z
→3⌊⎕NC'b'
r←z a b ⋄ →0
r←a b z
∇
它几乎可以像原语一样使用,除了需要在其左侧与名称相邻时使用 space 或在其右侧使用 non-glyph:
(1o+) 1
2
(+o 1) 1
2
1o+ 1
2
注意上面的替代品不提供功能composition。为了也包括这一点,我们必须寻求更复杂的定义:
∇ r←x(a o b)y ⍝ ∘
→2⌈¯5+2⊥3⌊⎕NC⍪'ab'
r←a b y ⋄ →0 ⍝ A∘f
r←y a b ⋄ →0 ⍝ f∘B
⍎'x←{⍵}'/⍨0=⎕NC'x'
r←x a b y ⍝ f∘g
∇
现在一切正常:
(1o+) 1
2
(+o 1) 1
2
1o+ 1
2
1+o|¯1
2