【问题标题】:Where do I get more information on Homoiconicity?我在哪里可以获得更多关于 Homoiconicity 的信息?
【发布时间】:2010-10-23 23:57:12
【问题描述】:

我一直在尝试函数式编程,但我仍然不理解这个概念。你们知道任何讨论这个概念的好书、教程或例子吗?或者,如果您可以向小的 sn-ps 展示它的用法,那就太好了。

【问题讨论】:

  • 函数式编程和同质性并不是完全相关的。大多数函数式语言不是同音异形语言,并且有些同音异形语言不是特别实用,例如 Common Lisp。事实上,就我而言,唯一能想到的功能性、同音性语言是 Clojure。
  • Scheme 既是功能性语言又是同音语言。

标签: functional-programming homoiconicity


【解决方案1】:

我相信John Hughes 的Why Functional Programming Matters 是最好的之一。

【讨论】:

    【解决方案2】:

    REBOL 是同音语言。 REBOL 中的block! 数据类型是一组方括号,其中包含任何有效的 REBOL 标记,类似于 Lisp 中的 S 表达式。例如:

    series: [1 2 3 4]
    foreach item series [
        print item
    ]
    

    现在,让我们换一种方式来表达:

    series: [1 2 3 4]
    for-body: [print item] ; This is the body of our foreach
    foreach item series for-body
    

    虽然它被声明为数据,但当我们将块 for-body 传递给 foreach 函数时,我们将它视为代码。如果我们问 REBOL for-body 块中第一项的类型是什么 - type? first for-body - 它会告诉我们 word! 而不是 function!(或 native! 或 action! 或任何其他 REBOL函数类型)。原因是作为数据,for-body 只是一个未评估的 REBOL 词块。当我们将它传递给foreach 时,它才会被评估为代码。

    有些人称REBOL“像Lisp,但没有括号”,我个人更喜欢它而不是Lisp,但你可能不喜欢。尽管如此,当您想了解同音性时,它仍然是一门很棒的语言,我觉得这个主题很吸引人。

    【讨论】:

      【解决方案3】:
      【解决方案4】:

      学习 lisp 或 scheme。语言就是数据结构就是语言。 Lisp 代码和 Lisp 数据结构具有相同的语法规则。

      如果您学习 tcl,则可以使用一种程序化语言并且数据结构语法规则与编程语言语法规则相同。

      严格来说,这不是函数式编程问题。对于数据的语法规则和语言的语法规则相同的少数语言来说,这更是一个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        相关资源
        最近更新 更多