2014-11-21 39 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 ;