2

我尝试遍历包含天气数据的数组。这已经很好了,我也可以从数组中加载对我很重要的数据。因此,我写了一个帮助词,如下所示:

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

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

此代码将温度值从堆栈中的数组推送并构建总和。“main”和“temp”是数组的键值。

我用这个命令执行它:get-weather-list 生成数组

"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 ;

问题是我并不真正理解这个词的签名。我总是得到““每个”的输入引号不符合其预期效果”。我尝试了很多,但找不到解决此问题的解决方案。任何人都可以有一个想法吗?我很感激任何帮助:)

干杯斯特凡

4

1 回答 1

3

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

一、关于each:报价的堆栈效应是(... x -- ...)

这意味着它消耗输入,并且不输出任何内容。您的报价适用于解释器,因为它可以让您摆脱“错误”代码。但是对于从定义的单词中调用每个,您的引用无法输出任何内容。

所以each不是你想要的。如果您尝试将可变数量的值压入堆栈,您将再次遇到同样的麻烦。序列词都输出固定数量的值。

您想要做的是以下两件事之一:

  1. 使用您想要的值创建一个新序列,然后调用sum它。

  2. 在处理列表时使用 , 之类的东西reduce来累积总和。

例如,使用reduce

 get-weather-list 0 [ "main" get-value "temp" get-value + ] reduce ;
于 2015-07-02T02:19:28.967 回答