我目前正在使用D作为各种命令行脚本的脚本语言来自动执行枯燥的任务.我希望能够在D中编写带有管道输入的脚本,但是当前,我没有取得多大成功,因为我正在管道它似乎并没有出现在参数列表中!
例如,假设我有一个脚本foo.exe,它意味着只需要一个输入.我的想法是,我可以写,例如:
echo bar | foo
Run Code Online (Sandbox Code Playgroud)
并且foo在条形图打印到屏幕后使用输入栏运行.但是,每次我尝试这个时,我似乎都没有在args数组中有任何参数foo(只是foo本身).我在这里做的不是什么?
我正在尝试学习如何使用std.container中可用的各种容器结构,并且我无法理解如何执行以下操作:
1)如何创建空容器?例如,假设我有一个用户定义的类Foo,并且想要创建一个应该包含Foo对象的空DList .我应该使用什么语法?
2)假设a并且b都是DList!int.我试着打电话a ~ b,编译器告诉我,我不能.但是,我可以看到DList那个运算符超载了.我错过了什么?
我正在使用SWI-Prolog的命令行解释器swipl.我在包含文件的目录中运行它test.pro,并尝试调用
[test.pro].
这导致swipl喷出
ERROR: Syntax error: Operator expected
ERROR: [test
ERROR: ** here **
ERROR: .pro] .
但是,如果我删除扩展名,它可以正常工作.有没有办法将文件名传递给swipl加载哪些扩展名不会导致此错误?事实上,我想知道是什么导致了这个错误,因为SWI-Prolog的网站不是很有帮助.
我已经设置了Quicklisp以便在SBCL运行时运行,并将以下行添加到我正在尝试使用该priority-queue库的文件顶部(正如我之前的问题的回答中所建议的,Common Lisp的优先级队列?).但是,当我尝试使用它时,我从SBCL收到错误,说priority-queue没有定义函数!我错过了什么?
作为参考,我试着写这样的东西:
(ql:quickload "priority-queue")
(defparameter *heap* (make-pqueue #'<))
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,说make-pqueue没有定义.
我正在使用Emacs作为我的Lisp环境,并希望能够离线访问Common Lisp HyperSpec.我下载了它,并将文件夹放入我的emacs.d目录.然后我将以下代码放入我的.emacs:
(global-set-key [(f2)] 'slime-hyperspec-lookup)
(setq common-lisp-hyperspec-root "/.emacs.d/HyperSpec/")
Run Code Online (Sandbox Code Playgroud)
但是,每当我尝试在其中搜索某些内容时,我的查询最终都会出现格式错误.具体来说,假设我搜索dotimes; 被转储到我的浏览器的是file:///.emacs.d/HyperSpec/Body/m_dolist.htm,它与HyperSpec文件夹中的目录结构不匹配,导致查询失败.相反,HyperSpec查找格式适合Web版本(在这种情况下,它可以正常工作).
我有什么方法可以解决这个问题,如果是这样,怎么办?我基本上只是希望能够在我不在线时查找HyperSpec.
我已经为一堆Node*s 编写了以下代码,这些代码可以在模块中找到node:
import std.exception, std.container;
public import node;
alias NodeArray = Array!(const (Node)*);
alias NodeHeap = BinaryHeap!(NodeArray, cmp_node_ptr);
auto make_heap() {
return new NodeHeap(NodeArray(cast(const(Node)*)[]));
}
void insert(NodeHeap* heap, in Node* u) {
enforce(heap && u);
heap.insert(u);
}
pure bool cmp_node_ptr(in Node* a, in Node* b) {
enforce(a && b);
return (a.val > b.val);
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试在其上运行以下单元测试,其中make_leaf返回Node*初始化的给定参数:
unittest {
auto u = make_leaf(10);
auto heap = make_heap();
insert(heap, u); //bad things happen here
assert(heap.front …Run Code Online (Sandbox Code Playgroud) 在Emacs中有Kawa的任何模式或资源吗?我已经检查过,但我找不到任何东西.大多数情况下,我希望能够在Emacs中运行Kawa REPL,但某种完成/语法检查也会很棒.
我最近package-list-packages在Emacs中更新了SLIME .但是,当我尝试使用它时M-x slime,我得到这个:
(progn (load "/home/koz/.emacs.d/elpa/slime-20140913.730/swank-loader.lisp" :verbose t) (funcall (read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-server") "/tmp/slime.3081"))
*
; loading #P"/home/koz/.emacs.d/elpa/slime-20140913.730/swank-loader.lisp"
;;
;; Error while compiling /home/koz/.emacs.d/elpa/slime-20140913.730/swank/backend.lisp:
;; Failed to find the TRUENAME of /home/koz/.emacs.d/elpa/slime-20140913.730/swank/backend.lisp:
;; No such file or directory
;; Aborting.
;; *
Run Code Online (Sandbox Code Playgroud)
之后我仍然有一个REPL,但我认为这很奇怪,我想知道发生了什么以及为什么.
我如何为以下结构编写模板约束
struct Foo (T, U) {
}
Run Code Online (Sandbox Code Playgroud)
以表明双方T并U必须使用具有可比性<?我的意思是两个Ts可以比较,<两个Us可以比较<- a T和a U可以是无法比拟的.
我使用Flycheck来检查C文件,并为GCC提供了相当精细的变量设置,以使其正常工作.但是,由于我的系统上有Clang(由于与代码无关的原因),Flycheck总是假设这是我想要使用的,迫使我一直手动切换检查器.
我试图寻找一种永久禁用Clang作为检查器的方法,但我已经空了.帮助将不胜感激.
d ×4
common-lisp ×3
emacs ×3
slime ×2
binary-heap ×1
clang ×1
command-line ×1
containers ×1
flycheck ×1
kawa ×1
pointers ×1
prolog ×1
quicklisp ×1
sbcl ×1
scripting ×1
shell ×1
struct ×1
swi-prolog ×1
templates ×1
windows ×1