我最近开始了一次代码高尔夫挑战,似乎赢家是GolfScript (惊喜,惊喜!)。有趣的是,还有一个非常强大的竞争对手有机会战胜GolfScript。它的名字是APL我在APL上看到了很多答案。似乎这种语言对于代码高尔夫球相当有效,所以我决定向您提供您所知道的APL程序的任何代码高尔夫技巧。可以随意发布一些代码示例。看到语言在起作用通常是非常有趣的。
发布于 2014-01-05 23:31:34
编辑:对于那些根本不懂APL但想要使用APL的人来说,掌握Dyalog APL是一个非常好的资源。
2+a, 1+a←1 -> 3 4 a设置为1,1+a计算为2,a,2计算为1 2,2+1 2计算为3 4。←可以与一个函数(即a +← 3 )结合。与C不同,这是通用的:foo F← bar将foo设置为F bar。这在某种程度上是不直观的,它作为表达式返回bar,而不是F bar。它也适用于匿名函数:一个a+←3 0←⋄,3 a+←3⋄,6a{⍵/‘!’}←4⋄a!A[3]←8。但是,您也可以同时分配多个项:A[3 5 6]←9 1 4,甚至A[3 5 6]←9,将它们全部设置为同一项。当然,您也可以在这里向←添加一个函数。然后,函数将分别应用于每个元素,就好像您执行了F¨一样。⍨是你的朋友,即使他看起来不太高兴。F是并元,并元⍨将切换参数:a F b <-> b F⍨ a。这在打高尔夫球时很有用,因为它可以避免你使用牙套:( right )K <-> y K⍨F G H这确实改变了评估顺序,因为右手总是在左手之前被计算。F是二进位元,则一元⍨对函数的两边应用相同的参数: 5⍴5 5 5⍴⍨5 5 5,参数只计算一次。这对于外部产品尤其有用,例如,要将数组中的每个值与同一数组中的其他值进行比较,您可以使用∘.=⍨而不必执行x∘.=x←(whatever)。F是一元的,那么⍨什么也不做,但是它确实将函数与参数分开。因此,如果函数是复杂的,仍然可以保存大括号:{⍵+3}⍣5 6∇{⍵+3}∇⍣5 6 ({⍵+3}⍣5)6 21 {⍵+3}⍣5⍨6 21⊃ (首先)等价于1↑ (取一个)。并且可能: X⌿⍨Y^.=⍨X↑⍨(≢X),⍴Y ≢ (理货)与⊃⍴ (形状的第一个元素)等价,但标量除外。发布于 2015-01-01 13:55:36
A(f g h)B ←→ (A f B)g A h B ⍝ fork
(f g h)B ←→ ( f B)g h B ⍝ fork
A( g h)B ←→ g A h B ⍝ atop
( g h)B ←→ g h B ⍝ atop
(A g h) ←→ ({A} g h) ⍝ "Agh" fork
(f g h k) ←→ (f (g h k)) ⍝ 4-train
(f g h k l) ←→ (f g (h k l)) ⍝ 5-train, etc
(f g h k l m) ←→ (f(g h(k l m))) ⍝ groups of 3 from the right, last could be 2
f∘g B ←→ f g B ⍝ "compose" operator, useful in trains
A f∘g B ←→ A f g B发布于 2018-08-07 07:53:32
⊥将乘法和加法结合起来
(a×b)+C -> a⊥b,C
(C)+a×b -> a⊥b,C
(a×b)-C -> a⊥b,-C假设:
a和b是在用作左参数时不需要进一步括号的术语。C是一个表达式,当用作左参数时可能需要括号。a b C求值为数值标量https://codegolf.stackexchange.com/questions/17665
复制相似问题