list - 如何添加到方案中的嵌入式列表?

标签 list recursion functional-programming lisp scheme

我试图在 scheme 中生成一个符号表,但我卡在了 set-symbol 函数上。 该数字对应于代码或“范围”的 block 级别。

First symbol it reads in
((c class 0))
Next symbols 
(((c class 0) (a int 0) (b float 0)))
We read a bracket and read the next variables to a new scope.
(((a char 1) (d int 1)) ((c class 0) (a int 0) (b float 0)))
We leave that scope and "pop the stack".
(((c class 0) (a int 0) (b float 0)))

我如何始终添加到作用域中第一个列表的最深列表?

最佳答案

我怀疑您最好使用不同的表示形式。其中之一是:

(define (make-symbol-table parent alist)
  `(SYMBOL-TABLE ,parent ,@alist))
(define symbol-table-parent cadr)
(define symbol-table-alist  cddr)

(define (symbol-table-depth table)
  (let ((parent (symbol-table-parent table)))
    (if (not parent)
        1
        (+ 1 (symbol-table-depth parent))))

(define (symbol-table-lookup table name)
  (cond ((assoc name (symbol-table-alist table)) => cdr)
        (else (let ((parent (symbol-table-parent table)))
                (and parent (symbol-table-lookup parent name))))))

关于list - 如何添加到方案中的嵌入式列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15589374/

相关文章:

functional-programming - 理解展平的语义

c# - 按 id 对 List<T> 中的对象进行分组,并按每个对象的 duplicateCount 对列表进行排序

将元素添加到 c 中列表开头的代码 - 错误是什么?

list - F#::遍历列表然后再次返回

algorithm - 在使用时间变量寻找关节点算法中,为什么我们不取子节点和父节点的低时间的最小值

java - Java泛型可以用值而不是类型参数化吗?

Java 函数泛型

python - 从 groupby 返回列表的最有效方法

recursion - 递归方法中的基本情况

java - 如何在 Java 中运行递归函数