functional-programming - 创建元素出现在列表中的所有索引列表的函数

标签 functional-programming scheme lisp

我正在尝试编写一个函数 (positions N A L),它返回 A 出现在 L 中的每个索引的列表,N 是赋予 L 的第一个元素的数字。

例如,

(位置 0 'a '(a b c a d e a)) => (0 3 6)

(位置 1 'a '(a b c a d e a)) => (1 4 7)

到目前为止,我已经想到了这个(它不能正常工作):

(define (positions N A L)
  (cond
    ((null? L)
     '())
     ((= (car L) A)
      (cons N (positions (+ N 1) A (cdr L))))
     (#t
      (positions (+ N 1) A (cdr L)))))

最佳答案

试试这个:

(define (positions N A L)
  (cond
    ((null? L)          '())
    ((equal? (car L) A) (cons N (positions (+ N 1) A (cdr L))))
    (else               (positions (+ N 1) A (cdr L)))))

问题是 = 只为数字定义。如果您确定该列表将仅包含符号,请使用 eq?。否则使用 equal?,这是最通用的相等比较,适用于许多数据类型(数字、符号、 bool 值等)。此外,对最后一个条件使用 else ,使用 #t 是 Common Lisp 约定,不适用于 Scheme。

关于functional-programming - 创建元素出现在列表中的所有索引列表的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35630403/

相关文章:

haskell - 无法将类型 `h' 与 `String' 匹配

java - 有什么理由更喜欢数据挖掘项目的函数式编程吗?

平方根的 Scheme Lisp 连分数

Lisp 在列表中查找索引

javascript - ramda js 与 find、pick 和 trim 值组合

lisp - 定义语法方案使用

scheme - 递归序列的 Racket 条件和

scheme - Racket :使用大爆炸和点击

list - 是否可以检查列表在方案中是否正确?

python - 如何在 Python 中使用 lambda 进行排序