从方案中的List中获取元素

时间:2009-06-12 08:32:44

标签: scheme racket

如何从方案列表中查看列表或获取元素?

如何在列表中命名每个元素(就像我们对java中的变量所做的那样)?

提前致谢。

我想将列表中的每个点与另一个点进行比较。所以,正如我们在java或python-

中所做的那样
for(int i;i<list.size();i++){
    if (list[i]> k){ 
        //do something
    }

}

我怎样才能在计划中做类似的事情?

7 个答案:

答案 0 :(得分:5)

(map (lambda (x) (if (< x k) (dosomething x) x)) list)

答案 1 :(得分:4)

leppie和Jonas给出了在Scheme中迭代列表的正确答案。但是,如果您需要在列表中获取单个值,请使用list-ref

(let ((l '(1 2 3 4)))
  (list-ref l 2))

=> 3

大部分等同于Java代码

int[] l = new int[] { 1, 2, 3, 4 };
return l[2];

答案 2 :(得分:2)

您可以使用for-each

    (let ((a-list (list 9 2 7 6 1 4 3 8 1))
          (k 4)
          (something display))
      (for-each (lambda (i) ; The 'name' of the list element is i
                  (if (> i k)
                      (something i) ; Do something with i
                      #f)) ; Do nothing
                a-list))

for-eachmap类似,但返回值未指定。它仅被称为副作用。

另一方面,在我看来,你正在学习来自java背景的计划(没关系)。 Scheme程序通常以不同于Java的方式编写。 Scheme是一种函数式语言,循环结构不常用。拿一本关于Scheme的书,例如The Scheme Programming LanguageHow to Design Programs来学习如何编写程序“方案方式”

答案 3 :(得分:2)

在用函数式语言编写时,你应该有不同的想法。实际上你应该忘记编程思维(for循环等),只需定义你想要的东西。例如“我想对我列表中的每个奇数应用一个动作。” 所以你会写:

(map an-action
     (filter odd? my-list))

或者条件可以是元素&gt; 4

(define (higher-than-four? n) (> n 4))
(map an-action
     (filter higher-than-four?
             my-list))

对于某项操作,您可以提供任何功能:

> (map number->string
       (filter higher-than-four? my-list))
("5" "6" "7" "8" "9" "10")

答案 4 :(得分:0)

实施例

`(define func
  (lambda (a b)
    (if (> a b)
        (dosomething a))))`

在这种情况下,“dosomething”将是其他定义,无论是预定义的还是非定义的。定义类似于“函数”,例如square()或mult(),例如。

我认为像这样的递归应该适用于列表需求:

(define (func list) (if (> (car list) k) (dosomething)) (func (cdr list)))

您还可以编写两个定义,一个包含一个列表并将其发送到第一个示例并返回结果,比较,执行或不执行操作,然后继续。

答案 5 :(得分:0)

您可以使用list-ref通过索引从列表中提取值。但请注意,在Scheme列表中实际上是链接列表 - 因此(list-ref l 100) 需要追踪100个引用。如果您真的想要随机访问值,请使用向量。

答案 6 :(得分:0)

我不确定这是否是您想要的,但这会转到整个列表(链接)并将每个元素与您作为参数传递的元素进行比较:

(define (compare aList element)
      (if (> element (car aList)) 
         (display (car aList)) ;here do something great
         ;here the else if you have
        )
      (if (not (null? (cdr aList)))
               (compare (cdr aList) element)) 'ok)

这是一个程序的问题,也许对某人有帮助。

招呼