【问题标题】:What hash/map based programming language exist?存在哪些基于哈希/映射的编程语言?
【发布时间】:2011-02-12 22:55:15
【问题描述】:

很像 lisp 通常被认为是一种基于列表的编程语言,哪些语言被认为是基于地图的?

我记得几年前读过一篇文章,但找不到参考。它看起来像:

[if:test then:<code> else:<more code>]

编辑: 以及更多引用的代码块,这些代码块将被条件评估。以这种方式,if/cond 和其他方式不会像在 lisp/scheme 中那样是特殊形式。

上面的语法应该是map/dictionary,就像lisp的语法是list一样。

if 是一个值为 test 的键。

then 将是一个值为 .

的键

...

【问题讨论】:

  • 请根据地图定义。
  • @zaf 基于关联数组的语言是否使事情更清晰?
  • 至少在 Common Lisp 中,COND(像许多控制流结构一样)不是一种特殊形式:它是一个宏。
  • @Davorak 不是真的。我会检查答案以获得更多理解。
  • @zaf:该数据结构的其他名称是:关联数组或字典。在常规数组中,您有一个像users[25] = "oscar" 这样的索引,对吗?这将使用索引 25 将值“oscar”分配给 users 数组,好吗?在关联数组中,索引是另一个“对象”,例如users["name"] = "oscar",而不是使用索引,索引是“名称”。这非常方便。它们被称为关联数组,因为它们将一个值与另一个值相关联。它们被称为字典,因为键是 dict 条目,您将拥有一个更大的对象,即 def

标签: programming-languages


【解决方案1】:

这看起来很像MISC,这是一个懒惰的 Lisp,它使用映射而不是列表作为基本数据类型。 (它也很懒惰,深度集成了元数据(类似于 Clojure)和其他一些东西,但它仍然非常像 Lisp:功能性、同义性、宏、实现为元循环解释器,所有的好东西。)

这是来自blog的一些代码示例:

[if [> 5 10] then:[+ 5 10] else:[- 5 10]]

[let '[square:[lambda '[x:1] '[* x x]]]
    '[square 12]
]

[take 20 [numbers from:0]]

不幸的是,除了很久以前的两个blog articles 之外,似乎已经没有太多事情发生了。

【讨论】:

  • 是的!谢谢你。这就是我一直在寻找的。我认为它不再有什么进展了,但它激起了我的兴趣,我想再次尝试实现,但前一段时间丢失了我的副本。
  • +1 Jörg 很好的发现。它有Fraction 类型吗? :P :P 开个玩笑,我想知道它会是什么样子。 stackoverflow.com/questions/2702450/…
【解决方案2】:

我也建议使用 Lua。整个语言都是基于表的——对象就是表,它们的定义是表,变量在表中,表定义范围等等——其中表是哈希图。

【讨论】:

  • 是的,我会按照建议进行检查,但是我一直在寻找语法基于映射/字典的语言,就像 lisp 具有类似结构的列表一样。
【解决方案3】:

显而易见的答案是 lua ——它大量使用tables,并且一个表几乎是一个哈希映射(一个关联数组)。不过,它的语法看起来不像您在上面显示的那样。

上面的内容看起来很像 Smalltalk,它的库中当然包含基于哈希的容器,并且典型的实现在内部使用哈希表来查找对象应如何响应特定消息。尽管如此,将其称为“基于哈希/映射”似乎有点牵强,至少对我来说是这样。

【讨论】:

  • 谢谢 我去看看lua。代码示例并非来自 smalltalk,它看起来像是一种实验语言,是创建者的个人项目。
【解决方案4】:

你发布的截图看起来很像 Objective-C,虽然它不是基于映射的实现,只是语法看起来像这样。

据我了解,一种大量使用字典的语言是 Python。基本上 Python(用我自己的话来说)是一本非常大的字典,但语法并不能完全反映这一点。

这是我的来源(虽然可能很混乱)

http://code.google.com/edu/languages/index.html#_python_understanding

【讨论】:

  • 谢谢。它不是python或objective-c。 Python 虽然有字典,但语言不是基于它们。我所指的语言的语法是字典,就像 lisp 的列表一样。
【解决方案5】:

MUMPS 编程语言有一种基本数据类型,它本质上是哈希/映射,但要小心学习 MUMPS。有龙……

【讨论】:

  • 谢谢,不过我认为我不会很快花时间学习腮腺炎。我在 wiki 页面上没有看到明显的优势。我想到的语言是在过去十年中创建的,我不认为它已经被广泛使用。
  • MUMPS的数据库组织值得了解。 (有龙,但他们守着大秘密。)
【解决方案6】:

这和你描述的不太一样,也不是真正基于哈希的,但你的例子看起来很像Smalltalk

test
  ifTrue: [code]
  ifFalse: [more code]

更新:

您的编辑,“以及更多引用的代码块将被条件评估。以这种方式 if/cond 和其他不会像 lisp/scheme 那样是特殊形式”,向我建议Tcl

在 Tcl 中,{} 只是引用一个字符串。 “If”是一个评估测试的命令,然后根据该结果选择性地评估另一个参数。

我不会完全称 Tcl 为基于哈希的语言,尽管哈希在 Tcl 中有点特殊。

【讨论】:

  • 谢谢。是的,Jerry Coffin 提到了这种可能性。这不是闲聊,我编辑了我的问题以添加一些我记得的更多细节。
  • @Davorak 回复您编辑的问题,它们也不是 Smalltalk 中的特殊形式。事实上,Smalltalk 并没有真正的特殊形式,只有消息。你问的语言在我看来非常接近 ST。
  • 是的,但是语法是基于消息传递而不是地图/字典的。虽然我真的应该花一些时间学习 smalltalk。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多