【问题标题】:how to find element of list by knowing its position in clisp?如何通过知道其在 clisp 中的位置来查找列表元素?
【发布时间】:2014-08-26 09:07:43
【问题描述】:

如果我知道一个元素在 clisp 列表中的位置,那么我如何在知道它的位置的情况下检索该元素。是否有任何预定义的功能?

【问题讨论】:

标签: lisp common-lisp clisp


【解决方案1】:

对于列表只有NTH:

CL-USER> (nth 2 '(1 2 3 4 5)) 
3

对于序列(向量、字符串、列表...)有ELT

CL-USER> (elt '(1 2 3 4 5) 2) 
3

如果您确实需要大量按索引访问元素,我建议您考虑使用向量(并通过aref 访问元素)而不是列表,特别是如果您有登录序列,因为按索引访问元素列表可能需要沿着所有列表移动到您的元素。

当然,如果你的数据量很少,你不会觉得有什么区别,但是用适合我的东西看起来很好。

【讨论】:

    【解决方案2】:

    我取决于你的口齿不清。最好的办法是只编写一个返回列表项的 2 参数函数。参数 1 item_index,参数 2 列表,只是在您移动时递归地减少索引并返回第一个索引的第 0 个。请注意,您需要确定列表中的汽车是索引 1 还是索引 0。人类更喜欢一个,计算机 0。

    【讨论】:

    • -1 (i) 问题用 clisp 标记,它是 Common Lisp 的特定实现,Common Lisp 确实提供了两个函数来执行此操作。所以这里的“口齿不清”没有变化。 (ii) 这是一个基本函数,大多数 lisp 风格已经定义了一个函数。阅读该实现的文档并找出它提供的内容比重新发明轮子要好得多。
    • 是的,无论如何,根据 lisp 的经验,vernaclar 确实存在。老实说,你看起来很口齿不清,现在花了更多时间发布你的 Q 并激怒我。比编写和测试这个婴儿辅助功能还需要。请记住,lisp 编译器将简单的递归转换为迭代,因此它不会成为性能问题。
    • 回复:“请记住 lisp 编译器将简单递归转换为迭代,因此它不会成为性能问题。” Scheme 是执行尾调用优化所必需的。不需要 Common Lisp。 Common Lisp 的一些实现会这样做,虽然有时它需要声明,但在 Common Lisp 中要困难得多,因为它与动态变量的交互。
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2013-03-24
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多