Что значит @. делать в Юлии?

Вы можете использовать типичный обратный трафик:

function cartesianProductConcatenate(arr) {
  var data = new Array(arr.length);
  return (function* recursive(pos) {
    if(pos === arr.length) yield data.join('');
    else for(var i=0; i<arr[pos].length; ++i) {
      data[pos] = arr[pos][i];
      yield* recursive(pos+1);
    }
  })(0);
}

Я использовал функции генератора, чтобы избежать одновременного выделения всех результатов, но если вы хотите, вы можете

[...cartesianProductConcatenate([['a', 'b'], ['c', 'z'], ['d', 'e', 'f']])];
// ["acd","ace","acf","azd","aze","azf","bcd","bce","bcf","bzd","bze","bzf"]
1
задан Yly 17 January 2019 в 02:36
поделиться

1 ответ

Вы можете проверить документацию для любой функции Julia, нажав ?, чтобы перейти в режим помощи, см. Вывод ниже:

help?> @.
  @. expr

  Convert every function call or operator in expr into a "dot call" (e.g. convert f(x) to f.(x)), and convert
  every assignment in expr to a "dot assignment" (e.g. convert += to .+=).

  If you want to avoid adding dots for selected function calls in expr, splice those function calls in with $.
  For example, @. sqrt(abs($sort(x))) is equivalent to sqrt.(abs.(sort(x))) (no dot for sort).

. векторизовать все вызовы функций в выражении, следующем за макросом.

Если вы не уверены, как работает любой макрос Julia, я рекомендую использовать макрос @macroexpand, например:

julia> @macroexpand @. [1, 2, 3] + [4, 5, 6]
:((+).([1, 2, 3], [4, 5, 6]))
0
ответ дан Przemyslaw Szufel 17 January 2019 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: