当前位置: 首页 > 知识库问答 >
问题:

朱莉娅的“象征”是什么?

强承望
2023-03-14
    null
df = readtable( "table.txt", names = [symbol("var1"), symbol("var2")] )

我的两个问题仍然存在。

共有1个答案

金晗日
2023-03-14

Julia中的符号与Lisp、Scheme或Ruby中的符号相同。然而,在我看来,这些相关问题的答案并不令人满意。如果你读了这些答案,似乎符号不同于字符串的原因是字符串是可变的,而符号是不可变的,符号也是“实习生”--不管这是什么意思, 。字符串在Ruby和Lisp中确实是可变的,但在Julia中却不是,这种差异实际上是一种转移。符号被囚禁的事实-- 。为快速相等比较而由语言实现散列--也是一个无关的实现细节。您可以有一个不实习符号的实现,语言将完全相同。

那么什么是符号,真的吗?答案在于Julia和Lisp的共同点--将语言代码表示为语言本身的数据结构的能力。有些人称之为“同音性”(维基百科),但其他人似乎并不认为仅此一项就足以使一种语言同音。但术语并不重要。关键在于,当一种语言可以表示它自己的代码时,它需要一种方法来表示诸如赋值、函数调用、可以写成文字值的东西等等。它还需要一种方法来表示它自己的变量。也就是说,您需要一种方法来表示- 为数据- (位于下面左边的foo):

foo == "foo"

现在我们进入了问题的核心:符号和字符串之间的区别是比较左边的foo和右边的“foo”之间的区别。在左边,foo是一个标识符,它的计算结果是当前作用域中绑定到变量foo的值。在右边,“foo”是一个字符串文本,它的计算结果为字符串值“foo”。Lisp和Julia中的符号是将变量表示为数据的方式。字符串只是表示它自己。通过对它们应用eval,您可以看到不同之处:

julia> eval(:foo)
ERROR: foo not defined

julia> foo = "hello"
"hello"

julia> eval(:foo)
"hello"

julia> eval("foo")
"foo"
julia> ex = :(foo = "bar")
:(foo = "bar")

julia> dump(ex)
Expr
  head: Symbol =
  args: Array{Any}((2,))
    1: Symbol foo
    2: String "bar"
  typ: Any
julia> sym = :foo
:foo

julia> eval(sym)
"hello"

julia> ex = :($sym = "bar"; 1 + 2)
:(begin
        foo = "bar"
        1 + 2
    end)

julia> eval(ex)
3

julia> foo
"bar"
julia> sym = "foo"
"foo"

julia> ex = :($sym = "bar"; 1 + 2)
:(begin
        "foo" = "bar"
        1 + 2
    end)

julia> eval(ex)
ERROR: syntax: invalid assignment location ""foo""

这就是符号的本质:符号在元编程中用来表示变量。当然,一旦将符号作为数据类型,就很容易将它们用于其他事情,比如哈希键。但这是对另一个主要目的的数据类型的偶然的、机会主义的使用。

注意,我很久以前就不再谈论Ruby了。这是因为Ruby不是谐音的: Ruby不将其表达式表示为Ruby对象。所以Ruby的符号类型是一种残留器官-- 是从Lisp继承来的残留适应,但不再用于最初的目的。Ruby符号被用于其他目的--作为哈希键,从方法表中提取方法-- ,但Ruby中的符号不用于表示变量。

至于为什么在DataFrames中使用符号而不是字符串,这是因为在DataFrames中,将列值绑定到用户提供的表达式中的变量是一种常见的模式。因此,列名是符号是很自然的,因为符号正是用来将变量表示为数据的。当前,您必须编写df[:foo]来访问foo列,但是将来您可以改为以df.foo的形式访问它。当这成为可能时,只有名称是有效标识符的列才能使用这种方便的语法访问。

    null
 类似资料:
  • 许多博客和手册本身都说朱莉娅是动态键入的。但是从我对手册的阅读来看,我觉得它更像是静态键入的类型推断,就像F#。 Julia是静态类型化的吗 它是动态类型的吗 我假设它是动态输入的,看来手册不太可能是错的 朱莉娅是否涉及类型推断

  • 在中,函数在结构上允许您取两个向量和的外积,同时为应用于每个组合的实际函数提供了许多选项。例如,创建和之间元素差异的“外部积”矩阵。朱莉娅也有类似的吗?

  • Jump是否支持在模型中直接使用数学逻辑? 我知道它支持条件指示符,但是这些条件指示符怎么样? 例如: 1-一个是一个二进制变量,它与当前解决方案的约束的满意度和非满意度状态相关联。

  • 我写了一个mandelbrot集,我读过关于julia集的文章,它非常相似,但到底是什么关系呢?我能用mandelbrot公式画一个julia集吗?起始参数是什么?请阅读我的mandelbrot集合代码: 我不确定mandelbrot集对于z是迭代的,julia集对于c是迭代的,这意味着什么?我需要更改代码吗? 更新:我更改了代码,但它不起作用。我的想法是从$re和$im开始,而不是从0开始: 更

  • 我确信julia已经启用,并且linter也启用了(在vs代码设置中:julia>lint:Run),我在xxx.jl脚本上得到了语法高亮显示,但根本没有linter。 我在最新的vs代码+最新的Julia1.07扩展+最新的MacOSX上。我对vs代码进行了干净的安装,在安装之前清除了所有旧的相关文件夹(https://stackoverflow.com/a/53839847/11608725)