我编写了一个带有2个函数的方案代码,这些函数加上参数1,并从参数中减去1.我现在编写了一个自动执行此操作的函数,但我不知道它是递归还是迭代.这是整个代码:
(define add1?
(lambda (x)?
(+ x 1)))
(define sub1?
(lambda (x)?
(- x 1)))
(define plus?
(lambda (x y)?
(if (zero? y)?
x?
(plus (add1 x) (sub1 y)))))
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,加上什么样的功能?递归,或迭代,为什么?
这一定很容易实现,但我是新手,不知道如何:
我有一个列表(1 2 3 4)并想将其转换为(1)(2)(3)(4)
或者有没有办法将其构建为(1)(2)(3)(4).我在用
cons '(element) call-function
Run Code Online (Sandbox Code Playgroud)
在函数内构建它(递归)
我正在尝试将Racket上的两个列表相交,但是以下代码不起作用:
(define (intersection a b)
(if (null? a)
'()
(if (contains (car a) b)
(cond (car a)(intersection (cdr a) b))
(intersection (cdr a) b))))
Run Code Online (Sandbox Code Playgroud)
结果总是以列表b中包含的列表a的第一项加上列表a的其余部分结束。例如:
a = '(1 2 3 4 5 6)
b = '( 10 20 4 30 33)
Run Code Online (Sandbox Code Playgroud)
将返回:
'(4 5 6)
Run Code Online (Sandbox Code Playgroud)
我确定包含内容正确运行,因此错误必须出在我发布的代码中。谢谢!
或者更确切地说,为什么(= 1e16 (- 1e16 1))返回真实?我怎样才能收到更准确的答案?
我试图通过实现几个算法来学习方案.
Pollards-Rho(n)
g(x) = x2 + 1 mod n
x ? 2; y ? 2; d ? 1;
While d = 1:
x ? g(x)
y ? g(g(y))
d ? gcd(|x - y|, n)
If d = n, return failure.
Else, return d
Run Code Online (Sandbox Code Playgroud)
我试图在方案中实现上述算法.任何帮助,将不胜感激.谢谢
(F nmlfg):n和m是自然数,la数字列表,f和g函数采用数字参数并返回数字.F函数应该返回:
我需要在scheme中编写这个函数.我已经为产品开发了一个函数,但没有为如何执行角色的评估,我尝试使用eval命令但还没有工作
有什么帮助怎么办?
我正在尝试创建一个函数,用于在方案中使用R5RS语言展平列表,并且遇到了我的函数只返回输入列表而不删除括号的问题.我认为这是由于额外的缺点,但当我删除它时,输出变为列表,没有括号中的元素.有人能指出我正确的方向吗?
(define (denestify lst)
(cond ((null? lst)'())
((list? (car lst))(cons (denestify (cons (car (car lst))(cdr (car lst))))
(denestify (cdr lst))))
(else (cons (car lst)(denestify (cdr lst))))))
Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法来显示整数有理数,例如:
(average '(1 2 3 4)) ;returns 2 1/2
Run Code Online (Sandbox Code Playgroud)
我希望它返回5/2.谢谢.
在Scheme/Racket中执行此操作
问题是:取两个等长的数字列表,然后返回一个由位置最小的数字组成的列表.
例如: listMins( '(1 7 5) '(2 8 3) )
返回(1, 7, 3)因为1<2与7<8和3<5
我是函数式编程的新手,在递归时很弱.我觉得好像我只是缺少一些我不知道如何处理我的伪代码的关键部分,所以我可以开始编写这个真实的代码.(我尝试先跳入代码,但它没有用,所以我退回到伪代码.)
伪代码:
(listMins x, y)(
(if !null A)
(if > listAitem listBitem)
(add A to newList) ;where do I make newList?
(add B to newList)
(return newList)
)
Run Code Online (Sandbox Code Playgroud) 我定义了一个新版本if:
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause)))
Run Code Online (Sandbox Code Playgroud)
然后我用它如下:
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
Run Code Online (Sandbox Code Playgroud)
据我所知,由于else-clause传递给new-if在sqrt-iter过程始终评估,sqrt-iter从未停止使自身的递归调用.
但我不明白为什么我们在good-enough?return true=> 时不停止guess