标签: scheme

方案拉姆达?它是什么?

方案中是什么?我们如何使用它?

scm> (define (x) 100)
x
scm> (x)
100
scm> x ; When we "called" x, it return (lambda () 100). what is it ?
(lambda () 100)
Run Code Online (Sandbox Code Playgroud)

scheme racket mit-scheme

0
推荐指数
1
解决办法
562
查看次数

在Scheme中的相互递归中获得尾调用优化

在为MIT/GNU Scheme (rel 9.2 ) 中的oddeven函数开发经典练习代码时,我遇到了一个问题,即我的代码不会因大整数值而终止。首先,我测试了以下代码,它处理正值和负值:

(define error-message-number "Error. x must be a number")

(define odd?
  (lambda (x)
    (cond 
      ((not (integer? x)) error-message-number)
      ((= x 0) #f)
      ((< x 0) (even? (+ x 1))) ;for negatives
      (else (even? (- x 1)))))) ;if number n is odd then n - 1 is even 

(define even?
  (lambda (x)
    (cond 
      ((not (integer? x)) error-message-number)
      ((= x 0) #t)
      ((< x 0) (odd? (+ x 1))) ;for negatives
      (else …
Run Code Online (Sandbox Code Playgroud)

recursion scheme tail-recursion mutual-recursion mit-scheme

0
推荐指数
1
解决办法
141
查看次数

在 Scheme/SICP 中使用“-&gt;”

在谈论 Painters 时,SICP 使用定义如下的程序:

(define (segments->painter segment-list)
   ...
)
Run Code Online (Sandbox Code Playgroud)

不幸的是,文本并没有(还?)说明什么->代表什么。->Scheme中的用法是什么?例如,显示段将被视为画家的“方法”(或者反之亦然)是否是 OOP 风格的事情?我唯一见过这个->符号的地方是在 C 中,当然我们在这里不处理指针,所以我有点不清楚它是如何使用的或它在什么约定中使用。

lisp scheme sicp racket

0
推荐指数
1
解决办法
56
查看次数

球拍:如何对点分隔的数字进行排序

在 Racket 中,一种点分隔数字(例如软件的版本号)如何?

例如

'("1.1.2" "1.0.0" "1.3.3" "1.0.7" "1.0.2")
Run Code Online (Sandbox Code Playgroud)

分类为

'("1.0.0" "1.0.2" "1.0.7" "1.1.2" "1.3.3")
Run Code Online (Sandbox Code Playgroud)

scheme racket

0
推荐指数
1
解决办法
77
查看次数

将 MIT Scheme 代码逻辑转换为 Common Lisp

在我的一本书中,我有这个方案代码,并想将其转换为 Common Lisp:

(define (make-account balance)

  (define (withdraw amount)
    (if (>= balance amount)
      (begin (set! balance (- balance amount))
        balance)
        "Insufficient funds"))

  (define (deposit amount)
    (set! balance (+ balance amount))
      balance)

  (define (dispatch m)
    (cond
      ((eq? m 'withdraw) withdraw)
      ((eq? m 'deposit) deposit)
      (else (error "Unknown request -- MAKE-ACCOUNT" m))))

  dispatch)
Run Code Online (Sandbox Code Playgroud)

然后我将使用以下命令创建它:

(define acc (make-account 1500))
Run Code Online (Sandbox Code Playgroud)

然后调用depositwithdraw

((acc 'withdraw) 50) 或者

((acc 'deposit) 75)

据我了解, acc被函数替换dispatch并返回withdrawordeposit 然后计算表达式,例如: ((acc 'withdraw) 50) …

lisp scheme sbcl common-lisp mit-scheme

0
推荐指数
1
解决办法
106
查看次数

对R6RS计划的批评

我听到Schemers对新的R6RS计划提出了很多抱怨.什么比R5RS更糟糕?

lisp scheme

-1
推荐指数
1
解决办法
524
查看次数

lisp方案列表

为什么结果(cons (list 1 2) (list 3 4))((1 2) 3 4)

我想知道为什么结果长度为3(3个元素).我的直觉让我觉得这 (list 1 2)是一个列表,(list 3 4)也是一个列表.通过使用cons过程,结果应该是两个元素,每个元素都是一个列表,但结果并不像我期望的那样.

谁能告诉我为什么?谢谢.

lisp scheme list

-1
推荐指数
1
解决办法
307
查看次数

计划和球拍

RacketScheme之间的语言有很大差异吗?在" 如何设计程序"(HtDP2e)一书中,他们教你使用Racket,但在着名的SICP中它是Scheme.我将同时阅读这些书籍,我应该注意什么?

scheme functional-programming racket

-1
推荐指数
1
解决办法
476
查看次数

mit-scheme的“格式错误的子句”问题

使用mit-scheme尝试一些Lisp。

(define (inv curstate x y)
  ((cond (= y 1) curstate)
   (cond (even? y)
         (inv (square curstate) x (/ y 2)))
   (else 
    (inv (* x curstate) x (- y 1)))))
Run Code Online (Sandbox Code Playgroud)

解释器错误:

格式错误的子句:curstate

另一个版本使用线性递归方法,因此存在类似的错误。该怎么办?

lisp scheme

-1
推荐指数
1
解决办法
265
查看次数

Scheme - 将列表拆分为两个相等的列表

问题:

编写一个函数(split l),它接受一个列表并将其分成两个大小相同(在一个内)的列表,并返回一个对,其car是第一个列表,其cdr是第二个列表.

我的代码:

(define split list)
  (let ((half (/ (length list) 2)
    (cons (car half list)
          (cdr half list))))
Run Code Online (Sandbox Code Playgroud)

scheme split list equals

-1
推荐指数
1
解决办法
3762
查看次数