关于映射:Scheme标准中是否存在这样的过程,如果是,则如何调用它?

关于映射:Scheme标准中是否存在这样的过程,如果是,则如何调用它?

Does such a procedure exist in a Scheme standard and if yes, how is it called?

我寻找了一个过程的名称,该过程将过程的树形结构应用于数据的树形结构,从而产生结果的树形结构-所有三棵树都具有相同的结构。

此类过程可能具有签名:

1
(map-tree data functree)

其返回值将是functree元素在相应数据元素上逐元素应用的结果。

示例(假设该过程称为map-tree):

示例1:

1
2
3
4
(define *2 (lambda (x) (* 2 x)))
; and similar definitions for *3 and *5

(map-tree '(100 (10 1)) '(*2 (*3 *5)))

将产生结果

1
(200 (30 5))

示例2:

1
2
(map-tree '(((aa . ab) (bb . bc)) (cc . (cd . ce)))
        '((car cdr) cadr))

产生结果

1
((aa bc) cd)

但是,在我查阅的SLIB文档中没有找到这样的功能。

这样的程序是否已经存在?
如果不是,该过程的合适名称是什么,以及如何对它的参数进行排序?


该函数的名字不是很好。我在下面粘贴我的实现(我称它为map-traversing;其他人应该建议一个更好的名称)。我已经将参数顺序映射为map本身的参数。

1
2
3
4
(define (map-traversing func data)
  (if (list? func)
      (map map-traversing func data)
      (func data)))

使用您的样本数据,我们有:

1
(map-traversing `((,car ,cdr) ,cadr) '(((aa . ab) (bb . bc)) (cc cd . ce)))

第二个示例需要SRFI26。(允许写入(cut * 2 <>)而不是(lambda (x) (* 2 x))。)

1
(map-traversing `(,(cut * 2 <>) (,(cut * 3 <>) ,(cut * 5 <>))) '(100 (10 1)))

最重要的是,您的函数必须全部不带引号,与您的示例不同。


我发现使用下面的map-traversing定义,您无需取消引用函数:

1
2
3
4
(define (map-traversing func data)
  (if (list? func)
      (map map-traversing func data)
      (apply (eval func (interaction-environment)) (list data))))

注意:在我安装的Guile版本中,由于某些原因,只有(interaction-environment)不会引发Unbound variable错误。其他环境,即(方案报告环境5)和(空环境5)会引发此错误。

注2:随后,我在[1]中发现,要使(方案报告环境5)和(空环境5)正常工作,您首先需要(使用模块(ice-9 r5rs))<铅>

[1]:http://www.mail-archive.com/bug-guile@gnu.org/msg04368.html'Re:guile -c"(scheme-report-environment 5)" ==>错误:未绑定变量:scheme-report-environment'


推荐阅读

    远程调用linux命令?

    远程调用linux命令?,密码,系统,网络,服务,软件,名称,地址,命令,暂停,信息,...

    linux操作数据库命令?

    linux操作数据库命令?,地址,服务,系统,密码,数据库,工具,名字,首页,命令,参

    linux下载数据命令?

    linux下载数据命令?,软件,工具,数据,系统,代理,官网,网络,名称,网址,盘中,在l

    做数据linux常用命令?

    做数据linux常用命令?,工作,系统,基础,网络,数据,标准,管理,工具,地址,命令,l

    linux查重复数据命令?

    linux查重复数据命令?,工具,数据,系统,电脑,名字,资料,代码,百度,标准,技术,

    linux数据库升级命令?

    linux数据库升级命令?,系统,信息,时间,最新,网络,名字,地址,管理,简介,传播,l

    linux调用函数的命令?

    linux调用函数的命令?,系统,代码,策略,上调,时间,设计,通信,网络,设备,项目,

    数据库导出linux命令?

    数据库导出linux命令?,密码,数据,数据库,情况,地址,系统,工具,网上,名字,命

    linux外部命令调用?

    linux外部命令调用?,系统,软件,标准,命令,盘中,管理,外部,进程,程序,内存,lin

    linux怎么调用命令行?

    linux怎么调用命令行?,系统,地址,工具,工作,首页,终端,命令,密码,信息,情况,l

    linux看命令执行过程?

    linux看命令执行过程?,系统,服务,状态,软件,时间,数据,地址,命令,进程,情况,l

    linux命令与数据流?

    linux命令与数据流?,工作,地址,系统,信息,命令,目录,标准,网络,管理,常用命

    linux恢复数据库命令?

    linux恢复数据库命令?,工具,系统,软件,数据,盘中,密码,命令,备份,数据库,文

    浏览器调用linux命令?

    浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,

    py调用linux的命令?

    py调用linux的命令?,系统,代码,状态,环境,标准,工具,命令,文件,脚本,终端,lin

    linux储存命令数据?

    linux储存命令数据?,系统,工作,地址,信息,标准,命令,工具,实时,数据,分析,lin

    linux储存命令数据?

    linux储存命令数据?,系统,工作,地址,信息,标准,命令,工具,实时,数据,分析,lin

    浏览器调用linux命令?

    浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,

    py调用linux的命令?

    py调用linux的命令?,系统,代码,状态,环境,标准,工具,命令,文件,脚本,终端,lin

    linux系统命令调用?

    linux系统命令调用?,系统,单位,工具,工作,管理,地址,权威,密码,电脑,信息,怎