我试图将这些添加到我的.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)中获得此功能?
如果问题标题有点混乱,请见谅。也许在你读完之后,你可以给我推荐一个更好的标题。
作为在线课程家庭作业的一部分,我编写了一个迭代过程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) 看完这个页面.我发现很难记住如何使用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)
我刚接触计划并且不知道出了什么问题,有人可以帮助我吗?
方案中是什么?我们如何使用它?
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) 在为MIT/GNU Scheme (rel 9.2 ) 中的odd和even函数开发经典练习代码时,我遇到了一个问题,即我的代码不会因大整数值而终止。首先,我测试了以下代码,它处理正值和负值:
(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) 在我的一本书中,我有这个方案代码,并想将其转换为 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)
然后调用deposit或withdraw:
((acc 'withdraw) 50)
或者
((acc 'deposit) 75)
据我了解,
acc被函数替换dispatch并返回withdrawordeposit
然后计算表达式,例如:
((acc 'withdraw) 50) …
mit-scheme ×6
scheme ×5
common-lisp ×1
emacs ×1
iteration ×1
lisp ×1
racket ×1
recursion ×1
sbcl ×1