从scheme中的列表中获取元素

从scheme中的列表中获取元素,scheme,racket,Scheme,Racket,如何在scheme中遍历列表或从列表中提取元素 如何命名列表中的每个元素(就像java中的变量一样) 提前谢谢 我想将列表中的每一点与另一点进行比较。因此,正如我们在java或python中所做的那样- for(int i;i<list.size();i++){ if (list[i]> k){ //do something } } (inti;ik){code> //做点什么 } } 如何在scheme中执行类似的操作?示例 `(define

如何在scheme中遍历列表或从列表中提取元素

如何命名列表中的每个元素(就像java中的变量一样)

提前谢谢

我想将列表中的每一点与另一点进行比较。因此,正如我们在java或python中所做的那样-

for(int i;i<list.size();i++){
    if (list[i]> k){ 
        //do something
    }

}
(inti;ik){code> //做点什么 } } 如何在scheme中执行类似的操作?

示例

`(define func
  (lambda (a b)
    (if (> a b)
        (dosomething a))))`
在这种情况下,“dosomething”将是其他定义,无论是否预定义。例如,定义类似于“函数”,例如square()或mult()

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

(定义(函数列表)
(如果(>(车辆列表)k)
(剂量测定法)
(功能(cdr列表))

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

示例

`(define func
  (lambda (a b)
    (if (> a b)
        (dosomething a))))`
(map (lambda (x) (if (< x k) (dosomething x) x)) list)
在这种情况下,“dosomething”将是其他定义,无论是否预定义。例如,定义类似于“函数”,例如square()或mult()

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

(定义(函数列表)
(如果(>(车辆列表)k)
(剂量测定法)
(功能(cdr列表))

您还可以编写两个定义,让其中一个包含一个列表并将其发送到第一个示例,然后返回结果、比较、做某事或不做某事,然后继续。

(map(lambda(x)(if((map (lambda (x) (if (< x k) (dosomething x) x)) list)
(图(λ(x)(if(
您可以使用:

(让((a名单(名单9 2 7 6 1 4 3 8 1)) (k 4) (某物展示) (对于每个lambda(i);列表元素的“名称”为i (如果(>ik) (我做的事);和我一起做 #f) 什么也不做 a名单) 每个
类似于,但返回值未指定。它只是因为它的副作用

另一方面,在我看来,您是从java背景学习scheme的(这是可以的)。Scheme程序的编写风格通常与Java不同。Scheme是一种函数式语言,循环构造并没有经常使用。例如,选择一本关于Scheme的书,或者学习如何“以Scheme的方式”编写程序。

您可以使用:

(让((a名单(名单9 2 7 6 1 4 3 8 1)) (k 4) (某物展示) (对于每个lambda(i);列表元素的“名称”为i (如果(>ik) (我做的事);和我一起做 #f) 什么也不做 a名单) 每个
类似于,但返回值未指定。它只是因为它的副作用


另一方面,在我看来,您是从java背景学习scheme的(这是可以的)。Scheme程序的编写风格通常与Java不同。Scheme是一种函数式语言,循环构造并没有经常使用。例如,拿起一本关于Scheme的书,或者学习如何编写程序“Scheme方式”

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];

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];

您可以使用
list ref
按索引从列表中提取值。但请注意,在Scheme中,列表实际上是链接列表——因此
(列表参考l 100)
需要跟踪100个引用。如果您确实需要随机访问值,请使用向量。

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

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

(map an-action
     (filter odd? my-list))
或者条件可以是元素>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")

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

(map an-action
     (filter odd? my-list))
或者条件可以是元素>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")

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

(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)
问题是,这是一个程序,可能对某人有帮助


问候

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

(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)
问题是,这是一个程序,可能对某人有帮助


问候

我不明白这个问题,你能澄清一下吗?是否要在列表中列出每个值?感谢Jonas的回复。我已经编辑了这个问题。请检查一下。我不明白这个问题,你能澄清一下吗?是否要在列表中列出每个值?感谢Jonas的回复。我已经编辑了这个问题。请检查一下。但名单在哪里?我应该逐个比较列表中的每个元素。但这里似乎只比较了两个值。我的主要问题是从列表中获取元素(就像我做的那样)