Lisp类型系统麻烦

时间:2016-04-30 18:45:47

标签: types lisp system

我正在做一些功课,我对有关lisp的一些事情感到困惑

问题:

考虑Lisp语句:

(eval (read-from-string (read-line)))

非常简要地描述了支持这种语句所需的Lisp类型系统的功能。

思想

我是Lisp的新手,所以我不确定如何处理这个问题。 我理解类型系统基本上是它的工作方式和它能做什么的语言规则。我只是不知道如何用这一行代码描述Lisp的功能。

1 个答案:

答案 0 :(得分:1)

由于这是一个家庭作业问题,我不会为你回答。相反,我试图帮助你问自己正确的问题。

如果您在某个问题中有一个您不了解或不了解的概念,那么您应该首先尝试理解

  

我理解类型系统基本上是它的工作方式和它可以做什么的语言规则。

退后一步,想一想 这句话是关于你对#34;类型系统"的理解。 你明白什么是类型系统吗?我不这么认为。 你了解类型系统的目的吗?我不这么认为。

因此,请先尝试回答这些问题。 (这是对维基百科的快速跳转)为了验证您的理解,请尝试回答以下问题:

  • 动态和静态类型的区别是什么?
  • 强弱打字的区别是什么?
  • 如果42的类型为Integer,而某些函数foo采用Integer类型的单个参数并返回String,那么类型是什么表达式(foo 42)(调用函数)?
  • 如果"OMG"的类型为String,而某些函数foo采用Integer类型的单个参数并返回String,那么类型是什么表达式(foo "OMG")

尝试回答最后两个问题不仅适用于Lisp,还适用于其他一些语言(如Java,C,C ++,Haskell;当然要调整调用语法)。

现在,试着想一下(在这里保持Common Lisp eval的类型):

(eval '(+ 1 2))

最后,是什么类型:

(eval (read))