A linguagem J está se aproximando das pessoas

Uma característica distintiva da linguagem J é a capacidade de escrever algoritmos iterativos sem usar explicitamente loops e recursão. Por exemplo, a soma de todos os elementos da matriz é resolvida como " +/" e a média de todos os elementos da matriz é " +/%#".



Várias resenhas de J já foram publicadas no Habré mais de uma vez. Por exemplo, neste artigo e neste .



J é uma língua com uma história de 30 anos e ainda está se desenvolvendo e melhorando. No entanto, havia apenas um “ponto cego” em J - algoritmos iterativos com parada condicional. Para isso, foi proposta a utilização da construção while. emparelhado com pausa. E continue.



Usando enquanto. em J parece redundante e estranho. E, além disso, ele cai seriamente em velocidade em comparação com as formas tácitas.



E na 9ª versão da linguagem, uma nova união F foi adicionada (nomeada após a primeira letra da palavra "dobra").







Para comparação, vamos resolver o problema usando while. e usando uma nova união A

condição é simples: obtenha uma nova matriz da matriz original, que contém os valores duplicados dos elementos. O comprimento da nova matriz é especificado externamente e pode ser menor que o original.

Primeiro usando while.



t =: dyad define
c =. 0
i =. i.x
z =. $0
while. -. c = y
do. 
z =. z , (+: (c { i))
c =. >: c
end.
z
)
10 t 5
    0 2 4 6 8


E agora a solução usando a nova união F. Vamos adicionar que a condição para sair do loop é verificada usando o verbo Z:




COUNT =: 6
v=: dyad define
_2 Z: -.* COUNT =: <: COUNT
x
)
'' +: F:. v (i.10)
    0 2 4 6 8


A documentação promete que F. será não apenas mais conveniente, mas também mais rápido enquanto. Eventualmente, J está se aproximando das pessoas!



Pessoas com conhecimento em PS podem notar que este problema pode ser facilmente resolvido sem o uso de construções cíclicas e novas. Basta extrair um subarray com o comprimento necessário e processá-lo na forma tácita. No entanto, em problemas reais, muitas vezes acontece que o comprimento do subarray não é conhecido com antecedência e a condição de parada é calculada durante a operação do algoritmo.



All Articles