用红色语言创建地图功能
问题描述:
如何使用红色语言创建map高阶函数。它应该将块和函数作为参数,并将发送的函数应用于块的每个成员。我试过下面的代码:用红色语言创建地图功能
Red []
mapfn: function[blk sfn][
outblk: copy []
foreach i blk[
append outblk (sfn i) ]
outblk ]
; to test:
myblk: [" this " " is " " a " " line " "for" " testing " " only "]
probe mapfn myblk 'reverse
probe mapfn myblk 'trim
但它不工作 - 它只是发回原始块而不改变它或给出任何错误消息。这怎么可以纠正?
答
在雷博尔你有夹层功能申请
>> help apply
USAGE:
APPLY func block /only
DESCRIPTION:
Apply a function to a reduced block of arguments.
APPLY is a function value.
ARGUMENTS:
func -- Function value to apply (Type: any-function)
block -- Block of args, reduced first (unless /only) (Type: block)
REFINEMENTS:
/only -- Use arg values as-is, do not reduce the block
(SPECIAL ATTRIBUTES)
throw
见源应用。
只要红已经没有原生应用,你可以编写自己的映射的功能,例如
mapfn: function[blk sfn][
outblk: copy []
foreach i blk[
append outblk sfn copy i
]
outblk
]
与获取的功能:functionname
>> myblk: [" this " " is " " a " " line " "for" " testing " " only "]
== [" this " " is " " a " " line " "for" " testing " " only "]
>> probe mapfn myblk :reverse
[" siht " " si " " a " " enil " "rof" " gnitset " " ylno "]
== [" siht " " si " " a " " enil " "rof" " gnitset " " ylno "]
>> probe mapfn myblk :trim
["this" "is" "a" "line" "for" "testing" "only"]
== ["this" "is" "a" "line" "for" "testing" "only"]
>>
的替代,正如你不能复制更好的办法所有的数据类型都是例如
mapfn: function[blk sfn][
collect [
foreach i blk[
keep sfn i
]
]
]
并调用该函数,如果没有不想修改原始
mapfn newblk: copy/deep myblk :reverse
为什么修剪也呈现出逆转的字符串这样? – rnso
我改变了答案。 **反向**和**修剪**在原始系列上工作并进行更改。所以你必须使用你工作的系列的副本。 – sqlab