【问题标题】:How to add to embedded list in scheme?如何添加到方案中的嵌入列表?
【发布时间】:2013-03-13 10:23:35
【问题描述】:

我正在尝试在方案中生成符号表,但我被困在 set-symbol 函数上。 数字对应于代码的块级别或“范围”。

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)))

如何始终添加到范围内第一个列表的最深列表?

【问题讨论】:

  • 我认为这些应该是普通列表。您是否有理由将新绑定添加到列表的末尾而不是开头?这需要追加(或额外的递归)。
  • 正在添加新绑定以保持深度。这样,可以通过获取外部列表的长度轻松计算深度。

标签: list recursion functional-programming lisp scheme


【解决方案1】:

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

(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))))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多