2014-11-21 38 views
2

我尝试迭代包含天气数据的数组。这工作得很好,我也可以从数组中加载对我很重要的数据。因此,我写了一个帮助字它看起来像这样:因子中的单词签名

: get-value (hsh str -- str) swap at* drop ;

[ "main" get-value "temp" get-value ] each 9 [ + ] times

此代码从堆栈上的阵列推动的温度值,并建立的总和。 “main”和“temp”是数组的关键值。

我用这个命令执行:得到全天候列表生成阵列

"Vienna" get-weather-list [ "main" get-value "temp" get-value ] each 9 [ + ] times

结果是在栈上的一个数字。现在我想把这个呼叫分成一两个单词。例如:

: get-weather-information (city -- str) get-weather-list [ "main" get-value "temp" get-value ] each 9 [ + ] times ;

的问题是,我真的不理解这个词的签名。我总是会得到“每个”的输入引用与其预期效果不符“。我尝试了很多,但找不到解决此问题的解决方案。有没有人有想法?我感谢所有帮助:)

干杯 斯特凡

回答

3

这是一个非常古老的问题,现在,但它仍然可能是有用的人。

首先,约each:报价的堆栈效应是(... x -- ...)

这意味着它消耗一个输入,并不输出任何内容。您的报价适用于翻译,因为它可以让您摆脱“错误”的代码。但为了从定义的单词中调用每个单词,您的报价不能输出任何内容。

所以each是不是你想要的。如果您尝试将可变数量的值推送到堆栈,您将再次遇到同样的问题。序列字都输出固定数量的值。

你想要做的是两两件事之一:

  1. 创建一个新的序列与你想要的值,然后在其上调用sum

  2. 使用类似于reduce的东西来积累处理清单时的总和。

例如,reduce

get-weather-list 0 [ "main" get-value "temp" get-value + ] reduce ;