方案括号

时间:2018-03-04 05:14:51

标签: functional-programming scheme mit-scheme

有没有人能帮助我发现在下面找到列表中的最小值和最大值并将它们作为列表返回的方法有什么问题?它应该是逻辑上的工作。我认为括号有问题。

(define (find-min-and-max my-list)
    (find-min-max-rec (car my-list) (car my-list) my-list)
)

(define (find-min-max-rec smallest largest ls)
    (if (null? ls)
        (list smallest largest)
    )
    (cond 
        ((and (< smallest (car ls)) (> largest (car ls)) ) (find-min-max-rec (car ls) (car ls) (cdr ls)))
        ((< smallest (car ls)) (find-min-max-rec (car ls) largest (cdr ls)))
        ((> largest (car ls)) (find-min-max-rec smallest (car ls) (cdr ls)))
        (else (find-min-max-rec smallest largest (cdr ls)))
    )
)

(display (find-min-and-max '(1 2 3 4)))

控制台输出

*** ERROR: pair required, but got ()
    While loading "./jdoodle.sc" at line 17
Stack Trace:
_______________________________________
  0  (car ls)
        at "./jdoodle.sc":10
  1  (find-min-and-max '(1 2 3 4))
        at "./jdoodle.sc":17
Command exited with non-zero status 70

预期

(1 4)

此外,您是否建议使用任何调试工具?

注意:我一直在这里运行我的代码:https://www.jdoodle.com/execute-scheme-online

1 个答案:

答案 0 :(得分:7)

是的,实际上你是对的。括号有问题。

以下是一个线索:评估的内容是什么?

(define (f x)
  (if (< x 5) 10)
  12)

(f 3)

为什么?