Scheme 中的最大值和最小值
Max and min in Scheme
我需要获取方案中列表的最大值和最小值。 (我们不允许使用内置函数。)下面的代码有问题。我不确定是什么,也许带有括号。有人可以帮忙吗?
#lang racket
(define (maxmin L)
(cond
((null? L) '())
((null? (cdr L)) (list (car L) (car L)))
(else (let((mmtemp(maxmin (cdr L)))
(first (car L)))
(cond(( > first (car mmtemp))
(cons first(cdr mmtemp)))
(( < first (car mmtemp))
(list (car mmtemp) first))
else (temp))))))
( maxmin 1 2 3)
这里的主要问题是最后一行:
else (temp))))))
这里的括号不正确——else
关键字需要在括号内。将其更改为:
(else temp))))))
...修复算法。
您也没有正确调用 maxmin
——它需要一个列表,而不是一系列参数。该程序的最后一行应如下所示:
(maxmin '(1 2 3))
这些更改将使您的程序正常工作。
但是,您的代码不是很地道的 Racket。它非常像 Scheme,虽然 Racket 是 Scheme 的衍生产品,但它是一种具有自己的成语集的独立语言。
如果您想编写惯用的 Racket 代码,可以在各个地方使用方括号代替圆括号以提高可读性。此外,您可以使用 first
代替 car
和 rest
代替 cdr
来对列表进行操作,使事情更清楚。
合并这些更改会导致代码(在我看来)更具可读性。
#lang racket
(define (max-min lst)
(cond
[(null? lst) '()]
[(null? (rest lst))
(list (first lst) (first lst))]
[else
(let ([rst (max-min (rest lst))]
[fst (first lst)])
(cond
[(> fst (first rst))
(cons fst (rest rst))]
[(< fst (first rst))
(list (first rst) fst)]
[else rst]))]))
(max-min '(1 2 3))
我需要获取方案中列表的最大值和最小值。 (我们不允许使用内置函数。)下面的代码有问题。我不确定是什么,也许带有括号。有人可以帮忙吗?
#lang racket
(define (maxmin L)
(cond
((null? L) '())
((null? (cdr L)) (list (car L) (car L)))
(else (let((mmtemp(maxmin (cdr L)))
(first (car L)))
(cond(( > first (car mmtemp))
(cons first(cdr mmtemp)))
(( < first (car mmtemp))
(list (car mmtemp) first))
else (temp))))))
( maxmin 1 2 3)
这里的主要问题是最后一行:
else (temp))))))
这里的括号不正确——else
关键字需要在括号内。将其更改为:
(else temp))))))
...修复算法。
您也没有正确调用 maxmin
——它需要一个列表,而不是一系列参数。该程序的最后一行应如下所示:
(maxmin '(1 2 3))
这些更改将使您的程序正常工作。
但是,您的代码不是很地道的 Racket。它非常像 Scheme,虽然 Racket 是 Scheme 的衍生产品,但它是一种具有自己的成语集的独立语言。
如果您想编写惯用的 Racket 代码,可以在各个地方使用方括号代替圆括号以提高可读性。此外,您可以使用 first
代替 car
和 rest
代替 cdr
来对列表进行操作,使事情更清楚。
合并这些更改会导致代码(在我看来)更具可读性。
#lang racket
(define (max-min lst)
(cond
[(null? lst) '()]
[(null? (rest lst))
(list (first lst) (first lst))]
[else
(let ([rst (max-min (rest lst))]
[fst (first lst)])
(cond
[(> fst (first rst))
(cons fst (rest rst))]
[(< fst (first rst))
(list (first rst) fst)]
[else rst]))]))
(max-min '(1 2 3))