我想将以下程序程序转换为Haskell [以伪代码编写]:
f(x) {
if(c1(x)) {
if(c2(x)) {
return a(x);
}
else if (c3(x)) {
if(c4(x)) {
return b(x);
}
}
return d(x);
}
Run Code Online (Sandbox Code Playgroud)
我写了以下实现:
f x =
if (c1 x) then
if(c2 x) then
a x
else if (c3 x) then
if (c4 x) then
b x
else d x
else d x
else d x
Run Code Online (Sandbox Code Playgroud)
不幸的是它包含(否则为dx)三次.
有没有更好的方法来实现该功能?(即,如果没有满足任何条件,则返回(dx)?)
我知道我们可以将条件c1和c2组合成(c1 x)&&(c2 x)以使if的数量更小,但我的条件c1,c2,c3,c4确实很长,如果我将它们组合起来,我会得到一个多于一行的条件.
我想从Python 3中的numpy数组中获取缓冲区.我找到了以下代码:
$ python3
Python 3.2.3 (default, Sep 25 2013, 18:25:56)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> a = numpy.arange(10)
>>> numpy.getbuffer(a)
Run Code Online (Sandbox Code Playgroud)
但是它会在最后一步产生错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getbuffer'
Run Code Online (Sandbox Code Playgroud)
我为什么做错了?该代码适用于Python 2.我使用的numpy版本是1.6.1.
我正在为一些研究项目编写确定性有限自动机的实现,并且有一些弧导致相同的状态.我为State编写了这个类,但我想知道为什么代码会产生Stackoverflow:
public class State extends HashMap<Character, HashSet<State>>
{
public static void main(String[]args)
{
State t=new State();
t.addTransition('a',t);
t.addTransition('b',t);
}
public void addTransition(Character symbol, State t )
{
if(!this.containsKey(symbol))
{
this.put(symbol, new HashSet<State>());
}
this.get(symbol).add(t);
}
}
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,如果我删除其中一个"addTransition"调用,则没有错误.
我的Java版本是JDK 1.6.37,操作系统是Ubuntu Linux 12.04.
*UPD:*堆栈跟踪是:
Exception in thread "main" java.lang.StackOverflowError
at java.util.HashMap$KeyIterator.<init>(HashMap.java:843)
at java.util.HashMap$KeyIterator.<init>(HashMap.java:843)
at java.util.HashMap.newKeyIterator(HashMap.java:857)
at java.util.HashMap$KeySet.iterator(HashMap.java:891)
at java.util.HashSet.iterator(HashSet.java:170)
at java.util.AbstractSet.hashCode(AbstractSet.java:122)
at java.util.HashMap$Entry.hashCode(HashMap.java:737)
at java.util.AbstractMap.hashCode(AbstractMap.java:494)
at java.util.AbstractSet.hashCode(AbstractSet.java:126)
at java.util.HashMap$Entry.hashCode(HashMap.java:737)
at java.util.AbstractMap.hashCode(AbstractMap.java:494)
at java.util.AbstractSet.hashCode(AbstractSet.java:126)
at java.util.HashMap$Entry.hashCode(HashMap.java:737)
...
at java.util.AbstractMap.hashCode(AbstractMap.java:494)
at java.util.AbstractSet.hashCode(AbstractSet.java:126) …Run Code Online (Sandbox Code Playgroud) 我正在为LaTeX中的一个长定理写一个证明.证明的内容是一长串的项目.我的代码是:
\begin{proof}
\begin{itemize}
\item asd
\item asd
\end{itemize}
\end{proof}
Run Code Online (Sandbox Code Playgroud)
结果如下:
proof * asd
* asd
Run Code Online (Sandbox Code Playgroud)
是否可以在"校对"字后插入换行符,以获得类似的内容:
proof
* asd
* asd
Run Code Online (Sandbox Code Playgroud)
\newline,\\在证明环境中不起作用.也许有其他方法让它看起来更好?
我的乳胶分布是2011年的texlive
我有 processBuilders 定义的两个进程:
ProcessBuilder pb1 = new ProcessBuilder (...)
ProcessBuilder pb2 = new ProcessBuilder (...)
Run Code Online (Sandbox Code Playgroud)
我希望 的输出pb1是 的输入pb2。我在文档中发现我可以pb2通过使用管道从另一个进程读取的输入:
pb2.redirectInput(Redirect.PIPE);
Run Code Online (Sandbox Code Playgroud)
但是,如何指定我希望此管道从 的输出中读取pb1?
我在prolog中遇到了一个简单的问题.我们来考虑一下该计划
worker(bill).
worker(smitt).
worker(fred).
worker(dany).
worker(john).
car(bmw).
car(mazda).
car(audi).
owner(fred,mazda).
owner(dany,bmw).
owner(john,audi).
Run Code Online (Sandbox Code Playgroud)
我需要再添加一个谓词no_car(X),如果worker X没有汽车,即如果我们输入查询,那将是真的吗?: - no_car(X).序言应该回答
X=smitt,
X=bill,
yes
Run Code Online (Sandbox Code Playgroud)
我所做的是
hascar(X):-owner(X,_).
nocar(X):- worker(X),not hascar(X).
Run Code Online (Sandbox Code Playgroud)
但是这种方法不起作用,因为只有查询才能使用无限变量.所以,我真的坚持这个.我知道SQL中有"NOT EXISTS"字样允许在查询中表达这个逻辑,但在prolog中是否有类似的东西?
我在理解以下代码时遇到问题:
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.*;
public class A
{
public A(){
JFrame myframe = new JFrame ("hz window");
myframe.setLayout(new GridLayout ());
myframe.setSize(new Dimension (500, 200));
myframe.setVisible(true);
}
public static void main (String arg[]){
new A();
// System.gc(); //1
//Runtime.getRuntime().gc(); //2
}
}
Run Code Online (Sandbox Code Playgroud)
myframe对象的范围是A类的构造函数,对吧?
然后,为什么窗口没有消失(即,由第1行和第2行的垃圾收集器删除)
我们在java程序中创建的所有gui元素的范围是什么?
JVM在哪里保留应用程序的gui对象的所有链接?
我很抱歉新手问题.
对于以下代码:
#include<functional>
template<typename T>
void f(std::function<void(T)> g) {
}
template<typename T>
void g(T x) {
}
int main() {
f(&g<int>);
}
Run Code Online (Sandbox Code Playgroud)
C++ 14编译器产生错误:
no matching function for call to 'f(<unresolved overloaded function type>)'
f(&g<int>);
Run Code Online (Sandbox Code Playgroud)
我很好奇为什么模板参数推断在这里不起作用.看来,假设g的参数是int类型,我们可以推断出f的参数是类型的std::function<void(int)>,因此T = int在f中.为什么这不会发生?我对C++标准的相关部分感兴趣,这解释了这一点.T是否出现在非推断的上下文中?
以下类似的代码编译:
#include<vector>
template<typename T>
void f(std::vector<T> vec) {
}
int main() {
f(std::vector<int>{});
}
Run Code Online (Sandbox Code Playgroud)
所以它不是创建非推导上下文的尖括号.