我正在尝试使用 Javascript 来查看某个字符串是否包含组成另一个字符串的所有字符。
例如,单词“hello”包含组成单词“hell”的所有字符。此外,单词“hellowy”包含组成单词“yellow”的所有字符。
最重要的是,无论两个字符串中的字符顺序如何,该方法都需要正常工作。此外,字符数也很重要。“Hel”不包含构成“hell”的所有字符。这严格指的是字符数:需要两个 l 才能组成单词“hell”,而“hel”只有一个。
进一步澄清问题,我并不担心在从字符串的字符组成子字符串后是否留下一些“未使用”的字符。也就是说,“hell”仍然应该包含单词“hell”的所有字母。
我怎样才能有效地完成这个任务?也许有正则表达式解决方案?速度在某种程度上是一个问题,但并不是绝对关键。
我想让我的Coda编辑器正确地突出显示TypeScript.该页面说明支持TypeScript
https://library.panic.com/coda-ios/cios-syntax-modes/
但是,在我的Coda(这是最新的)中,支持的语言列表有所不同.如何让TypeScript正确突出显示?
在阅读彼得·塞贝尔的“实用Common Lisp的”,我了解到,除了像列表处理和评估语言的核心部分,也有像宏loop,do等:使用这些核心结构写入。
我的问题有两个方面。首先,Lisp的“核心”到底是什么?如果需要,可以从中重新创建其他内容的最低限度是什么?第二部分是在哪里可以看到作为Common Lisp的一部分而实际上是用Lisp编写的宏的代码?附带的问题是,当编写Lisp实现时,他用什么语言编写?
我目前正在通过Graham的On Lisp工作,发现这一点很难理解:
绑定.词汇变量必须直接出现在源代码中.
setq例如,没有计算第一个参数,所以任何构建的都setq必须是一个扩展为a的宏setq,而不是一个调用它的函数.同样对于运算符,例如let,其参数在lambda表达式中作为参数出现,对于像扩展为lets的宏这样的运算,依此类推.任何要更改其参数的词法绑定的新运算符都必须写为宏.
这来自第8章,其中描述了何时应该和不应该使用宏来代替函数.
他在这一段中究竟是什么意思?有人会给出一两个具体的例子吗?
非常感激!
在On Lisp(第9页)中,可以找到以下声明:
函数是Lisp程序的构建块.它们也是Lisp的构建块.在大多数语言中,+运算符与用户定义的函数完全不同.但Lisp有一个模型,函数应用程序,用于描述程序完成的所有计算.Lisp +运算符是一个函数,就像你自己定义的函数一样.事实上,除少数运算符称为特殊表单外,Lisp的核心是Lisp函数的集合.什么阻止你添加到这个系列?什么都没有:如果你想你想的Lisp可以这样做,你可以把它写自己,和你的新功能将被视为就像内置的.
我的问题是如何+使用以下特殊运算符实现运算符?或者实际上有更多的运营商在使用,格雷厄姆只是不精确和戏剧化?
block let* return-from
catch load-time-value setq
eval-when locally symbol-macrolet
flet macrolet tagbody
function multiple-value-call the
go multiple-value-prog1 throw
if progn unwind-protect
labels progv
let quote
Run Code Online (Sandbox Code Playgroud)
有没有办法查看这些函数的源代码?
我试图在SBCL的顶部做这样的事情:
CL-USER> (defvar space " ")
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
Lock on package COMMON-LISP violated when
globally declaring SPACE SPECIAL while in package
COMMON-LISP-USER.
[Condition of type SYMBOL-PACKAGE-LOCKED-ERROR]
Restarts:
0: [CONTINUE] Ignore the package lock.
1: [IGNORE-ALL] Ignore all package locks in the context of this operation.
2: [UNLOCK-PACKAGE] Unlock the package.
3: [RETRY] Retry SLY mREPL evaluation request.
4: [*ABORT] Return to SLY's top level.
5: [ABORT] abort thread (#<THREAD "sly-channel-1-mrepl-remote-1" RUNNING {10025F6303}>)
Backtrace:
0: (PACKAGE-LOCK-VIOLATION #<PACKAGE "COMMON-LISP"> :SYMBOL SPACE :FORMAT-CONTROL "globally …Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法从Common Lisp的REPL中获取Linux的PID(进程ID).也就是说,我想从过程本身的REPL中知道SBCL或Allegro过程的ID.
我可能会要求不可能,但我仍在疑惑.
是否有可能获得宏的堆栈跟踪的模拟?也就是说,如果在某个函数中设置了一个断点,那么宏栈跟踪将列出宏扩展的所有宏(可能带有它们的输入)以达到代码中的那个级别.
据我所知,目前这是不可能的,但可能是由于我的理解浅薄.Allegro或SBCL是否允许或跟踪此类信息?看起来这对于调试宏非常有用.
任何帮助或建议表示赞赏.
我正在尝试制作一个简单的表单,它将自动加载Slynk在图像上.
到目前为止,我有这个:
(progn
(load "/home/user/asdf.lisp")
(format t "~% Loaded ASDF")
(push "/home/user/.emacs.d/elpa/sly-20180708.712/slynk/" asdf:*central-registry*)
(format t "~% Added SLYNK path to ASDF:*CENTRAL-REGISTRY*")
(asdf:load-system :slynk)
(format t "~% Loaded ASDF system")
(slynk:create-server :port 4007 :dont-close t)
(format t "~% Created SLYNK server on port 4007")
(setf slynk:*use-dedicated-output-stream* nil)
(format t "~% Set *USE-DEDICATED-OUTPUT-STREAM* to NIL"))
Run Code Online (Sandbox Code Playgroud)
问题是,每当我尝试在REPL中评估此表单时,我都会收到以下错误:
Error: "ASDF" is not a known package.
Restart actions (select using :continue):
0: Return NIL
1: Return to Top Level (an "abort" restart).
2: Abort entirely …Run Code Online (Sandbox Code Playgroud) 我想知道为什么Emacs中的Common Lisp缓冲区被称为"Inferior Lisp"?那就是不如什么?是什么原因?
另外,理解缓冲区基本上是运行Lisp实现的shell是否正确,与在终端中运行它的方式非常相似?
最后,像SLIME和Slynk这样的事情如何与此相关?
common-lisp ×8
lisp ×4
macros ×3
algorithm ×1
clisp ×1
coda ×1
elisp ×1
emacs ×1
function ×1
javascript ×1
linux ×1
macos ×1
package ×1
pid ×1
process ×1
regex ×1
special-form ×1
stack-trace ×1
string ×1
trace ×1
typescript ×1