代数形式代码

时间:2014-11-18 15:23:36

标签: algorithm functional-programming

我有一个功课,我们应该为任何通用数据类型实现功能数据类型。该类的规范以代数形式给出。我在解释它时遇到了问题,并希望得到一些帮助。

以下是我们以代数形式得到的规范:

T是任何通用数据类型

  

V = {nil}∪T

     

表达式 E = {(cons e1 e2)| e1,e2∈E}∪V   设L ^n⊂E只包含形式的表达式(cons e1(cons e2 ...(cons en nil)...)   对于某些n∈N,所有ei∈T。更进一步L ^ * =⋃n∈NL^ n。

     

功能

     

空?:E→{true,false},e↦{如果e = nil则为true,否则为false

     

首先:L ^ *→E,(cons e1 e2)↦e1

     

休息: L ^ *→E,(cons e1 e2)↦e2

     

前置:E×L ^ *→L ^ *,e,(cons e1 e2)↦(cons e(cons e1 e2))

     

ith :( L ^ *)×N→E,(cons e1 ...(cons ei ...(cons en nil)...),i↦ei为0< ;i≤n

     

长度:L ^ *→N,l∈L^n↦n

以下是我的解释:

值:值属于T类,为nil(null)

表达式:

不确定E是否是由常数e1,e2 ......组成的数组,并且L ^ n也是由e1,e2 ... en组成的数组?不理解(consn nil)部分...是否应该是nil的常量?

功能

空?函数为空应该检查E数组中的元素是否有值。

first:返回第一个元素

rest:返回没有第一个元素的新数组

prepend:将常数e放在数组中。

ith:不确定,可能会根据输入返回n个元素。

长度:给出列表L的长度

这些表达方式有点乱,但有人可以给我一些反馈意见吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

T成为int。然后V是任何int或nul。现在,表达式可以是cons(x y),其中x,y是int或nuls或其他表达式,例如:

1
cons(2 3)
cons(cons(4 5) cons(6 7))

L^n是一种特殊的表达式,cons的第一个参数限制为T,最内层的原子必须为nul。所以这个

cons(1 cons(2 cons(3 nul)))

是有效的L^n(具体为L^3),而这不是

cons(cons(4 5) cons(6 7))

(作为旁注,L^n是lisp中的list,而E是通用pair。)

在您的一组功能中,只有empty?(又名nil),first(= car)和rest(= cdr)是原始的,其他的可以定义就他们而言(前提是你也有条件),例如:

 length(E) = 0 if empty(E) else 1 + length(rest(E))