如何用函数式语言编写简单的树算法?

假设我想实现一个合理有效的“关键字识别算法”,首先给出一个关键字列表,然后必须回答列表中是否有另一个给定的词.

在命令式语言中,我会将关键字存储在树中(每个字符一个节点).然后,当收到要测试的单词时,我会扫描我的树以测试该单词是否是关键字.

我想了解这种算法如何用函数式语言编写.如何在保持“命令式”算法效率的同时,获得“无状态”编程的好处.如果您不想每次都重建它,是否有必要将树存储在查找之间的某个位置?

最佳答案 我认为你的意思是每个节点的一个字符……有点像关键字查找的简单哈希树方案.假设这个甚至是另一种树…想象做这样的事情(在伪LISP中):

(defun buildtree (wordlist) ...code to build tree recursively returns the tree...)
(define lookup (tree word) ...code to look up word using tree, returns t or nil...)

(defun lookupmany (tree querylist)
   (if (eq querylist nil)
       nil
       (cons (lookup tree (car querylist)) (lookupmany tree (cdr querylist))
   )
)

(defun main (wordlist querylist) ; the main entry point
   (lookupmany (buildtree wordlist) querylist)
)

如果这是你的意思,这是一个相当简单的函数式编程.
它真的是无国籍的吗?这是一个有争议的问题.有些人会说一些
函数式编程的形式存储我们通常在堆栈上称为“状态”的东西.
此外,即使自斯蒂尔书的第一版以来,Common LISP也经历了迭代
结构,LISP已经有很长一段时间了.

但是在编程语言理论中,我们所说的“无国籍”对于这里显示的想法非常满意.

我认为以上就像你的意思.

点赞