在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 589|回复: 6

[求助] cond语句用法求助-SKILL

[复制链接]
发表于 2024-2-19 14:00:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 Mingese 于 2024-2-19 14:07 编辑

在用户手册中我看到这样一个sample:




  1. ;;;The following procedures returns a copy of aList
  2. ;;;with elem swapped one position closer to the top
  3. ;;; of the list. == aList if elem is already on top
  4. ;;; of the list.




复制代码
上面高亮的这句:
`( ,elem ,car( aList ) ,@cddr( aList ))
是什么意思?其中的 “ ` " “ @ ”是什么用法?
 楼主| 发表于 2024-2-19 14:08:43 | 显示全部楼层
这个插入代码怪怪的,我把代码放这里好了



;;;The following procedures returns a copy of aList
;;;with elem swapped one position closer to the top
;;; of the list. == aList if elem is already on top
;;; of the list.
procedure( trSwapElementTowardTop( elem aList )
        cond(
                ( !aList nil)
                ( elem == car( aList ) aList );;; already the first item
                ( elem == cadr( aList )
                        `( ,elem ,car( aList ) ,@cddr( aList ))
                )
                ( t
                        cons(
                                car( aList )
                                trSwapElementTowardTop( elem cdr( aList ))
                        )
                );t
        );cond
);procedure

/*
trSwapElementTowardTop(1 nil)        =>        nil
trSwapElementTowardTop(1 '(1))        =>        (1)
trSwapElementTowardTop(1 '(1 2))        =>        (1 2)
trSwapElementTowardTop(1 '(2 1))        =>        (1 2)
trSwapElementTowardTop(1 '(2 3 1 4))        =>        (2 1 3 4)
trSwapElementTowardTop(2 '(1 3 2 4))        =>        (1 2 3 4)
*/

 楼主| 发表于 2024-2-19 14:11:58 | 显示全部楼层
原文关键词:creating list box fields
发表于 2024-2-19 15:33:52 | 显示全部楼层
本帖最后由 yulizi 于 2024-2-19 15:39 编辑

没有逗号和逗号@时  反引号与单引号相同
如果逗号出现在反引号形式内部  紧跟在逗号后面的表达式会被评估   并且评估结果会替换原始形式


,elem 表示要取得 elem 变量的值并插入到表达式中
,@ 是展开符号,用于展开列表或向量,将其中的元素依次插入到当前列表中



y = 1
`(x y z)                      => (x y z)
`(x ,y z)                      => (x 1 z)

x = 1
y = '(a b c)
`(,x ,y z)                 => (1 (a b c) z)
`(,x ,@y z)                 => (1 a b c z)



 楼主| 发表于 2024-2-19 16:55:05 | 显示全部楼层


yulizi 发表于 2024-2-19 15:33
没有逗号和逗号@时  反引号与单引号相同
如果逗号出现在反引号形式内部  紧跟在逗号后面的表达式会被评估   ...


明白了,多谢解答!才发现在Help里直接搜 ,@ 就有结果。

还有个问题,上面的代码里,cond后面跟着的:
  (!aList nil)
这里 “ !aList ” 就是将aList取反吗?
我在CIW里看到是这样的:


a=1        =>        1
!a        =>        1

输入 “ !a ” 产生的log也不是 “ !a ” ,而是变成了 “ a=1 ”,返回值也是 “ 1 ”。
这要怎么理解?
发表于 2024-2-19 18:43:26 | 显示全部楼层
!aList 是判断 aList 是否为 nil
aList 为 nil 则输出 nil

ciw 输入 !a 表示执行上一个 a 开头的输入
 楼主| 发表于 2024-2-20 13:47:43 | 显示全部楼层


yulizi 发表于 2024-2-19 18:43
!aList 是判断 aList 是否为 nil
aList 为 nil 则输出 nil


原来如此,多谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-8 11:20 , Processed in 0.020076 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表