我试图在方案中创建一个简单的函数,找到列表中的最大数字.
这是我的代码:
(define (maximo lista maximo_actual)
(if (= lista ())
maximo_actual
(let* ((primero maximo_actual)
(segundo (car lista)))
(if (> primero segundo)
((maximo (cdr lista) primero))
((maximo (cdr lista) segundo))))))
Run Code Online (Sandbox Code Playgroud)
我用这个调用函数:
(maximo (list 6 3 2 8 9) 5)
Run Code Online (Sandbox Code Playgroud)
程序返回:
;ERROR: "programas.scm": =: Wrong type in arg1 (6 3 2 8 9)
; in expression: (#@= #@lista ())
; in scope:
; (lista maximo_actual) procedure maximo
; defined by load: "programas.scm"
Run Code Online (Sandbox Code Playgroud)
我认为参数有问题.我正在学习计划,我不知道问题出在哪里.
我的awnser基于Racket(基于方案)
您的计划存在一些问题.一,=比较数字,而不是列表.其次()是一个没有任何内容的函数,而不是列表.要创建一个空列表,请使用(list)或'().最后,((maximo (cdr lista) primero))有一组额外的括号,它会导致(maximo (cdr lista) primero)执行结果.但是,结果(maximo (cdr lista) primero)是一个数字.
我想你想要这样的东西,它会9在调用时返回(maximo (list 6 3 2 8 9) 5)
(define (maximo lista maximo_actual)
(if (empty? lista)
maximo_actual
(let* ((primero maximo_actual)
(segundo (car lista)))
(if ( > primero segundo)
(maximo (cdr lista) primero)
(maximo (cdr lista) segundo)))))
Run Code Online (Sandbox Code Playgroud)
你也可以用折叠来写它,它稍微短一点:
(define (maxio2 current result)
(if (> current result)
current
result))
(foldl maxio2 5 (list 6 3 2 8 9))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5577 次 |
| 最近记录: |