方案中的条件定义 (lisp)
Conditional definitions in scheme (lisp)
(define (smallest x y z)
(define min x)
(cond ((< y min) (define min y))
((< z min) (define min z))
(se (define min x)))
min)
我正在尝试创建一个简短的程序,其中 returns 是三个数字中最小的一个。条件表达式似乎不能是定义,因为我收到此错误:
begin (possibly implicit): no expression after a sequence of internal definitions in:
(begin (define min y))
(define min y)
你对我实际上做错了什么有什么建议吗,问题是使用表达式部分的定义吗?如果是这样,您将如何解决这个问题?提前致谢!
问题中的代码有几个问题:
- 最后一个条件应该是
else
,而不是 se
。
- 您不应命名变量
min
,此名称与同名的内置过程冲突。
- 您不能在任意位置
define
变量,define
只允许在程序的开头。要更改已经存在的值,请使用 set!
- 但是等等!你应该尽可能避免使用 set!
,在 Scheme 中我们更喜欢函数式编程风格的解决方案,并且强烈不鼓励改变变量。
- 算法一开始就不对。请注意,
cond
中只有 一个 的条件会被执行,并且无法仅通过一次比较来确定三个数字中的最小值!
在 Scheme 中解决这个问题的最简单方法是:
(define (smallest x y z)
(min x y z))
如果您想手动实现它,可以进行更多比较:
(define (smallest x y z)
(cond ((and (<= x y) (<= x z)) x)
((and (<= y x) (<= y z)) y)
(else z)))
(define (smallest x y z)
(define min x)
(cond ((< y min) (define min y))
((< z min) (define min z))
(se (define min x)))
min)
我正在尝试创建一个简短的程序,其中 returns 是三个数字中最小的一个。条件表达式似乎不能是定义,因为我收到此错误:
begin (possibly implicit): no expression after a sequence of internal definitions in:
(begin (define min y))
(define min y)
你对我实际上做错了什么有什么建议吗,问题是使用表达式部分的定义吗?如果是这样,您将如何解决这个问题?提前致谢!
问题中的代码有几个问题:
- 最后一个条件应该是
else
,而不是se
。 - 您不应命名变量
min
,此名称与同名的内置过程冲突。 - 您不能在任意位置
define
变量,define
只允许在程序的开头。要更改已经存在的值,请使用set!
- 但是等等!你应该尽可能避免使用set!
,在 Scheme 中我们更喜欢函数式编程风格的解决方案,并且强烈不鼓励改变变量。 - 算法一开始就不对。请注意,
cond
中只有 一个 的条件会被执行,并且无法仅通过一次比较来确定三个数字中的最小值!
在 Scheme 中解决这个问题的最简单方法是:
(define (smallest x y z)
(min x y z))
如果您想手动实现它,可以进行更多比较:
(define (smallest x y z)
(cond ((and (<= x y) (<= x z)) x)
((and (<= y x) (<= y z)) y)
(else z)))