让L = [1,2,3,4]
我们的名单.
然后1 in L
是True
.2 in L
也是True
.
是否有一种干净的写作方式(1,2) in L
并让它成真?
也就是说,给定一个列表L
和测试名单T
和关系多的,如果所有成员T
都在L
,那么T multi-in L
就是True
,否则T multi-in L
是False
.
当然我可以写一个多功能,但这看起来很难看.
假设我有一个仅用于预生产代码的文件
我想确保它不会在生产代码中运行 - 任何调用都必须失败.
文件顶部的这个片段不起作用 - 它破坏了Python语法,该语法指定return
必须在函数中进行.
if not __debug__:
return None
Run Code Online (Sandbox Code Playgroud)
这里最好的解决方案是什么 - 不涉及制造巨大的其他方案,即.:-)
我试图将runProcess中的stdin和stdout捕获到一个字符串中进行分析.
但是,设置句柄似乎相当困难.我徘徊在GHC.IO.Handle,这似乎是合乎逻辑的目的地,但似乎这应该是非常简单的.
我正在组合一个宏来生成样式的简单函数:
(defun hello ()
(format t "hello~&"))
Run Code Online (Sandbox Code Playgroud)
每个新函数都将替换为hello.
(defmacro generate-echoers (list)
`(let ((list-of-functions
(loop for var in ,list
collect
`(defun ,(intern var) ()
(format t ,(concatenate var "~&"))))))
`(progn
,list-of-functions)))
Run Code Online (Sandbox Code Playgroud)
我开发了上述功能,最终证明我还没有掌握报价时间和扩展阶段.
所需的用法如下:(generate-echoers'("hi""ping""pong"))=>;每个人都说出自己名字的功能列表,正如HELLO所做的那样.
假设我有一个返回闭包的函数:
sub generator
{
my $resource = get_resource();
my $do_thing = sub
{
$resource->do_something();
}
return $do_thing;
}
# new lexical scope
{
my $make_something_happen = generator();
&$make_something_happen();
}
Run Code Online (Sandbox Code Playgroud)
我希望能够确保当$make_something_happe
n从范围中删除时,我可以调用一些$resource->cleanup();
当然,如果我有一个类,我可以使用析构函数来做这个,但对于我想要做的事情,这似乎有点重量级.在构建对象的意义上,这实际上不是一个"对象",它只是一个需要在启动时和死亡之前执行某些代码的功能.
我如何在Perl中做到这一点(出于好奇,任何语言都支持这个想法)?
我正在尝试根据正则表达式过滤[[String]].
filter (\fn -> case (matchRegex (mkRegex "*.exe") fn) of Nothing -> False
Just _ -> True)
directory_info
Run Code Online (Sandbox Code Playgroud)
不幸的是,lambda函数在语法上是无效的:根据ghc,模式匹配不能出现在表达式上下文中.
应该如何改写以简明扼要地执行预期的含义?
有没有办法在CLOS中访问超类的插槽?
例如,在目标CI中可以执行
- (void) frob {
[super frob]
}
Run Code Online (Sandbox Code Playgroud)
这会向frob的(唯一)超类发送消息.
仔细阅读CLOS文档表明,DEFCLASS
合并了有关类创建的所有超类信息,因此这种与超类通信的能力将丢失.它是否正确?
编辑:
这种情况有点不寻常:
鉴于课程
(defclass animal ()
((behavior-types
:initform '(:eat :sleep :drink)
:reader behavior-types)))
(defclass cow (animal)
((behavior-types
:initform '(:moo :make-milk)
:reader behavior-types))
(defclass horse
((behavior-types
:initform '(:buck :gambol :neigh)
:reader behavior-types))
Run Code Online (Sandbox Code Playgroud)
当使用类型的对象调用时,如何使用方法,BEHAVIOR-TYPES
或者GET-BEHAVIOR
说horse
返回'(:eat :sleep :drink :buck :gambol :neigh)
.也就是说,通过槽的继承"添加"到initform而不是替换它.
一个简单的解决方案是,而不是将数据分配给类,以具有如下通用方法:
(defgeneric behavior-types (obj))
(defmethod behavior-types ((obj animal)) nil)
(defmethod behavior-types :around ((obj animal))
(append '(:eat :sleep :drink)
(call-next-method obj)))
(defmethod behavior-types …
Run Code Online (Sandbox Code Playgroud) 我在其他地方看过这个功能,我记得,它有一个标准名称.我记不起来了,仔细阅读亚历山大的list.lisp
图书馆并没有透露任何秘密.
(defun familiar-function (list func)
(loop for e in list
collect (if (listp e)
(familiar-function e func)
(funcall func e))))
Run Code Online (Sandbox Code Playgroud) 我有一个SVN存储库.随着时间的推移,当我编辑,修改,更改等时,某些文件会变得多余/不需要.
最佳做法是什么:从SVN删除文件,或者只是将文件归零?或者我缺少第三种选择?
我正在尝试使用该Seq.generate_using
功能但不幸的是,我似乎无法找到它.我以为它会住在这里:
Microsoft.FSharp.Collections.Seq.generate_using
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.我收到下面列出的错误.
C:\ Users\Owner\Documents\Visual Studio 2008\Projects\fsharp1\Program.fs(54,63):error FS0039:未定义值,构造函数,命名空间或类型"generate_using".在FSharp.PowerPack.dll中找到了具有此名称的构造,其中包含在某些先前版本的F#中隐式引用的一些模块和类型.您可能需要添加对此DLL的显式引用以编译此代码.