Анонимная функция Юлия - значение х - PullRequest
2 голосов
/ 15 июня 2019

Я не понимаю, откуда инициализируется x, потому что он используется в следующем сравнении.

Я попытался показать значение x или a.

У меня есть этокод:

a = x -> ifelse(ε > x, 1, ifelse(ε < -x, -1, 0))
println(a)

x не инициализирован ранее - что означает этот код?Является ли x случайным числом из normal distribution со средним 0?

Ответы [ 2 ]

3 голосов
/ 15 июня 2019

Вот упрощенная версия кода, на который вы ссылаетесь:

θ = zeros(1000) # or some other vector
ε = randn()
sum(x -> ifelse(ε > x, 1, ifelse(ε < -x, -1, 0)), θ)

Теперь x -> ifelse(ε > x, 1, ifelse(ε < -x, -1, 0)) определяет анонимную функцию, которая принимает один аргумент x и возвращает -1, если x меньше , 1, если оно больше ε, а в противном случае возвращает 0.

Тогда один из методов функции sum в Julia принимает два аргумента: функцию и коллекцию. Он работает так, что применяет анонимную функцию x -> ifelse(ε > x, 1, ifelse(ε < -x, -1, 0)) к каждому элементу θ и вычисляет сумму возвращаемых значений.

EDIT

В качестве альтернативы вы можете определить этот код, например, в

sum(ifelse(ε > x, 1, ifelse(ε < -x, -1, 0)) for x in θ)
0 голосов
/ 16 июня 2019

Функции в Julia - это объекты первого класса: их можно назначать переменным и вызывать с использованием стандартного синтаксиса вызова функции из переменной, которой они были назначены. Они могут быть использованы в качестве аргументов и могут быть возвращены в качестве значений. Они также могут быть созданы анонимно, без имени, используя любой из этих синтаксисов:

Рассмотрим простую функцию ниже

 function MyPlus(x,y)
       x + y
 end

Анонимная версия функции -

a = (x,y) -> x + y

Так что у нас есть

символ a представляет переменную a, которая содержит функцию. В частности, он содержит анонимную функцию

символ x представляет переменную DUMMY, которая используется для создания анонимной функции. Он не имеет значения вне определения анонимной функции

символ y представляет переменную переменную, которая используется для создания анонимной функции. Он не имеет значения вне определения анонимной функции

Поскольку и x, и y являются фиктивными переменными, их не нужно инициализировать, и они не содержат значения вне определения анонимной функции. Фактически они даже не существуют вне определения анонимной функции.

В x и y нет ничего особенного, вы можете использовать любой символ, включая

mama = (baby,toy) -> baby + toy
...