似乎Common Lisp确实(list 'quote 'x)以特殊方式对待.例如,的值(list 'oddp '5)是'(oddp 5)同时的值(list 'quote '5)是''5.换句话说,即使由于前面的引用它应该处于数据模式,似乎也会评估引用函数.
比较以下表达式的值:
1. (list 'quote '5) = (list 'quote 5) = (quote '5) = ''5
2. (list '' '5) = '(''5)
3. (list ' 5) = (list 5) = '(5)
4. (list 'oddp '5) != (oddp 5)
Run Code Online (Sandbox Code Playgroud)
评估看起来非常特殊.但我估计我可能会很困惑.
有人可以帮助我更好地理解这里的模式吗?
引用包含单引号和双引号而没有变量插值的bash命令参数的最简单方法是什么?
在Ruby中,您可以使用%{},%[]等来引用字符串.在这种情况下,单引号和双引号将被视为字符.
我的问题还没有真正完整,这里有进一步的解释:
我问的原因是因为我经常在命令行运行ruby和perl代码.由于这些语言使用广泛的单引号和双引号以及$ 1 $ _等全局变量,因此与bash发生冲突.
例:
ls -lat | ruby -p -e '$_ =~ /(\S+)\s+(\S+)\s+(\S+)/; $_ = "'\''" + ($3 || "") + "'\''" + "\n"'
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似于红宝石中%引用的东西:
ls -lat | ruby -p -e %{$_ =~ /(\S+)\s+(\S+)\s+(\S+)/; $_ = "'" + ($3 || "") + "'" + "\n"}
Run Code Online (Sandbox Code Playgroud) 我有一个清单,即
my_list = ['a', 'b', 'c', 'd','e','f']
Run Code Online (Sandbox Code Playgroud)
我想以竖线或逗号分隔的格式打印出来,但是因为我的一些列表对象可以有逗号或竖线,所以我想在打印时用双引号将每个对象括起来
即输出应该是
"a"|"b"|"c"|"d"|"e"|"f" rather than a|b|c|d|e|f
Run Code Online (Sandbox Code Playgroud)
我无法在我的 python 版本上使用格式
当我有一个函数定义make-cd并执行该函数以得到错误的答案时。
(defun make-cd (title artist rating ripped)
'(:title title :artist artist :rating rating :ripped ripped))
(add-record (make-cd "Roses" "Kathy Mattea" 7 t))
(:TITLE TITLE :ARTIST ARTIST :RATING RATING :RIPPED RIPPED)
Run Code Online (Sandbox Code Playgroud)
我本来应该(list ...)得到一个正确的答案。
(defun make-cd (title artist rating ripped)
(list :title title :artist artist :rating rating :ripped ripped))
(add-record (make-cd "Roses" "Kathy Mattea" 7 t))
(:TITLE "Roses" :ARTIST "Kathy Mattea" :RATING 7 :RIPPED T)
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
我现在正在学习 Elixir,我真的很困惑quote和unquote。以下是我们如何使用 a 创建具有动态名称的函数macro:
defmacro create_fun(n) do
quote do: def unquote(:"times_#{n}")(a), do: a * 4
end
Run Code Online (Sandbox Code Playgroud)
times_6例如,如果我6作为宏参数传递,它会创建 function 。
现在我不明白的是:这里我们取消引用atom :"times_#{n}"。Elixir 文档说,当你引用一个原子时,它会返回一个原子。所以当我取消引用一个原子时,我也应该找回这个原子。这是真的:
iex(15)> Macro.to_string quote do: unquote(:"times_6")
":times_6"
Run Code Online (Sandbox Code Playgroud)
但是()在引用之后使用会给出这样的结果:
iex(14)> Macro.to_string quote do: unquote(:"times_6")()
"times_6()"
Run Code Online (Sandbox Code Playgroud)
带括号的原子突然就不再是原子了。如果我unquote(:"times_6")用:"times_6"它代替则不起作用:
iex(4)> Macro.to_string quote do: :"times_6"()
** (SyntaxError) iex:4: syntax error before: '('
Run Code Online (Sandbox Code Playgroud)
请问这是怎么回事,没明白
我正在尝试使用 循环遍历字符串列表dolist,并使用前缀字符串连接元素,使用string-joinfromsubr-x创建新字符串。
(dolist (p '("a" "b" "c"))
(string-join '(p ".rnc")))
Run Code Online (Sandbox Code Playgroud)
我收到错误Wrong type argument: sequencep, p。但是下面的代码可以工作。
(dolist (p '("a" "b" "c"))
(print p))
Run Code Online (Sandbox Code Playgroud)
所以这似乎是一个循环的问题string-join或等效的mapconcat循环内的问题。有什么建议么?谢谢!
这让我很生气所以如果可以,请帮助...
我有一个Java字符串,我想用单引号替换所有反斜杠双引号序列,即使我正在逃避我认为必要的替换命令对字符串没有任何作用.
entry.replace("\\\"", "'");
Run Code Online (Sandbox Code Playgroud)
感谢任何建议.
谢谢.
我正在使用ZF2开发应用程序.在我的应用程序中,我必须在数据库中插入许多行(大约900).
我有一个表模型,所以我首先尝试:
$table->insert(array('x' => $x, 'y' => $y));
Run Code Online (Sandbox Code Playgroud)
在我的循环中.这在技术上是有效的,但这是如此之慢,以至于我很难在php超时之前插入一半的数据(我无法更改超时).
然后,我决定使用准备好的声明.所以我已经在循环之外准备好了,然后在我的循环中执行它...它甚至更慢.
所以,我决定停止使用ZF2工具,因为它们似乎太慢而无法在我的情况下使用,我已经创建了自己的请求.我正在使用mysql,所以我可以用我的所有值做一个请求.但我无法在任何界面中找到任何方法来逃避我的价值观......
有没有办法做到这一点?
谢谢你的帮助,抱歉我的英语不好.
我是PHP和PDO的新手.我有一个关于PDO和单引号转义的非常基本的问题.我认为逃避不是必要的,但我仍然遇到了一些问题.
例如......我的数据库类中的以下方法在数据库中创建一个新对象.它是抽象的,我的所有类都扩展了数据库类.
public function create() {
$attributes = $this->attributes();
$question_marks = array();
foreach ($attributes as $key => $value) {
$question_marks[] = "?";
}
$place_holder = array_intersect_key($attributes, get_object_vars($this));
$place_holder = array_values($place_holder);
$sql = "INSERT INTO ".static::$table_name." (";
$sql .= join(", ", array_keys($attributes));
$sql .= ") VALUES (";
$sql .= join(", ", array_values($question_marks));
$sql .= ")";
$query = $handler->prepare($sql);
$query->execute($place_holder);
}
Run Code Online (Sandbox Code Playgroud)
如果我创建说例如新用户.我可以毫不费力地将James O'Reilly这个名字输入数据库......
但是,当我想使用我的更新方法....
public function update() {
$attributes = $this->attributes();
print_r($attributes);
$attribute_pairs = array();
foreach($attributes as $key => $value) {
if(isset($value)) …Run Code Online (Sandbox Code Playgroud) 在Common Lisp中,特殊运算符引用使得后面跟未评估的内容一样
(quote a) -> a
(quote {}) -> {}
Run Code Online (Sandbox Code Playgroud)
但为什么表单(quote())给我零?我正在使用SBCL 1.2.6,这是我在REPL中得到的:
CL-USER> (quote ())
NIL
Run Code Online (Sandbox Code Playgroud)
关于这个问题的更多信息:这是PCL第24章的一些代码
(defun as-keyword (sym)
(intern (string sym) :keyword))
(defun slot->defclass-slot (spec)
(let ((name (first spec)))
`(,name :initarg ,(as-keyword name) :accessor ,name)))
(defmacro define-binary-class (name slots)
`(defclass ,name ()
,(mapcar #'slot->defclass-slot slots)))
Run Code Online (Sandbox Code Playgroud)
当宏扩展为以下代码时:
(define-binary-class id3-tag
((major-version)))
Run Code Online (Sandbox Code Playgroud)
是
(DEFCLASS ID3-TAG NIL
((MAJOR-VERSION :INITARG :MAJOR-VERSION :ACCESSOR MAJOR-VERSION)))
Run Code Online (Sandbox Code Playgroud)
在类名ID3-TAG之后是NIL而不是().