For loop Elixir:为生成器分配变量(变量范围?)
我正在解决 下面的Elixir代码抛出警告,并且不在if块(赋值)中求值,我认为: 如何更新(分配)数值For loop Elixir:为生成器分配变量(变量范围?),for-loop,scope,elixir,variable-assignment,For Loop,Scope,Elixir,Variable Assignment,我正在解决 下面的Elixir代码抛出警告,并且不在if块(赋值)中求值,我认为: 如何更新(分配)数值num? (以下Python和Javascript代码用于解决同一问题): 实际上,您正在创建一个新变量,并从外部范围中隐藏该变量 你可以这样重写 num = 13195 range = num |> :math.sqrt() |> Float.floor() |> round num = 2..range |> Enum.reduce(
num
?
(以下Python和Javascript代码用于解决同一问题):
实际上,您正在创建一个新变量,并从外部范围中隐藏该变量 你可以这样重写
num = 13195
range =
num
|> :math.sqrt()
|> Float.floor()
|> round
num =
2..range
|> Enum.reduce(num, fn elem, acc ->
if rem(acc, elem) == 0 and div(acc, elem) != 1 do
div(acc, elem)
else
acc
end
end)
IO.puts num
有关阴影的详细信息:
嵌套作用域中的任何变量,如果其名称与周围作用域中的变量一致,则该外部变量将被隐藏。换句话说,嵌套范围内的变量会临时隐藏周围范围内的变量,但不会以任何方式影响它
实际上,您正在创建一个新变量,并从外部范围隐藏该变量 你可以这样重写
num = 13195
range =
num
|> :math.sqrt()
|> Float.floor()
|> round
num =
2..range
|> Enum.reduce(num, fn elem, acc ->
if rem(acc, elem) == 0 and div(acc, elem) != 1 do
div(acc, elem)
else
acc
end
end)
IO.puts num
有关阴影的详细信息:
嵌套作用域中的任何变量,如果其名称与周围作用域中的变量一致,则该外部变量将被隐藏。换句话说,嵌套范围内的变量会临时隐藏周围范围内的变量,但不会以任何方式影响它
谢谢!学习使用reduce进行更新。顺便说一句,Elixir变量在(或包含所有do~end)范围内有界?谢谢!学习使用reduce进行更新。顺便说一句,Elixir变量在(或包含所有do~end)范围的
中有界?在Elixir中,变量是不可变的。可以将符号重新指定给新值,但不能更新正在枚举的变量的值。而是将更新后的值(实际上是一个新变量)传递给函数。这就是Enum.reduce在《赞美太阳》中所做的。在Elixir中,变量是不变的。可以将符号重新指定给新值,但不能更新正在枚举的变量的值。而是将更新后的值(实际上是一个新变量)传递给函数。这就是Enum.reduce在赞美太阳
的答案中所做的。
# 3.py
from math import ceil, sqrt
num = 600851475143
for div in range(2, ceil(sqrt(num)) + 1):
if num%div == 0 and num/div != 1:
num /= div
assert int(num) == 6857
// 3.js
var num = 600851475143;
var range = Array.from({length: Math.trunc(Math.sqrt(num))}, (x, i) => i + 2)
for (const div of range) {
if (num%div === 0 && num/div != 1) {
num /= div;
}
}
var assert = require('assert');
assert(num === 6857)
num = 13195
range =
num
|> :math.sqrt()
|> Float.floor()
|> round
num =
2..range
|> Enum.reduce(num, fn elem, acc ->
if rem(acc, elem) == 0 and div(acc, elem) != 1 do
div(acc, elem)
else
acc
end
end)
IO.puts num
+------------------------------------------------------------+
| Top level |
| |
| +------------------------+ +------------------------+ |
| | Module | | Module | |
| | | | | |
| | +--------------------+ | | +--------------------+ | |
| | | Function clause | | | | Function clause | | |
| | | | | | | | | |
| | | +----------------+ | | | | +----------------+ | | |
| | | | Comprehension | | | | | | Comprehension | | | |
| | | +----------------+ | | | | +----------------+ | | |
| | | +----------------+ | | ... | | +----------------+ | | |
| | | | Anon. function | | | | | | Anon. function | | | |
| | | +----------------+ | | | | +----------------+ | | |
| | | +----------------+ | | | | +----------------+ | | |
| | | | Try block | | | | | | Try block | | | |
| | | +----------------+ | | | | +----------------+ | | |
| | +--------------------+ | | +--------------------+ | |
| +------------------------+ +------------------------+ |
| |
+------------------------------------------------------------+