小编Yut*_*ohe的帖子

当 flet 在递归函数中时会发生什么?

我一直在尝试实现一个 NFA,底部的代码是导出所有当前状态的 epsilon 闭包。我想以递归方式实现它,因为 epsilon 闭包根据定义是递归的。在当前的实现中,在主函数内部定义了一个辅助函数,使用flet,并且似乎每次递归时都独立定义了一个辅助函数。我的理解正确吗?如果是这样,在不多次定义相同内容的情况下实现此代码的最简洁方法是什么?

(defun eps-closure (states transition-rule)
  (flet ((trace-eps-onestep (states transition-rule)
           (remove-duplicates
            (flatten
             (append
              states
              (mapcar
               (lambda (state) (transition-state state :eps transition-rule))
               states))))))
    (let ((next (trace-eps-onestep states transition-rule)))
      (if (set-difference next states)
          (eps-closure next transition-rule)
          next))))
Run Code Online (Sandbox Code Playgroud)

recursion common-lisp

1
推荐指数
1
解决办法
112
查看次数

标签 统计

common-lisp ×1

recursion ×1