方案中的条件定义 (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)))