从scheme中的列表中获取元素
如何在scheme中遍历列表或从列表中提取元素 如何命名列表中的每个元素(就像java中的变量一样) 提前谢谢 我想将列表中的每一点与另一点进行比较。因此,正如我们在java或python中所做的那样-从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
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的回复。我已经编辑了这个问题。请检查一下。但名单在哪里?我应该逐个比较列表中的每个元素。但这里似乎只比较了两个值。我的主要问题是从列表中获取元素(就像我做的那样)