2016-04-30 150 views
0

我做了一些功课,我对一些事情感到困惑关于口齿不清Lisp的类型系统故障

问:

考虑Lisp的语句:

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

非常简要描述的特征Lisp的类型系统需要支持这种类型的语句。

思考

我很新为Lisp所以我对如何甚至接近问题不确定。 我知道类型系统基本上就是它的工作原理以及它可以做什么的语言规则。我只是不知道如何用这一行代码来描述Lisp的功能。

+0

你说的是什么执行力度? – coredump

+0

@coredump我不相信我被告知某个实现。 – Justin

+1

我不认为你可以根据这么少的信息对类型系统进行任何说明。例如。 Haskell具有静态类型,类似的代码很容易看起来相同,因为键入也可以被推断出来。 – Sylwester

回答

1

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

每当在一个问题中有一个概念,你还不知道或不明白,那么你应该尝试首先了解

我明白类型系统基本上是它如何工作的语言规则以及它可以做什么。

回过头想一想什么这句话讲的是你对“类型系统”的理解。 你知道类型系统是什么吗?我不这么认为。 你了解类型系统的目的吗?我不这么认为。

因此,首先尝试回答这些问题。 (这是一个快速跳转到维基百科)为了验证你的理解,尝试回答这些问题:

  • 什么是动态和静态类型之间的区别?
  • 强弱键入有什么区别?
  • 如果42有型Integer,有些功能foo需要Integer类型的单一参数并返回一个String,什么是表达​​(调用函数)的类型?
  • 如果"OMG"有型String,有些功能foo需要Integer类型的单一参数并返回一个String,什么是表达(foo "OMG")的类型?

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

现在,再想想(保持到Common Lisp的eval这里)的类型:

(eval '(+ 1 2)) 

最后,是什么类型:

(eval (read)) 
+0

因此,从进一步的研究Lisp是强类型和动态的,正确的?这是因为变量是在运行时解释的,也是因为你必须根据你在做什么来翻译字符串和数字。所以,看看:**(eval(read-from-string(read-line)))**,我们可以说它是强类型的,因为我们使用**从字符串中读取**和** eval **显示我们在运行时解释变量。这看起来是正确的吗? – Justin