标签: racket

这段代码的球拍/方案成语是什么?

我是球拍/方案的新手,所以我决定通过为DCPU-16(一个简单的16位处理器)实现仿真器来学习.

我的问题是:实施我的解决方案的更好方法是什么?

这是我一起攻击控制cpu寄存器的解决方案.重点是允许修改寄存器的函数链接在一起.例如:

; Increment value stored in register r-id
; returns the updated register
;
; Reg - the register structure 
; (reg-inc Reg 'SP)
(define (reg-inc reg r-id)
    (reg-write reg r-id (+ (reg-read reg r-id) 1 )))

; chain them together
;(reg-inc (reg-inc Reg 'SP)
;         'PC)
;
; returns structure with both 'SP and 'PC incremented
Run Code Online (Sandbox Code Playgroud)

我的注册解决方案的全文如下.我的完整程序也在github上.有这么多重复的逻辑,我知道必须有一个更简单的方法:

(struct registers (A B C X Y Z I J SP PC O Pa Pb Paadr …
Run Code Online (Sandbox Code Playgroud)

scheme racket dcpu-16

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

尾递归版本列表附加函数

我看到了几个append向列表实现元素的例子,但都没有使用尾递归.如何在功能风格中实现这样的功能?

 (define (append-list lst elem) expr)
Run Code Online (Sandbox Code Playgroud)

lisp scheme tail-call-optimization racket tailrecursion-modulo-cons

8
推荐指数
2
解决办法
3986
查看次数

DrRacket自动完成没有看到我的源代码中定义的函数

我正在使用Racket和DrRacket进行一个小项目(我正在尝试学习它们并使用它们来教我的朋友一些函数式编程).

我刚刚发现了自动完成功能(C- /),它可以很好地处理库函数,但它不会看到我自己的函数.

我还补充说

(provide (all-defined-out))
Run Code Online (Sandbox Code Playgroud)

在我的源文件的开头(我认为自动完成功能可能看不到符号,因为它们不会被导出)但这并不能解决问题.

所有符号都可以在DrRacket REPL中访问(我可以评估我的功能,它们工作正常).

你能告诉我如何解决这个问题吗?我需要配置什么吗?

racket

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

如何在方案中实现try-catch块?

我正在尝试使用(call-cc)方法在方案中实现try-catch块,但我不确定它是如何用于此的.我找不到任何例子.

并且发现示例只包含错误处理,但我想要做的是:如果发生错误,方案程序必须向用户发送消息(通过显示示例)而不挂起程序.

那可能吗?

error-handling scheme try-catch racket

8
推荐指数
2
解决办法
5350
查看次数

什么是"3D语法"?

在编写Racket宏的过程中,"3D语法"是什么意思?

我已经听过几次这句话了.包括一次参考写的宏.但那是一段时间以前; 我修好了,现在我不记得我到底做错了什么.

另外:3D语法总是坏的吗?或者是它eval(如果你认为你需要使用它,你可能错了,但在专家手中有一些有效的用途)?

macros racket

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

如何在Racket中处理GUI退出?

我的Racket GUI应用程序在退出时需要做很多清理工作,即当用户按下X按钮时.这些包括杀死子进程(在Windows上不是自动进程)等.

将.rkt包装在shell脚本中等待然后进行清理对​​我来说有点过于讨厌.Racket文档中有许多退出处理程序(退出处理程序等),但它们似乎都不起作用!

events racket

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

如何在Racket中使用check-expect

我试图在方案中使用check-expect函数,但我一直被告知它是一个未绑定的check-expect标识符.不检查 - 期待我已经可以使用的功能吗?以下是我的代码:

#lang racket

(define contains (lambda (item list*) 
                   (if (equal? list* '()) 
                        #f
                        (if (equal? item (car list*)) 
                            #t
                            (contains item (cdr list*))))))

(define z (list 1 2 3))
(define q (list 4 5 6))
(define p (list "apple" "orange" "carrot"))
(check-expect (contains 1 z) #t)
Run Code Online (Sandbox Code Playgroud)

scheme racket

8
推荐指数
2
解决办法
5179
查看次数

透明和预制结构有什么区别?

正如标题所暗示的,我不明白定义结构时使用#:transparent和使用之间的区别#:prefab.该参考文献提到预制件涉及某种全球共享.

他们之间有什么区别?我应该在哪种情况下使用另一种?

racket

8
推荐指数
4
解决办法
1281
查看次数

Racket中的模块元语言

我正在尝试在Racket中编写一个模块元语言mylang,它接受第二种语言传递修改后的正文,这样:

(module foo mylang typed/racket body)
Run Code Online (Sandbox Code Playgroud)

相当于:

(module foo typed/racket transformed-body)
Run Code Online (Sandbox Code Playgroud)

当然,typed/racket部件可以用任何其他模块语言替换.

我尝试了一个简单的版本,让身体保持不变.它在命令行上运行正常,但在DrRacket中运行时出现以下错误:

/usr/share/racket/pkgs/typed-racket-lib/typed-racket/typecheck/tc-toplevel.rkt:479:30: require: namespace mismatch;
 reference to a module that is not available
  reference phase: 1
  referenced module: "/usr/share/racket/pkgs/typed-racket-lib/typed-racket/env/env-req.rkt"
  referenced phase level: 0 in: add-mod!
Run Code Online (Sandbox Code Playgroud)

这是整个代码:

#lang racket

(module mylang racket
  (provide (rename-out [-#%module-begin #%module-begin]))
  (require (for-syntax syntax/strip-context))
  (define-syntax (-#%module-begin stx)
    (syntax-case stx ()
      [(_ lng . rest)
       (let ([lng-sym (syntax-e #'lng)])
         (namespace-require `(for-meta -1 ,lng-sym))
         (with-syntax ([mb (namespace-symbol->identifier '#%module-begin)])
           #`(mb . …
Run Code Online (Sandbox Code Playgroud)

metalanguage require racket

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

收集器功能如何在Scheme中工作?

我无法理解Scheme中收集器函数的使用.我正在使用"The Little Schemer"一书(Daniel P. Friedman和Matthias Felleisen).一个有一些解释的综合例子对我有很大帮助.使用收集器函数的函数示例如下:

(define identity
  (lambda (l col)
    (cond
      ((null? l) (col '()))
      (else (identity
              (cdr l)
              (lambda (newl)
                (col (cons (car l) newl))))))))
Run Code Online (Sandbox Code Playgroud)

......有一个例子叫做存在(identity '(a b c) self)self-function存在(define self (lambda (x) x)).该identity函数返回给定的列表l,因此给定调用的输出将是(a b c).使用的确切语言是R5RS Legacy语言.

lisp scheme the-little-schemer continuation-passing racket

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