假设我有以下界面:
interface Mammal {
void marry(Mammal m);
Mammal giveBirthTo();
}
Run Code Online (Sandbox Code Playgroud)
但是,这并不完全是我想要的.
显然,人类不能嫁给狗,也不能生出一只猫.那么如何将这些信息嵌入到界面中,以便输入类型和输出类型可以在实现时自动更改?
我意识到最新版本的GHC(7.10.3)产生的代码比旧版本慢得多.我目前的版本:
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.10.3
Run Code Online (Sandbox Code Playgroud)
我还在本地计算机上安装了另外两个旧版本.
我的测试代码来自这里(collatz1.hs代码):
import Data.Word
import Data.List
import System.Environment
collatzNext :: Word32 -> Word32
collatzNext a = (if even a then a else 3*a+1) `div` 2
-- new code
collatzLen :: Word32 -> Int
collatzLen a0 = lenIterWhile collatzNext (/= 1) a0
lenIterWhile :: (a -> a) -> (a -> Bool) -> a -> Int
lenIterWhile next notDone start = len start 0 where
len …Run Code Online (Sandbox Code Playgroud) 我在路径/ home/bhishan/Copy/try中创建了一个名为"try"的文件夹,然后在该文件夹中我给出了一些命令:
我的命令如下:
curl -s -O \
http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain
chmod u+x git-credential-osxkeychain
sudo mv git-credential-osxkeychain `dirname \`which git\``
git config --global credential.helper osxkeychain
git init
git remote add origin https:
git remote add origin https:
git push origin master
Run Code Online (Sandbox Code Playgroud)
==============================
它工作正常但是,当我尝试删除尝试文件夹时,我无法删除该文件夹.我也不能给命令:
git init
Run Code Online (Sandbox Code Playgroud)
在try文件夹中(我有一个.git文件夹)
================================================== ===
我的命令行和错误报告是这样的:
bhishan@bhishan-HP-Pavilion-dv6-Notebook-PC:~/Copy/try$ git init
error: could not lock config file /home/bhishan/Copy/try/.git/config: Permission denied
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是如何删除名为"try"的文件夹?
我对Coq解析器的实现方式感到非常惊讶.例如
https://www.cis.upenn.edu/~bcpierce/sf/current/Imp.html#lab321
通过给出notation命令并且后续解析器能够解析任何表达式,解析器似乎可以接受任何lexeme.所以这意味着语法必须是上下文敏感的.但这非常灵活,绝对超出了我的理解范围.
关于这种解析器在理论上如何可行的任何指针?它应该如何工作?任何材料或知识都可行.我只是试着了解一下这种类型的解析器.谢谢.
请不要让我自己阅读Coq的来源.我想检查一般的想法,但不是具体的实现.
假设我有以下代码:
abstract class MyStream
{
public abstract Iterable<Integer> getIterable();
public MyStream append(final int i)
{
return new MyStream()
{
@Override
public Iterable<Integer> getIterable()
{
return cons(/*outer class's*/getIterable(), i);
}
};
}
public static Iterable<Integer> cons(Iterable<Integer> iter, int i) { /* implementation */ }
}
Run Code Online (Sandbox Code Playgroud)
如何getIterable从内部类中引用具有相同名称的外部类?
MyStream.this应该指向这里的内部类吧?如何显示具有相同名称的外部类?
我有一些任务需要大量的临时命名管道来处理.
最初,我只是简单地认为生成随机数,然后将其作为<number>.fifo命名管道的名称附加.
但是,我发现这篇文章:在Python中创建一个临时FIFO(命名管道)?
似乎有些东西我不知道可能会导致一些安全问题.
所以我的问题是,生成命名管道的最佳方法是什么?
请注意,即使我引用了与Python相关的帖子,我也不是故意只在Python中提问.
更新:
由于我想使用命名管道来连接不相关的进程,我的计划是首先通过shell进行进程A调用进程B,并捕获stdout以获取管道的名称,然后两者都知道要打开什么.
在这里,我只是担心泄漏管道名称是否会成为一个问题.在我从未想过它之前,直到我读到Python帖子.
这听起来微不足道,但我无法找出我应该做的事情.
以下是我的类型定义:
data CDeq q a = Shallow (q a)
| Deep{ hq ? q a
, susp ? CDeq q (q a)
, tq ? q a }
Run Code Online (Sandbox Code Playgroud)
我希望它有一个实例Show.
由于GHC不允许deriving在这里,我只是试着自己写一个:
instance (Show a, Show ????) => Show (CDeq q a) where
....
Run Code Online (Sandbox Code Playgroud)
但我卡住了
我不知道如何for all type v, (q v) can be shown在Haskell中表示这一点.
我不能简单地做以下事情:
instance (Show a, Show (q a)) => Show (CDeq q a) where
....
Run Code Online (Sandbox Code Playgroud)
因为要显示CDeq q (q a),Show …
我有以下语法:
kv = Word(alphanums + '_') | QuotedString('"', escQuote="\\") | QuotedString("'", escQuote="\\")
kv = kv.setResultsName('literal', listAllMatches=True)
cskv = kv + Optional(ZeroOrMore(Suppress(',') + kv)) # comma separated kv
Run Code Online (Sandbox Code Playgroud)
并用这个例子:
>>> res=cskv.parseString('a,b,c,d,e')
>>> res
(['a', 'b', 'c', 'd', 'e'], {'literal': [('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4)]})
>>> res[0]
'a'
>>> type(res[0])
<type 'str'>
Run Code Online (Sandbox Code Playgroud)
注意:
>>> type(res[0])
<type 'str'>
Run Code Online (Sandbox Code Playgroud)
我真的希望它是ParseResults,而不是字符串,这样我就可以res[0].getName()了,希望我能得到它literal.
第二个问题是如何获得某些令牌的索引?
假设我想知道索引literal d,它应该返回3.
在这个例子中它是微不足道的,因为我只有一种类型的令牌,但在我的问题中,我需要知道不同类型的令牌的相对位置,以便它在处理时有所帮助.
任何方式来实现这些?
我不知道为什么我的问题如此混乱,为什么人们继续关注我的例子而不是我的问题.以下是更多说明:
我使用pyparsing作为一个标记器来标记一个字符串来解释它,我遇到的问题是,我需要知道那个标记是什么,让我们说(这意味着它是一个不值得关注的例子):
variable …Run Code Online (Sandbox Code Playgroud) 我试图在本教程后继续理解延续.
但是,我很难理解2.10节中的以下示例:
# let get () =
shift (fun k -> fun state -> k state state) ;;
get : unit => ’a = <fun>
Run Code Online (Sandbox Code Playgroud)
state是int我认为的类型.我得不到的是那种类型k.根据我的理解,k捕获所有计算后来get (),并且因为我们正在讨论状态monad,k所以合理地表示将通过采取a int,因此继续的计算
k : int => 'a
Run Code Online (Sandbox Code Playgroud)
但是从代码来看,它似乎并没有这样做,它需要state第二次,这实际上意味着:
k : int => int => 'a
Run Code Online (Sandbox Code Playgroud)
但我没有得到第二个来自哪里,在哪种意义上get是类型unit => 'a而不是unit => int => 'a?
与实际状态monad实现相比,混乱增加了更多:
newtype StateT s m a = StateT { runStateT …Run Code Online (Sandbox Code Playgroud) continuations ocaml haskell state-monad delimited-continuations
我正在考虑编写策略,该策略将考虑多个目标并据此做出决策。但是,当我match goal with盯着一个目标使用时,怎么说“请找到另一个看起来像这样的目标”?
或更确切地说,一个更笼统的问题是,如何在Ltac中切换目标?