作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个包含2个表达式的过程,并且如果有一种方法可以使用exp,rest,cons首先通过exp2(当用'sss替换exp2时)来创建exp1,然后它返回产生exp1所需的代码。
例如,这就是我想要产生的。
(find-in '(e r t) '(e t) ) => '(cons (first sss) (rest (rest sss)))
我的代码适用于许多测试用例,但是当我运行时
(find-in '(a '(((v)) l) (f g)) '( (v g) l a))
它返回此错误:
first: contract violation
expected: (and/c list? (not/c empty?))
given: 'g
当我尝试运行此测试用例时,会出现相同的错误:
(find-in '(x a (x y)) '(z a (b)))
;supposed to return #f
到目前为止,这是我的代码:
(define find-in
(lambda (exp2 exp1)
(cond
((equal? exp2 exp1) 'sss)
((null? exp2) #f)
((not (list? exp2)) #f)
((find-in (first exp2) exp1) (repl 'sss '(first sss) (find-in (first exp2) exp1)))
((find-in (rest exp2) exp1) (repl 'sss '(rest sss) (find-in (rest exp2) exp1)))
(else (list? exp1)
(if
(and (find-in exp2 (first exp1)) (find-in exp2 (rest exp1)))
(list 'cons (find-in exp2 (first exp1)) (find-in exp2 (rest exp1)))
#f) #f))))
我对我在编码或缺少逻辑错误时错过的条件感到困惑。可能出了什么问题?
最佳答案
您的最后一句话对我而言并不正确。当您在最后一个子句中使用特殊的else
token 时,您的意思是“这里没有要测试的东西,如果您已经做得这么远,则可以无条件地执行它的主体”。因此,就(list? exp1)
而言,您的下一个表达式cond
并不是测试:它会评估副作用,并将结果丢弃。然后,还评估下一个表达式,不管exp1
是否为列表。
如果要以exp1
是否为列表为条件,则应在开头删除多余的else
(并在结尾处添加else
子句,以在没有匹配的情况下返回#f
)。
关于list - 首先: contract violation error in racket/scheme for printing out a combination of list procedures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63999308/
我是一名优秀的程序员,十分优秀!