我正在编写一些方法来为各种元素发出HTML.每种方法都具有相同的输出,但不一定需要相同的输入.
回声的方法game-board也需要一个player(因为每个玩家只看到自己的棋子)
(defmethod echo ((board game-board) (p player)) ... )
Run Code Online (Sandbox Code Playgroud)
回应板空间不需要每个玩家更改(该调度实际上是在game-board方法中完成的,后来调用echo空间).理想情况下,我能做到
(defmethod echo ((space board-space)) ... )
(defmethod echo ((space empty-space)) ... )
Run Code Online (Sandbox Code Playgroud)
我也可以想到,我后来遇到的对象需要知道的不仅仅是玩家才能正确展示自己.但是,由于已经存在专门针对相同泛型的方法,因此会产生错误
The generic function #<STANDARD-GENERIC-FUNCTION ECHO (4)> takes 2 required arguments;
Run Code Online (Sandbox Code Playgroud)
返回并命名这些方法似乎不太理想echo-space,echo-board等等.
是否存在基于专门对象改变其他参数的规范方法?我应该做点什么吗
(defgeneric echo (thing &key player ...) ...)
Run Code Online (Sandbox Code Playgroud)
要么
(defgeneric echo (thing &rest other-args) ...)
Run Code Online (Sandbox Code Playgroud)
?更一般地说,有人能指出我一个体面的教程defgeneric吗?(我已经阅读了相关的PCL章节和一些 CLOS 教程,但它们并没有涵盖我在这里要求的情况).
我试图通过fluxus获得一些乐趣,但它的手册和在线文档似乎都假设读者已经是一位从未听说过Scheme的专家网络程序员.因此,您会获得试图解释前缀表示法基础知识的段落,但假设您知道如何将声卡数据传输到程序中,或者设置并连接到OSC进程.
那里有没有相反的教程吗?IE,假设您已经掌握了Lisp/Scheme的功能,但在正确设置声源或OSC服务器之前需要一些指针?
除此之外,有没有人知道如何获得(例如)连接到(fluxus)的系统麦克风,或者如何让它从磁盘播放声音文件?
我正在尝试使用Racket(以前的PLT Scheme)连接URL调度.我看了一下教程和服务器文档.我无法弄清楚如何将请求路由到相同的servlet.
具体例子:
#lang scheme
(require web-server/servlet)
(require web-server/dispatch)
(provide/contract (start (request? . -> . response/c)))
(define (start request)
(blog-dispatch request))
(define-values (blog-dispatch blog-url)
(dispatch-rules
(("") list-posts)
(("posts" (string-arg)) review-post)
(("archive" (integer-arg) (integer-arg)) review-archive)
(else list-posts)))
(define (list-posts req) `(list-posts))
(define (review-post req p) `(review-post ,p))
(define (review-archive req y m) `(review-archive ,y ,m))
(require web-server/servlet-env)
(serve/servlet start
#:launch-browser? #t
#:quit? #f
#:listen-ip #f
#:port 8080
#:extra-files-paths (list (build-path "js")
(build-path "css"))
#:servlet-path "")
假设上面的代码,localhost:8080/转到一个写"list-posts"的页面.打算localhost:8080/posts/test去球拍"未找到文件"页面(我希望它去一个页面,上面写着"审查,测试后").
感觉我错过了一些小而明显的东西.任何人都可以给我一个提示吗?
不好问题:
有没有办法在Elm中定义一对相互依赖的信号?
前言:
我正在尝试编写一个小型的Cookie-clicker风格的浏览器游戏,其中玩家正在收集资源,然后花费他们购买自动资源收集结构,这些结构在购买时会变得更加昂贵.这意味着三个相关的信号:( gathered玩家收集spent了多少资源),(玩家已经花费了多少资源)和cost(升级费用多少).
这是一个实现:
module Test where
import Mouse
import Time
port gather : Signal Bool
port build : Signal String
costIncrement = constant 50
cost = foldp (+) 0 <| keepWhen canAfford 0 <| sampleOn build costIncrement
nextCost = lift2 (+) cost costIncrement
spent = foldp (+) 0 <| merges [ sampleOn build cost ]
gathered = foldp (+) 0 <| merges [ sampleOn gather <| constant 1, sampleOn tick tickIncrement ] …Run Code Online (Sandbox Code Playgroud) 在Haskell,如果我写
fac n = facRec n 1
where facRec 0 acc = acc
facRec n acc = facRec (n-1) (acc*n)
Run Code Online (Sandbox Code Playgroud)
并使用GHC进行编译,结果会与我使用的结果不同
fac 0 = 1
fac n = n * fac (n-1)
Run Code Online (Sandbox Code Playgroud)
我可以轻松地完成fac n = product [1..n]并避免整个事情,但我对如何尝试使用懒惰语言进行尾递归感兴趣.我知道我仍然可以获得堆栈溢出,因为thunks正在构建,但是当我使用累加器时,实际发生的事情实际上是不同的(就最终的编译程序而言)而不是我刚才说出的天真递归?除了提高可读性之外,遗漏尾递归是否有任何好处?如果我runhaskell用来运行计算而不是先编译它,答案是否会发生变化?
是否有用于SLIME宏观步骤的Elisp模拟器?具体来说,我正在寻找能够将代码扩展到新缓冲区中的下一个扩展步骤(或者只是最终扩展)的东西.
天真
(defun macroexpand-point ()
(interactive)
(let ((b (get-buffer-create "*el-macroexpansion*"))
(expansion (format "%s" (macroexpand (thing-at-point 'sexp)))))
(with-current-buffer b
(insert expansion)
(display-buffer b))))
Run Code Online (Sandbox Code Playgroud)
没有做我期待的事情.
我一直在努力寻找一个不涉及在我的mac上为Lisp安装任何其他东西的环境,因为在完成作业后我不会使用它(谁知道我是否继续使用它).我试过看但我找不到任何东西.有人知道它是否拥有它,以及如何在Emacs中使用它?
我正在尝试将win32apiPDF 文档输出到特定打印机。
win32api.ShellExecute(0, "print", filename, '/d:"%s"' % printername, ".", 0)
Run Code Online (Sandbox Code Playgroud)
filename是文件的完整路径名,printname是我通过win32api.EnumPrinters(6).
即使printername是不同目标的名称,该文件也会发送到 Windows 默认打印机(我的期望是传递特定打印机会将命名文件发送到该打印机,而不是默认打印机)。
关于我做错了什么的任何提示?是否有不同的方式将 PDF 文件一般打印到特定打印机?除了所有其他方面,有没有办法从我的程序中临时更改默认打印机?
我知道这是可能的打印输入发送到subprocessES由write荷兰国际集团自己stdin
from subprocess import, Popen, PIPE
proc = Popen([command, goes, here], stdin=PIPE)
proc.stdin.write("m")
Run Code Online (Sandbox Code Playgroud)
如何发送箭头按键,空格,返回或退格等输入?
使用define-syntax或define-syntax-rule在Racket中定义捕获宏的最简单方法是什么?
作为一个具体的例子,这里aif是CL风格的宏系统中的微不足道的.
(defmacro aif (test if-true &optional if-false)
`(let ((it ,test))
(if it ,if-true ,if-false)))
Run Code Online (Sandbox Code Playgroud)
这个想法是,it将被绑定到的结果test在if-true和if-false条款.天真的音译(减去可选的替代方案)是
(define-syntax-rule (aif test if-true if-false)
(let ((it test))
(if it if-true if-false)))
Run Code Online (Sandbox Code Playgroud)
在没有投诉的情况下进行评估,但如果您尝试it在子句中使用则会出错:
> (aif "Something" (displayln it) (displayln "Nope")))
reference to undefined identifier: it
Run Code Online (Sandbox Code Playgroud)
该anaphora蛋实现aif为
(define-syntax aif
(ir-macro-transformer
(lambda (form inject compare?)
(let ((it (inject 'it)))
(let ((test (cadr form))
(consequent (caddr …Run Code Online (Sandbox Code Playgroud)