小编Ina*_*thi的帖子

defgeneric中的可选参数?

我正在编写一些方法来为各种元素发出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 教程,但它们并没有涵盖我在这里要求的情况).

common-lisp clos

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

(fluxus)学习曲线

我试图通过fluxus获得一些乐趣,但它的手册和在线文档似乎都假设读者已经是一位从未听说过Scheme的专家网络程序员.因此,您会获得试图解释前缀表示法基础知识的段落,但假设您知道如何将声卡数据传输到程序中,或者设置并连接到OSC进程.

那里有没有相反的教程吗?IE,假设您已经掌握了Lisp/Scheme的功能,但在正确设置声源或OSC服务器之前需要一些指针?

除此之外,有没有人知道如何获得(例如)连接到(fluxus)的系统麦克风,或者如何让它从磁盘播放声音文件?

scheme osc

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

Racket URL调度

我正在尝试使用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去球拍"未找到文件"页面(我希望它去一个页面,上面写着"审查,测试后").

感觉我错过了一些小而明显的东西.任何人都可以给我一个提示吗?

scheme webserver url-routing racket

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

相互依赖的信号

不好问题:

有没有办法在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)

elm

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

haskell中的累加器

在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用来运行计算而不是先编译它,答案是否会发生变化?

haskell tail-recursion

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

Emacs Lisp宏步进

是否有用于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)

没有做我期待的事情.

emacs macros elisp

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

Mac OS X是否带有Emacs内置的Lisp环境?

我一直在努力寻找一个不涉及在我的mac上为Lisp安装任何其他东西的环境,因为在完成作业后我不会使用它(谁知道我是否继续使用它).我试过看但我找不到任何东西.有人知道它是否拥有它,以及如何在Emacs中使用它?

lisp ide macos common-lisp

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

Python 的 win32api 仅打印到默认打印机

我正在尝试将win32apiPDF 文档输出到特定打印机。

win32api.ShellExecute(0, "print", filename, '/d:"%s"' % printername, ".", 0)
Run Code Online (Sandbox Code Playgroud)

filename是文件的完整路径名,printname是我通过win32api.EnumPrinters(6).

即使printername是不同目标的名称,该文件也会发送到 Windows 默认打印机(我的期望是传递特定打印机会将命名文件发送到该打印机,而不是默认打印机)。

关于我做错了什么的任何提示?是否有不同的方式将 PDF 文件一般打印到特定打印机?除了所有其他方面,有没有办法从我的程序中临时更改默认打印机?

python printing pdf winapi shellexecute

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

将箭头键发送给Popen

我知道这是可能的打印输入发送到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)

如何发送箭头按键,空格,返回或退格等输入?

python popen

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

在Scheme中捕获宏

使用define-syntaxdefine-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将被绑定到的结果testif-trueif-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)

macros scheme define-syntax racket

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