乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 36|回复: 6

[编程交流] Mapcar缺点或我的已知

[复制链接]

91

主题

428

帖子

326

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
474
发表于 2022-7-6 09:32:02 | 显示全部楼层 |阅读模式
你好
众所周知,mapcad函数的语法如下:
 
  1. (mapcar [i]function [/i][i]list1[/i]... [i]listn[/i])

 
我的问题可以通过以下两个例子来解释:
 
  1. (mapcar 'strcase '("a" "B" "c" "D"))
  2. returns: ("A" "B" "C" "D")

 
  1. (mapcar 'strcase '("a" "B" "c" "D") '(T T T T))
  2. returns: ("a" "b" "c" "d")

 
是否有任何方法可以将重复的对象(这里T作为socond参数)传递给mapcar一次?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:47:30 | 显示全部楼层
 
*如果*您知道将使用T(True)作为所提供的有效字符串列表中每一项的Strcase函数的Which参数,那么使用Lambda应该可以做到这一点。
 
例子:
 
  1. (mapcar
  2. [color=blue](function[/color]
  3. [color=blue]   (lambda (str / string)[/color]
  4. [color=blue]     (setq string (strcase str [color=red]T[/color]))))[/color]
  5. '("a" "B" "c" "D"))
回复

使用道具 举报

91

主题

428

帖子

326

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
474
发表于 2022-7-6 09:53:02 | 显示全部楼层
很好的一个RenderMan-非常感谢:)。
回复

使用道具 举报

91

主题

428

帖子

326

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
474
发表于 2022-7-6 10:11:51 | 显示全部楼层
代码可以更短:
 
  1. (mapcar
  2. (function
  3.   (lambda (str)
  4.    (strcase str T)))
  5. '("a" "B" "c" "D"))

 
再次感谢RenderMan
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:16:34 | 显示全部楼层
Mapcar在处理长度未知的列表时是理想的;如果需要为每个项提供其他常量参数,可以使用lambda函数(或用户定义的子函数),如图所示。
 
也许你已经阅读了本教程,该页面底部的链接也是一本不错的读物。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 10:24:24 | 显示全部楼层
 
欢迎光临。
回复

使用道具 举报

91

主题

428

帖子

326

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
474
发表于 2022-7-6 10:41:19 | 显示全部楼层
谢谢李,
你是个很好的老师。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 02:24 , Processed in 0.379575 second(s), 77 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表