我有一张桌子来存储关于我的兔子的信息.它看起来像这样:
create table rabbits (rabbit_id bigserial primary key, info json not null);
insert into rabbits (info) values
('{"name":"Henry", "food":["lettuce","carrots"]}'),
('{"name":"Herald","food":["carrots","zucchini"]}'),
('{"name":"Helen", "food":["lettuce","cheese"]}');
Run Code Online (Sandbox Code Playgroud)
我该怎么找到喜欢胡萝卜的兔子?我想出了这个:
select info->>'name' from rabbits where exists (
select 1 from json_array_elements(info->'food') as food
where food::text = '"carrots"'
);
Run Code Online (Sandbox Code Playgroud)
我不喜欢那个查询.一团糟.
作为一名全职兔子守护者,我没有时间改变我的数据库架构.我只想喂我的兔子.是否有更可读的方式来执行该查询?
在Haskell中,我可能会这样实现if
:
if' True x y = x
if' False x y = y
spin 0 = ()
spin n = spin (n - 1)
Run Code Online (Sandbox Code Playgroud)
这表现我的期望:
haskell> if' True (spin 1000000) () -- takes a moment
haskell> if' False (spin 1000000) () -- immediate
Run Code Online (Sandbox Code Playgroud)
在Racket中,我可以实现这样的缺陷if
:
(define (if2 cond x y) (if cond x y))
(define (spin n) (if (= n 0) (void) (spin (- n 1))))
Run Code Online (Sandbox Code Playgroud)
这表现我的期望:
racket> (if2 …
Run Code Online (Sandbox Code Playgroud) evaluation haskell lazy-evaluation expression-evaluation idris
我在Haskell中建模数据结构时遇到了麻烦.假设我正在运行一个动物研究设施,我想跟踪我的老鼠.我想跟踪大鼠到笼子和实验的分配.我还想跟踪我的老鼠的体重,我的笼子的体积,并记录我的实验.
在SQL中,我可能会这样做:
create table cages (id integer primary key, volume double);
create table experiments (id integer primary key, notes text)
create table rats (
weight double,
cage_id integer references cages (id),
experiment_id integer references experiments (id)
);
Run Code Online (Sandbox Code Playgroud)
(我意识到这允许我将来自不同实验的两只老鼠分配到同一个笼子里.这是有意的.我实际上并没有运行动物研究设施.)
必须可能做的两项操作:(1)给老鼠,找到它的笼子的体积,和(2)给老鼠,得到它所属的实验的注释.
在SQL中,那些将是
select cages.volume from rats
inner join cages on cages.id = rats.cage_id
where rats.id = ...; -- (1)
select experiments.notes from rats
inner join experiments on experiments.id = rats.experiment_id
where rats.id = ...; -- (2)
Run Code Online (Sandbox Code Playgroud)
我如何在Haskell中建模这个数据结构?
一种方法是
type Weight = Double …
Run Code Online (Sandbox Code Playgroud) 在Io中,您可以使用do
以下命令设置执行上下文:
Http := Object clone
Http get := method(uri, ("<GET request to " .. uri .. ">") println)
Http delete := method(uri, ("<DELETE request to " .. uri .. ">") println)
Database := Object clone
Database insert := method(table, data, ("<insert data to " .. table .. ">") println)
Database delete := method(table, id, ("<delete " .. id .. " from " .. table .. ">") println)
Http do(
get("http://example.com/")
delete("http://example.com/something")
)
Database do(
insert("cats", list("Phil", …
Run Code Online (Sandbox Code Playgroud) 从创建的干净项目开始:
android create project -n something -t android-7 -p something -k com.example.something -a Something
Run Code Online (Sandbox Code Playgroud)
当我ant debug install
在我的模拟器中运行并打开应用程序时,我看到(正如预期的那样)
这就是它变坏的地方.我现在在应用程序中改变了一些微不足道的东西.在这个例子中,我setContentView
将从主活动中删除调用,所以它看起来像这样:
package com.example.something;
import android.app.Activity;
import android.os.Bundle;
public class Something extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main); REMOVED
}
}
Run Code Online (Sandbox Code Playgroud)
现在我重建应用程序ant debug install
并在模拟器中运行它.我看到了这个:
这是错的.我刚刚删除了之前编辑的文本.如果我ant clean
以前做过ant debug install
,我会得到预期的结果:
我不想ant clean
在每次跑步之前跑步ant debug install
.如何让ant实际重建程序而不是ant clean
每次都运行?
细节:
这是inital的输出ant debug install
:
$ ant debug install …
Run Code Online (Sandbox Code Playgroud) 这些有什么区别?
{-# LANGUAGE RankNTypes #-}
f :: forall a. a -> Int
f _ = 1
g :: (forall a. a) -> Int
g _ = 1
Run Code Online (Sandbox Code Playgroud)
特别是,为什么我会收到错误g ()
?
ghci> f ()
1
ghci> g ()
<interactive>:133:3:
Couldn't match expected type `a' with actual type `()'
`a' is a rigid type variable bound by
a type expected by the context: a at <interactive>:133:1
In the first argument of `g', namely `()'
In the expression: g ()
In an …
Run Code Online (Sandbox Code Playgroud) 我很难为树结构实现Read.我想要一个左关联字符串(与parens)喜欢ABC(DE)F
并将其转换为树.该特定示例对应于树
.
这是我正在使用的数据类型(虽然我愿意接受建议):
data Tree = Branch Tree Tree | Leaf Char deriving (Eq)
Run Code Online (Sandbox Code Playgroud)
那个特定的树将在Haskell中:
example = Branch (Branch (Branch (Branch (Leaf 'A')
(Leaf 'B'))
(Leaf 'C'))
(Branch (Leaf 'D')
(Leaf 'E')))
(Leaf 'F')
Run Code Online (Sandbox Code Playgroud)
我的show
功能如下:
instance Show Tree where
show (Branch l r@(Branch _ _)) = show l ++ "(" ++ show r ++ ")"
show (Branch l r) = show l ++ show r
show (Leaf x) = [x]
Run Code Online (Sandbox Code Playgroud)
我想做一个read
功能
read …
Run Code Online (Sandbox Code Playgroud) 我有一系列(~10 9)事件,其特点是开始和结束时间.有一段时间,我想知道当时正在进行的事件有多少.
在这种情况下,哪种数据结构会有所帮助?我需要快速的操作是:
{start: 100000 milliseconds, end: 100010 milliseconds}
.更新:有人在这上面放了一个计算几何标志,所以我想我应该用计算几何来改写它.我有一组1维间隔,我想计算这些间隔中有多少与给定点相交.插入新的间隔必须很快.
language-agnostic algorithm computational-geometry data-structures
例如,给定i=5
和n=8
,我想生成[0;0;0;0;1;0;0;0]
.具体来说,我想生成向量,v
以便:
v = zeros(n,1);
v(i) = 1;
Run Code Online (Sandbox Code Playgroud)
是否有(合理的)方法在一行中完成此操作?