如何在Chicken Scheme中可靠地获取脚本名称?
似乎-ss吃掉了脚本名称,所以除非我使用点斜杠来运行我的脚本,否则它不可见.
scriptedmain.scm:
#!/usr/bin/env csi -q
(display (command-line-arguments))
(display "\n")
(exit)
Run Code Online (Sandbox Code Playgroud)
跟踪:
$ ./scriptedmain.scm
(-q ./scriptedmain.scm)
wonko:Desktop andrew$ csi -ss scriptedmain.scm
()
Run Code Online (Sandbox Code Playgroud) scheme getmodulefilename command-line-arguments chicken-scheme
目标:生成一个Clojure脚本,该脚本在运行-main
时运行./script.clj
.
我得到的最接近的是
#!/bin/bash
#(comment
exec clj -m `basename $0 .clj` ${1+"$@"}
exit
#)
(defn -main [args]
(println args))
Run Code Online (Sandbox Code Playgroud)
但是Clojure不允许在多行注释中使用非Lisp代码,而Clojure没有Common Lisps的#| ... |#
语法.
当用户不提供命令行参数时,我希望Hello World打印使用信息而不是错误跟踪.
":";exec clj -m `basename $0 .clj` ${1+"$@"}
":";exit
(ns hello
(:gen-class))
(defn -main
[greetee]
(println (str "Hello " greetee "!")))
$ ./hello.clj Fred
Hello Fred!
$ ./hello.clj
Exception in thread "main" clojure.lang.ArityException: Wrong number of args (0) passed to: hello$-main
at clojure.lang.AFn.throwArity(AFn.java:439)
at clojure.lang.AFn.invoke(AFn.java:35)
at clojure.lang.Var.invoke(Var.java:397)
at clojure.lang.AFn.applyToHelper(AFn.java:159)
at clojure.lang.Var.applyTo(Var.java:518)
at clojure.core$apply.invoke(core.clj:600)
at clojure.main$main_opt.invoke(main.clj:323)
at clojure.lang.FnLoaderThunk.invoke(FnLoaderThunk.java:36)
at clojure.main$main.doInvoke(main.clj:426)
at clojure.lang.RestFn.invoke(RestFn.java:422)
at clojure.lang.FnLoaderThunk.invoke(FnLoaderThunk.java:36)
at clojure.lang.Var.invoke(Var.java:405)
at clojure.lang.AFn.applyToHelper(AFn.java:165)
at clojure.lang.Var.applyTo(Var.java:518)
at clojure.main.main(main.java:37)
Run Code Online (Sandbox Code Playgroud) 目标:使用 Node.js 访问网页,使用 xpath 语法操作 DOM,并打印新的 DOM。
libxmljs 没问题,但它有几个 NPM 无法解决的依赖项。您使用哪些库来 xpath 任意 HTML?
有一个50多个硬编码字节列表我想存储在一个字节数组中,但我找不到Free Pascal的硬编码数组语法.
设置使用[elem, elem, elem]
,那么数组使用什么?
我正在尝试编写命令行脚本,但SML的警告会混淆接口.
文档说使用:
Compiler.Control.printWarnings := false;
Run Code Online (Sandbox Code Playgroud)
但是SMLNJ已将这些重命名为:
Control.printWarnings := false;
Run Code Online (Sandbox Code Playgroud)
这实际上产生了更多的打印输出.
例:
$ cat hello.sml
print "Hello World!\n";
OS.Process.exit(OS.Process.success);
$ sml hello.sml
Standard ML of New Jersey v110.72 [built: Mon Nov 14 17:30:10 2011]
[opening hello.sml]
Hello World!
val it = () : unit
[autoloading]
[library $SMLNJ-BASIS/basis.cm is stable]
[autoloading done]
hello.sml:2.1-2.36 Warning: type vars not generalized because of
value restriction are instantiated to dummy types (X1,X2,...)
Run Code Online (Sandbox Code Playgroud)
与:
$ cat hello.sml
Control.printWarnings := false;
print "Hello World!\n";
OS.Process.exit(OS.Process.success);
$ sml hello.sml …
Run Code Online (Sandbox Code Playgroud) 我已经在Gas、NASM和YASM中工作了多平台 Hello World 代码,我想将它们相应的可执行文件从 76KB 缩小到对于 Hello World 汇编程序更合理的大小,因为基本的 Hello World C 程序会导致80KB 的可执行文件和程序集应该小得多。我相信大部分可执行文件都充满了链接器选项中的垃圾。
痕迹:
LIBS=c:/strawberry/c/i686-w64-mingw32/lib/crt2.o -Lc:/strawberry/c/i686-w64-mingw32/lib -lmingw32 -lmingwex -lmsvcrt
ld ld -o $(EXECUTABLE) hello.o $(LIBS)
hello.exe
Hello World!
Run Code Online (Sandbox Code Playgroud)
代码:
.data
msg: .ascii "Hello World!\0"
.text
.global _main
_main:
pushl $msg
call _puts
leave
movl $0, %eax
ret
Run Code Online (Sandbox Code Playgroud)
如果我删除 LIBS 中的任何选项,则链接过程会失败,或者生成的可执行文件在运行时会引发 Windows 错误。因此,合乎逻辑的做法是将调用替换puts
为更简单的内容,例如 sys_write,但我不知道如何执行此 multiplatform。网上的小文档说使用它int 0x80
来执行对内核的调用,但这仅适用于 Linux,不适用于 Windows,而且我希望我的汇编代码是多平台的。
我正在尝试使用lambdas在C++ 11中编写FizzBuzz,但是我得到了一个奇怪的编译器错误.
码:
#include <iostream>
#include <string>
#include <sstream>
#include <list>
#include <algorithm>
using namespace std;
string fizzy(int n) {
int a = n % 3, b = n % 5;
if (a == 0 && b == 0) {
return "FizzBuzz";
}
else if (a == 0) {
return "Fizz";
}
else if (b == 0) {
return "Buzz";
}
else {
stringstream out;
out << n;
return out.str();
}
}
void fizzbuzz() {
string strings[100];
list<int> range(0, 100); …
Run Code Online (Sandbox Code Playgroud) replicate是一个函数,它接受一个整数和一个序列,并返回重复n次的序列.
例如replicate 3 ["a"]
返回["a", "a", "a"]
Common Lisp是否具有相同的功能,还是我必须编写一个?
如何在OCaml中模拟这个Python习惯用法?
if __name__=="__main__":
main()
Run Code Online (Sandbox Code Playgroud)
有关其他编程语言的示例,请参阅RosettaCode.
clojure ×2
arrays ×1
assembly ×1
c++ ×1
c++11 ×1
command-line ×1
comments ×1
common-lisp ×1
dom ×1
filesize ×1
freepascal ×1
haskell ×1
interface ×1
javascript ×1
lambda ×1
list ×1
literals ×1
multiline ×1
node.js ×1
ocaml ×1
optimization ×1
replicate ×1
scheme ×1
scriptedmain ×1
sequence ×1
shebang ×1
sml ×1
smlnj ×1
xpath ×1