首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >剪辑:从多槽if实例中检索槽值

剪辑:从多槽if实例中检索槽值
EN

Stack Overflow用户
提问于 2016-12-13 01:25:21
回答 1查看 621关注 0票数 0

我有一个带有多槽实例的对象。我在一次调用中获取实例的插槽时遇到问题。示例:

代码语言:javascript
复制
(defclass AUTOMA (is-a USER)
(slot uuid))

(defclass TUTOMA (is-a USER)
(multislot list 
(type INSTANCE)))


(make-instance A1 of AUTOMA
(uuid a1))
(make-instance A2 of AUTOMA
(uuid a2))
(make-instance T1 of TUTOMA
(list [a1] [a2]))

我想检索多槽列表的第一个对象uuid。

1)尝试使用"first$":

代码语言:javascript
复制
CLIPS> (first$ (send [T1] get-list))
([a1])
CLIPS> (send (first$ (send [T1] get-list)) get-uuid)
[MSGFUN1] No applicable primary message-handlers found for get-uuid.
FALSE

2)尝试使用"implode$":

代码语言:javascript
复制
CLIPS> (implode$ (first$ (send [T1] get-list)))
"[a1]"
CLIPS> (send (implode$ (first$ (send [T1] get-list))) get-uuid)
[MSGFUN1] No applicable primary message-handlers found for get-uuid.
FALSE

似乎(a1)和"a1“都不适合(send XXX get-uuid)命令。有什么建议吗?

谢谢你,Nic

EN

回答 1

Stack Overflow用户

发布于 2016-12-13 06:54:05

首先$返回一个多字段值,而implode$返回一个字符串。您需要使用实例名称。使用第n$从多字段中检索字段。您还需要保持实例名称使用的大小写一致:

代码语言:javascript
复制
CLIPS> 
(defclass AUTOMA 
   (is-a USER)
   (slot uuid))
CLIPS> 
(defclass TUTOMA 
   (is-a USER)
   (multislot list (type INSTANCE)))
CLIPS> (make-instance A1 of AUTOMA (uuid a1))
[A1]
CLIPS> (make-instance A2 of AUTOMA (uuid a2))
[A2]
CLIPS> (make-instance T1 of TUTOMA (list [A1] [A2]))
[T1]
CLIPS> (send (nth$ 1 (send [T1] get-list)) get-uuid)
a1
CLIPS>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41106225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档