使用DrScheme(语言 - 相当大)。尝试将表达式的结果传递给稍后可以在另一个表达式中使用的变量。以下是问题的简化版本:
定义窗口:
(define (tot a b c) (+ a b c))
(define (tot2) (+ (tot a b c) 1))
翻译窗口
> (tot 5 6 7)
18
> (tot2)
. . reference to undefined identifier: a
我想要的结果当然是19.将DrScheme一次性完成所有代数会很容易,但我需要让它解决第一个表达式,然后根据结果解决第二个表达式第一
答案 0 :(得分:4)
这是你在找什么?
(define (tot a b c) (+ a b c))
(define (tot2 a b c) (+ (tot a b c) 1))
然后
(tot2 5 6 7)
应该导致19。
如果要将tot2分配给整数值而不是函数,
(define (tot a b c) (+ a b c))
(define tot2 (+ (tot 5 6 7) 1))
将表达式(+ (tot 5 6 7) 1)
的结果分配给名称tot2
答案 1 :(得分:3)
方案为lexically scoped:,因此a
,b,
和c
仅适用于动态范围tot
。
过程调用的动态范围是从启动调用到返回调用之间的时间段(通过gnu)。
答案 2 :(得分:2)
你正在想象一种不存在的“持久性”,尽管它可能是合理的,因为之前的数学经验。
那就是:如果我正在解决数学问题,并且我说x等于5,那么x应该保持等于5以解决问题的其余部分;例如,直到我擦除电路板。
那么,你能写一个像这样的编程语言吗?是!实际上,我可以在DrScheme中为您编写一个小宏,它可以产生您看起来正在寻找的行为:它将建立一个全局变量表,以便每个变量绑定都会导致对这个变量表的更新。 / p>
BUT!我调查的所有程序员(一个)(好吧,这是我)同意这将是非常坏主意。
要了解原因,想象一下我有一个包含几个名为'a'的变量的大型程序。然后,只要程序的A部分中有人调用带有名为'a'的变量的函数,程序的B部分就会突然改变其行为。这将使得几乎无法推断大型程序的行为。
更一般地说,这是“状态”和“突变”的问题。
因此,您不能引用“范围内”以外的变量。也就是说,那些绑定形式的变量(在本例中是'define')包含引用。
答案 3 :(得分:0)
基于你对John的答案的评论,我认为你想要的只是将每个函数调用的结果分配给一个变量(每个变量一个变量或者将它们全部放在一个列表中),然后将这些结果一起添加。
答案 4 :(得分:0)
在阅读了每个人的评论之后,我意识到我混淆了两个问题:让解释器用变量评估表达式,并实际为这些变量提供值。由于这种混乱,我问的问题没有意义。这是解决方案的简化版本。正如您所看到的,它非常简单 - 我只是使用“read”让用户输入值。
(define a (read))
(define b (read))
(define c (read))
(define d (read))
(define ee (read))
(define f (read))
(define tot (+ a b c))
(define tot2 (+ d ee f))
(define grandtotal (+ tot tot2))
(display grandtotal)
我在实际程序中使用了这种方法,现在有一个很好的小应用程序,总计我一周的工作时间。感谢大家的耐心帮助。