我读过第1.13章AN INTRODUCTION TO FUNCTIONAL PROGRAMMING THROUGH LAMBDA CALCULUS并看到它。在命令式语言中通常不存在什么是“显式数据结构表示”?请问有人举个例子吗?
答案 0 :(得分:1)
有人可以举个例子吗?
这只是隐式结构Array的一个例子,与显式结构,Linked List相比。
以下程序可以用无数种方式编写。这两个例子都不是特别惊人。每个示例都只是为了展示您期望在野外看到的代码。
<强>概述强>
数组是一个非 - 明显,模糊的index
- &gt; value
映射桶。它需要使用任意索引输入来读取值。你可以&#34;迭代&#34;通过使用计数器,但实际上计数器与数组本身没有任何关系 - 你仍然只是使用任意索引执行随机查找 - 如果它们恰好位于&#34中并不重要;序列&#34;或不。
Linked List是显式结构化数据容器。它具有定义的开始,结束和有意义的方式,以编程方式与结构交互。处理列表以car
开头,然后使用cdr
继续,直到找到 null 终结符。它还有明确的方法来创建新对(cons
)。
非显式代码示例
这里我们有一个用JavaScript编写的命令式程序。这个计划可以说没有结构。
xs
是一个全局定义的数组,基本上是一大堆分配 - 值链接到 indices doSomething
根据提供的索引更改分配 - 它在<{1}}上隐式 xs
还具有隐含的 main
知识 - 至少,它隐含有xs
对doSomething
进行操作的知识xs
只设置了已知索引的新分配,所以变异原始输入doSomething
没有明确的输出; 隐式依赖于main
来更改基础数据,doSomething
xs
&#13;
显式代码示例
这是一个用Racket编写的功能风格的程序。
function doSomething (i) {
xs[i] = 'changed'
}
function main () {
doSomething(1)
doSomething(2)
}
let xs = ['a', 'b', 'c', 'd', 'e']
console.log(xs) // [ 'a', 'b', 'c', 'd', 'e' ]
console.log(main()) // undefined
console.log(xs) // [ 'a', 'changed', 'changed', 'd', 'e' ]
仍然是全局定义的,但它采用已知的显式结构 - Linked List xs
无法再直接引用索引重新分配值。相反,它需要索引输入和显式结构化列表输入 - 然后才能递归地构建一个带有 new 值的 new 列表。适当的位置。doSomething
无法再忽略其操作的数据 - main
显式并有目的地通过连续的xs
调用进行线程化,使用返回值每个,并最终返回最终结果doSomething