问题标签 [scheme]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
427 浏览

lisp - 有人可以帮助解释这个计划程序

问题:

这是期中考试的第一名,我写了“81 9”,他以为我忘了划掉一个法律,所以我划掉了 81,然后他就哭了。无论如何,我不明白为什么是81。

我明白为什么(lambda (x) (* x x)) (* 3 3) = 81,但是第一个 lambda 我不明白 x 和 y 值是什么,以及它们的[body] (x y)作用。

所以我希望有人能向我解释为什么第一部分似乎没有任何作用。

0 投票
3 回答
847 浏览

lisp - 如何编写这个 Lisp / Scheme 代码?

一个 lambda 表达式,它接受一个函数(一个参数)和一个数字,并将该函数应用于两倍的数字。

0 投票
2 回答
1082 浏览

scheme - 树递归/时间复杂度方案分配

如果你能帮助我解决这个问题的任何部分,我将不胜感激。谢谢。

  1. 将此定义转换为完全等效的树递归函数,称为二次幂。描述它的渐近时间复杂度并解释为什么它有这个时间复杂度。

  2. 现在编写一个名为 tttpo_rec 的函数,它计算完全相同的东西,但它使用线性递归过程,该过程具有 O(n) 时间复杂度,并且还使用 O(n) 空间来进行挂起的操作。

  3. 现在编写一个名为 tttpo_iter 的函数,它计算完全相同的东西,但它使用具有 O(n) 时间复杂度并且还使用常数空间的线性迭代过程。

  4. 现在假设您想概括前面的定义之一,以便它可以处理任意整数幂,以便您可以计算 2^N、3^N 等。编写一个名为 to-the-power-of 的函数,它接受两个参数并将一个提升到另一个的权力。

这是模板:

我们将再添加一个限制:您不能使用 * 运算符;您只能使用以下递归函数进行乘法运算:

编写函数,并描述其时间复杂度和原因。

0 投票
18 回答
8724 浏览

functional-programming - 你会用哪种语言自学SICP?

我已经抓住了真正学习函数式编程的错误。所以我的下一个自学项目是学习计算机程序的结构和解释。不幸的是,我从来没有学过 Lisp,因为我在大学时不是 CS 专业的。

虽然 SICP 不强调编程工具,但做练习需要选择一种类似 Lisp 的语言来使用。似乎Scheme的一些实施将是阻力最小的路径。另一方面,我听说其他人使用过Common LispClojure。在我看来,Common Lisp 或 Clojure 更有可能用于生产代码,因此对我的简历来说稍微好一些。顺便说一句,我完全明白学习一门语言本身是值得的,但学习一门有助于我的简历的语言仍然是一种好处。我是一个资本家,也是一个关于我的学习的学者。

如果你必须自学 SICP,你会选择哪种语言,为什么?理想情况下,我想使用一种可以在 JVM 上运行的语言。我当然可以使用 REPL 与 bash 和 emacs 一起使用的语言。

补充:你们有没有人尝试过不使用 Scheme 来阅读 SICP?如果是这样,你的经历是怎样的?

0 投票
10 回答
3296 浏览

lisp - 您使用过 Scheme 宏的一些事情是什么?

宏的许多示例似乎是关于隐藏 lambda,例如 CL 中的 with-open-file。我正在寻找宏的一些更奇特的用途,特别是在 PLT 方案中。我想了解何时考虑使用宏与使用函数。

0 投票
2 回答
6224 浏览

coding-style - 使用 Scheme 代码求解二次方程?

我编写了这个方案代码来计算二次方程 a x2 + b x + c = 0的一个解

但是,有人告诉我,这个程序很难理解。为什么?

这个过程的清理版本会是什么样子?请让我知道为什么新程序更容易理解。

谢谢

0 投票
2 回答
1600 浏览

function - 计算函数的第 n 次重复应用的方案过程?

有人熟悉这个吗?

编写一个过程,将计算 f 和正整数 n 的过程作为输入,并返回计算 f 的第 n 次重复应用的过程。该程序应该能够按如下方式使用:

我知道我为函数组合创建的以下代码将有助于使解决方案更简单,但我不确定从这里去哪里:

0 投票
3 回答
134 浏览

lambda - 我在这个方案评估中做错了什么?

评估:

这就是我所做的:

  • 评估((((lambda (x) (lambda (y) (lambda (x) (+ x y)))) 3) 4) 5)

    • 评估5 -> 5
  • 评估(((lambda (x) (lambda (y) (lambda (x) (+ x y)))) 3) 4)

    • 评估4 -> 4
  • 评估((lambda (x) (lambda (y) (lambda (x) (+ x y)))) 3)

    • 评估3 -> 3
  • (lambda (x) (lambda (y) (lambda (x) (+ x y))))->(lambda (x) (lambda (y) (lambda (x) (+ x y))))

  • 适用(lambda (x) (lambda (y) (lambda (x) (+ x y))))3

    • 替代3->x(lambda (y) (lambda (x) (+ x y))

    • (lambda (y) (lambda (x) (+ 3 y))

    • 评估(lambda (y) (lambda (x) (+ 3 y)) -> (lambda (y) (lambda (x) (+ 3 y))

    • apply (lambda (y) (lambda (x) (+ 3 y))4

    • 4 -> y(lambda (y) (lambda (x) (+ 3 y))

    • (lambda (y) (+ 3 4))

    • 评估(lambda (y) (+ 3 4)) -> (lambda (y) (7))

      • 替代5->?

然后我被卡住了。

0 投票
1 回答
828 浏览

scheme - 为什么这个 Scheme 平方和函数不起作用?

我测试了一下,这个sum-of-squares功能不起作用。为什么?

0 投票
2 回答
1678 浏览

function - Scheme中函数的重复应用?

如果f是一个数值函数,n是一个正整数,那么我们可以形成f的第n次重复应用,它被定义为在x处的值为f(f(...(f(x)))的函数。 ..))。例如,如果 f 是函数 x + 1,则 f 的第 n 次重复应用是函数 x + n。如果 f 是一个数的平方运算,则 f 的第 n 次重复应用是将其参数提高到 2^n 次方的函数。编写一个过程,将计算 f 和正整数 n 的过程作为输入,并返回计算 f 的第 n 次重复应用的过程。您的程序应该能够按如下方式使用:

您可以使用它来简化答案: