标签: mit-scheme

Emacs Scheme评估-last-sexp

我试图将这些添加到我的.emacs中,但它们似乎没有效果

(local-set-key (kbd "C-x C-e") 'scheme-send-last-sexp )
(local-set-key (kbd "C-M-x") 'scheme-send-definition )
Run Code Online (Sandbox Code Playgroud)

当我在.scm缓冲区中尝试Cx Ce时,我正在使用嘎嘎并且在一个缓冲区中运行MIT-Scheme.我没有评估最后的s表达式,而是"你必须用run-ilisp开始一个劣质的LISP".但是如果我手动添加快捷方式:

M-x local-set-key RET C-x C-e scheme-send-last-sexp RET
M-x local-set-key RET C-M-x scheme-send-definition RET
Run Code Online (Sandbox Code Playgroud)

有用.如何在不手动输入的情况下在Emacs(23.3.1)中获得此功能?

emacs mit-scheme

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

方案:不能在 if 语句中使用 #t

如果问题标题有点混乱,请见谅。也许在你读完之后,你可以给我推荐一个更好的标题。

作为在线课程家庭作业的一部分,我编写了一个迭代过程mit-scheme来显示从 1 到给定数字的数字。

下面的代码工作正常:

(define (count2-iter num)
    (define (iter counter)
        (cond ((> counter num) #t)
              (else (display counter)
                (iter (+ counter 1)))))
    (iter 1))
Run Code Online (Sandbox Code Playgroud)

输出:

1 ]=> (load "count2-iter.scm")

;Loading "count2-iter.scm"... done
;Value: count2-iter

1 ]=> (count2-iter 10)
12345678910
;Value: #t
Run Code Online (Sandbox Code Playgroud)

我个人不喜欢cond仅用于 2 个分支,因此我尝试使用if它。

(define (count2-iter1 num)
    (define (loop idx)
        (if (> idx num)
            #t
            ((display idx)
             (loop (+ idx 1)))))
    (loop 1))
Run Code Online (Sandbox Code Playgroud)

输出:

1 ]=> (count2-iter1 5)
5
;The object #!unspecific is …
Run Code Online (Sandbox Code Playgroud)

iteration scheme mit-scheme

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

是否有可能在mit-scheme中实现"define-macro"

看完这个页面.我发现很难记住如何使用define-syntax代替define-macro,所以我想define-macro在mit-scheme中实现(或者至少找到一些等价物).

这是我的(有问题的)实现:

(define-syntax define-macro
  (rsc-macro-transformer
    (let ((xfmr (lambda (macro-name macro-body)
      (list 'define-syntax macro-name
        (list 'rsc-macro-transformer
          (let ((m-xfmr macro-body))
            (lambda (e r)
              (apply m-xfmr (cdr e)))))))))
      (lambda (e r)
        (apply xfmr (cdr e))))))

(define-macro my-when
  (lambda (test . branch)
    (list 'if test (cons 'begin branch))))

(my-when #t
  (begin
    (display "True")
    (newline)))
Run Code Online (Sandbox Code Playgroud)

REPL抱怨说:

;The object (lambda (test . branch) (list (quote if) test (cons (quote begin) branch))) is not applicable.
Run Code Online (Sandbox Code Playgroud)

我刚接触计划并且不知道出了什么问题,有人可以帮助我吗?

scheme mit-scheme

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

方案拉姆达?它是什么?

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

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
查看次数

将 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
查看次数