大家晚上好。
我最近开始看Abelson Sussman麻省理工学院关于计算机科学的讲座(主要是因为我觉得它们很有趣,不是因为它们与我的工作有很多关系),我偶然发现了这段代码来创建一个计数器:
- (define make-counter
- (lambda (N)
- (lambda ()
- (set! N (1+ N))
- N)))
- (define c1 (make-counter 1))
- (define c2 (make-counter 10))
关于上述代码的解释大约从48分钟开始。
我认为,语法既不是AutoLISP的语法,也不是Common Lisp的语法,主要是因为它是一篇演讲中的片段,上面代码的编写方式有很好的理由。
无论如何,当你第一次运行(c1)时,你会得到一个2;这是你第二次得了3等分。;当你运行(c2)时,你得到(无论何时运行(c1))11;下次你得到12等。
我试图将其翻译为AutoLISP:
问题是这不起作用。当我试图在N为零的情况下计算它时,我得到了一个错误。如果N预设为某个整数/实数,则无论调用c1或c2,它都将递增。
我想知道我是否做错了什么,或者这是我在AutoLISP中无法完成的事情。这段代码能像苏斯曼在演讲中展示的那样运行吗?这里有陷阱吗?
显然,这不是生死攸关的问题,我对另一段作为计数器的代码不感兴趣(尽管我很高兴看到你们提出的任何一个代码),因为这是我可以轻松解决的问题。我只想知道这是否可以在AutoLISP中工作,如果可以,如何工作。
谢谢大家! |