我正在做SICP的1.18练习,我遇到了一些麻烦。目的是在之前的两个练习的基础上制定一个程序。这个程序实现所谓的俄罗斯农民方法(或古埃及乘法)。我写了一段代码,但有一个程序不想执行。这是我的密码:
#lang sicp
(define (double a) (+ a a))
(define (halve a) (/ a 2))
(define (r_m a b)
(iter a b 0))
(define (iter a b n)
(cond ((= b 0) 0)
((even? a) (iter (halve a) (double b) (+ n
“计算机程序的结构与解释”一书的练习1.3要求如下:
练习1.3.定义一个以三个数字为参数并返回两个较大数字的平方和的过程。
我的答案是:
squareTwoLargest(X, Y, Z, R) :-
( X > Y -> A = X, B = Y ; A = Y, B = X ),
R is A ^ 2 + max(B, Z) ^ 2.
我学习Prolog的原因是为了理解逻辑编程范例。那么,如何用良好的逻辑编程风格来解决这个问题呢?
我正在使用著名的书SICP。在练习1.18中,发生了一件奇怪的事情。
我写了这段代码:
(define (double n) (* 2 n))
(define (halve n) (/ n 2))
(define (fast-mult a b)
(fast-mult-iter a b 0))
(define (fast-mult-iter a b counter)
(cond ((= b 0) counter)
((even? b) (fast-mult-iter (double a) (halve b) counter))
(else
球拍的翻译给我带来了错误
在实现递归的过程中
练习1.11的功能:
#lang sicp
(define (f n)
(cond ((< n 3) n)
(else (+ f((- n 1))
(* 2 f((- n 2)))
(* 3 f((- n 3)))))))
(f 2)
(f 5)
球拍测定仪的误差如下:
2
application: not a procedure;
expected a procedure that can be applied to arguments
我在做SICP ex 3.52。我得到了对“stream”和“display”表达式的正确响应,并且在练习中给出的每个表达式之后,也得到了"sum“的正确值。然而,所有这些都不需要使用第439页所提供的“备注-proc”优化,就在列出的练习之前。
我在Linux上使用的是Guile,我对代码所做的唯一补充就是在代码顶部为“cons”定义了一个语法定义,以包含"delay“表单。
也许我误解了什么,但我甚至没有看到“备忘录-proc”在执行过程中被称为“备忘录-proc”。有什么是Guile内置的吗?它已经完成了由“备忘录-proc”提供的优化,根据SICP的说法,它作为一种特殊
我正在做来自SICP的练习1.3。
我的代码如下:
#lang racket
(require sicp)
(define (square a)
(* a a)
)
(define (sum-of-squares a b)
(+ (square a) (square b) )
)
(define (max a b)
(cond ((>= a b) a)
(else b)
)
)
(define (sum-of-bigges
我正试着通过SICP学习方案。练习1.3的内容如下:定义一个过程,该过程以三个数字作为参数,并返回两个较大数字的平方和。请评论我如何改进我的解决方案。
(define (big x y)
(if (> x y) x y))
(define (p a b c)
(cond ((> a b) (+ (square a) (square (big b c))))
(else (+ (square b) (square (big a c))))))
我正在Haskell做SICP的练习1.20,我想知道是否有一种方法可以通过编程来可视化还原步骤?它应该是这样的:。
在"b is 6"中,我希望看到未计算的(或仓促的)表达式,如gcd' 40 (rem 206 40)。
示例程序:
import Debug.Trace
gcd' a b =
if b == 0
then a
else trace ("b is " ++ show b) gcd' b (a `rem` b)
main = print $ gcd' 206 40
这个问题
我正在阅读SICP in javascript和一个求正弦近似值的练习: function abs(x) {
return x >= 0 ? x : -x;
}
function cube(x) {
return x * x * x;
}
function p(x) {
return 3 * x - 4 * cube(x);
}
function sine(angle) {
return !(abs(angle) > 0.1)
? angle
: p(sine(angle / 3));//p for p
SICP中的练习1.3要求定义一个过程,该过程以3个数字作为参数,并返回2个最大数字的平方和。我想我已经做对了,但是我不能完全确定我是否涵盖了所有的情况。我的实现如下: (define (bigsq a b c)
(cond ((and (> a b) (> b c)) (+ (* a a) (* b b)))
((and (> a b) (not (> b c))) (+ (* a a) (* c c)))
((> c a) (+ (* b b) (* c c)))
(else (+ (* a
我开始学习具有Java背景的Lisp。在SICP的练习中,有许多任务需要学生创建具有许多参数的抽象函数,例如
(define (filtered-accumulate combiner null-value term a next b filter)...)
在中。在Java (具有安全、静态类型规则的语言)中,带有4个以上参数的方法通常很难闻,但在Lisp/Scheme中却不是这样,不是吗?我想知道你的函数中使用了多少个参数?如果你在生产中使用它,你会制作同样多的层吗?
我已经看到可能重复的问题,但他们似乎建议使用go模块。但是我想知道为什么GOPATH的良好的功能不能发挥作用:-
导入路径P表示在GOPATH环境变量中列出的DIR/src/P目录中的包(有关详细信息,请参阅“go help gopath”)。
我正在尝试从文件root.go中使用main.go
~/src/github.com/himanshugarg/sicp/root$ ls
main.go root.go test.go
文件root.go有包声明:-
~/src/github.com/himanshugarg/sicp/root$ head root.go
// Fin
我是一个编程初学者,现在正在从Python切换到Clojure。我正在研究一个质数代码,但我不明白这个错误。我也想练习递归。
(defn true-division [n i]
(= (/ n i) (quot n i)))
;proves if division is possible
(defn is-prime-number2 [n]
(def i (atom (- n 1)))
(while (> @i 1)
(do
(conj list (true-division n @i))
(swap! @i dec))))
;should