关于scheme语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于scheme语言相关的知识,希望对你有一定的参考价值。

刚开始自学。用scheme表达x 的n次方如何编写代码

参考技术A (define f (lambda (x n)
            (if (zero? n)
                1
                (* x (f x (- n 1))))))

DrRacket, version 5.3.6 Language: R5RS 运行成功

> (f 3 4)
81

n只支持正整数

参考技术B 返回以某指定数为底数的若干次幂的值
(expt number power)

参数
number
任意数值。
power
number 的幂数。
返回值
如果两个参数都是整数,则返回值为整数,否则为实数。
示例
命令: (expt 2 4)
16
命令: (expt 3.0 2.0)
9.0本回答被提问者采纳

关于 Scheme (plt-scheme) 中的“If..”

【中文标题】关于 Scheme (plt-scheme) 中的“If..”【英文标题】:About "If.." in Scheme (plt-scheme) 【发布时间】:2010-11-11 18:15:48 【问题描述】:

我的 Scheme 程序中有一个非常简单的要求来执行更多 在“if”的 true 条件下,不止一个语句。 .所以我写我的 代码,类似这样:

(if (= 1 1)
 ((expression1) (expression2))  ; these 2 expressions are to be
                                ; executed when the condition is true
  (expression3))

显然,以上不起作用,因为我无意中 用 # 个参数创建了一个 # 过程。所以,为了得到我的 工作完成,我只是将上述表达式放在一个新函数中,然后 从那里调用它,代替表达式 1、表达式 2。它 有效。

所以,我的意思是:是否还有其他条件构造 可以在这里支持我的要求吗?

【问题讨论】:

【参考方案1】:

您可以使用 COND,或者将表达式放入 Lisp 中的 PROGN 之类的东西中(我不知道它在 PLT Scheme 中是如何调用的。编辑:它被称为 BEGIN)。

COND 在 Scheme 中是这样的:

(cond [(= 1 1)
       (expression1)
       (expression2)]
      [else
       (expression3)])

【讨论】:

【参考方案2】:

在MIT-Scheme中,差别不大,可以使用begin

(if (= 1 1)
    (begin expression1 expression2)
    expression3)

或者使用条件:

(cond ((= 1 1) expression1 expression2)
      (else expression3))

【讨论】:

请注意,第二个表达式实际上与第一个相同: (cond ...) 函数在它检查的每个条件中都有一个隐含的 (begin ...),因此它们表面上是相同的.【参考方案3】:

您可以使用 (begin ...) 在 if 语句的真正分支中获取您想要的内容。见here

【讨论】:

【参考方案4】:

(begin ...) 是您评估多个表达式并返回最后一个表达式的方式。许多其他构造充当“隐式”begin 块(它们允许多个表达式,就像 begin 块,但您不需要说 begin),例如 cond 子句的主体, define 用于函数,lambda 的主体,let 的主体等;您可能一直在使用它而没有意识到它。但是对于if,这在语法中是不可能的,因为有两个表达式(一个表示真,一个表示假)彼此相邻,因此允许多个表达式会使其模棱两可。所以你必须使用明确的begin 构造。

【讨论】:

【参考方案5】:

在两种以上情况下使用if 语句涉及嵌套,例如:

(if (test-1)               ; "if"
    (expression-1)
    (if (test-2)           ; "else-if"
        (expression-2)
        (expression-3)))  ; "else"

使用cond 似乎是表达条件语句的首选方式,因为它比一堆嵌套的ifs 更容易阅读,并且您还可以执行多个语句而无需使用begin 子句:

(cond ((test-1)
       (expression-1))
      ((test-2) 
       (expression-2)
       (expression-3))
      (else 
       (default-expression)))

【讨论】:

以上是关于关于scheme语言的主要内容,如果未能解决你的问题,请参考以下文章

谈语法

Scheme语言实例入门--怎样写一个“新型冠状病毒感染风险检测程序”

编程语言的发展趋势及未来方向:函数式编程

有没有纯函数式的 Scheme 或 Lisp?

IDEA插件开发(25)--Color Scheme Management

编程语言