cal*_*pto 8 scheme racket r5rs
我试图写一个简单的方案函数,返回列表的最后一个元素.我的功能看起来应该可以工作,但我设法失败了:
(define (last_element l)(
(cond (null? (cdr l)) (car l))
(last_element (cdr l))
))
(last_element '(1 2 3)) should return 3
Run Code Online (Sandbox Code Playgroud)
DrRacket继续给我错误:
mcdr: contract violation
expected: mpair?
given: ()
Run Code Online (Sandbox Code Playgroud)
既然(null? '())
是真的,我不明白为什么这是行不通的.
这是一个函数,我认为我需要做一个家庭作业(编写函数last-element
不是赋值),而且说明说我不能使用内置函数reverse
,所以我不能只做(car (reverse l))
我该如何修复这个功能?
Bar*_*mar 12
你的语法是完全错误的.你在函数体周围有一组额外的括号,在cond
子句周围不够,你的递归情况甚至不在其中cond
,所以无论测试成功还是失败都会完成.以下程序应该有效:
(define (last_element l)
(cond ((null? (cdr l)) (car l))
(else (last_element (cdr l)))))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21290 次 |
最近记录: |