【发布时间】:2016-04-07 15:13:12
【问题描述】:
我在不使用 set 的情况下将列表保存在内存中时遇到了问题!
我定义了一个初始的空列表,
(define database (list))
然后我有这个程序来检查密码是否正确并将密码对添加到列表中。
(define (set-pass l)
(if (pair? l)
(if (check-pass (second (last l)))
(add-to-list l)
"password does not meet policy requirements"
)
"invalid input"
)
)
还有一个添加到列表的过程:
(define (add-to-list l)
;(append database l)
;implement this.
)
问题是,我必须多次调用这个过程:
(set-pass '('john '(X p c F z C b Y h 1 2 3 4 : :)))
(set-pass '('john '(X p c F z C b Y : 1 2 3 4 : :)))
(set-pass '('john '(X p c F z C b : : 1 2 3 4 : :)))
我实现了 add-to-list 过程,就像我调用 set-pass 一次(如上所示的 append),但如果我多次调用它,我找不到实现方法。我尝试了一些提到的here、here 和here。但我无法实现我想要的。那么我该怎么做呢?
【问题讨论】:
-
即使我们将列表封装在过程中,有时我们也必须使用
set!重新分配它。要么,要么继续将修改后的列表作为参数传递给需要它的函数。