在我的空闲时间,我正在学习Haskell,所以这是一个初学者的问题.
在我的阅读中,我遇到了一个例子,说明如何Either a成为一个实例Functor:
instance Functor (Either a) where
fmap f (Right x) = Right (f x)
fmap f (Left x) = Left x
Run Code Online (Sandbox Code Playgroud)
现在,我试图理解为什么实现在Right值构造函数的情况下映射,但是在不是的情况下Left?
这是我的理解:
首先让我重写上面的例子
instance Functor (Either a) where
fmap g (Right x) = Right (g x)
fmap g (Left x) = Left x
Run Code Online (Sandbox Code Playgroud)
现在:
我知道 fmap :: (c -> d) -> f c -> f d
如果我们替换f,Either a我们得到fmap :: (c -> d) -> Either …
让我们假设我们有一个列表xs(可能是一个非常大的列表),我们想要检查它的所有元素是否相同.
我想出了各种各样的想法:
检查所有元素tail xs是否等于head xs:
allTheSame :: (Eq a) => [a] -> Bool
allTheSame xs = and $ map (== head xs) (tail xs)
Run Code Online (Sandbox Code Playgroud)
检查length xs是否等于通过从xs它们等于时获取元素而获得的列表的长度head xs
allTheSame' :: (Eq a) => [a] -> Bool
allTheSame' xs = (length xs) == (length $ takeWhile (== head xs) xs)
Run Code Online (Sandbox Code Playgroud)
递归溶液:allTheSame返回True如果前两个元素xs是相等的,并allTheSame返回True上的其余部分xs
allTheSame'' :: (Eq a) => …Run Code Online (Sandbox Code Playgroud) 我遇到了这篇文章,报道了以下的面试问题:
给定两个数字数组,找出两个数组中的每个数组是否具有相同的整数集?建议一个比NlogN跑得更快但没有额外空间的算法?
我能想到的最好的是以下几点:
(a)对每个数组进行排序,然后(b)沿两个数组移动两个指针并检查是否找到不同的值......但步骤(a)已经有NlogN复杂度:(
(a)扫描最短的数组并将值放入地图中,然后(b)扫描第二个数组并检查是否找到了一个不在地图中的值...这里我们有线性复杂度,但我们使用额外的空间
......所以,我想不出这个问题的解决方案.
想法?
谢谢你的所有答案.我觉得很多都是对的,但我决定选择ruslik的那个,因为它提供了一个我没有想到的有趣选项.
我想在我创建的矩形内写文本,如下所示:
body = d3.select('body')
svg = body.append('svg').attr('height', 600).attr('width', 200)
rect = svg.append('rect').transition().duration(500).attr('width', 150)
.attr('height', 100)
.attr('x', 40)
.attr('y', 100)
.style('fill', 'white')
.attr('stroke', 'black')
text = svg.append('text').text('This is some information about whatever')
.attr('x', 50)
.attr('y', 150)
.attr('fill', 'black')?
Run Code Online (Sandbox Code Playgroud)
但是,正如您所见(http://jsfiddle.net/Tmj7g/3/),文本被切断了.创建svg矩形内部的段落的任何好方法?谢谢,
dojo标记中的id和data-dojo-id之间的区别是什么:
<button id="save" data-dojo-type="dijit/form/Button" type="button" data-dojo-attach-event="onClick:save">Save</button>
Run Code Online (Sandbox Code Playgroud)
我尝试引用此按钮来更改它的标签:var myButton = dijit.byId("save"); 这样我就可以更改按钮标签myButton.set("label","Add New");
如果我使用id ="save"它可以工作.如果我只使用data-dojo-id ="save"则不起作用.
我对Dojo很新,所以你可以指点我的解释或教程将不胜感激!
让我们考虑以下XML Schema:
<?xml version="1.0" encoding="UTF-8"?>
<schema
targetNamespace="http://www.example.org/library"
elementFormDefault="qualified"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:lib="http://www.example.org/library">
<element name="library" type="lib:libraryType"></element>
<complexType name="libraryType">
<sequence>
<element name="books" type="lib:booksType"></element>
</sequence>
</complexType>
<complexType name="booksType">
<sequence>
<element name="book" type="lib:bookType"
maxOccurs="unbounded" minOccurs="1"></element>
</sequence>
</complexType>
<complexType name="bookType">
<attribute name="title" type="string"></attribute>
</complexType>
</schema>
Run Code Online (Sandbox Code Playgroud)
和相应的XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<lib:library
xmlns:lib="http://www.example.org/library"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/library src/library.xsd ">
<lib:books>
<lib:book title="t1"/>
<lib:book title="t2"/>
<lib:book title="t3"/>
</lib:books>
</lib:library>
Run Code Online (Sandbox Code Playgroud)
有没有办法保证<lib:book .../>元素的顺序得以保留?我想确保读取XML的任何解析器都会返回指定oder中的书籍,这首先是书籍title="t1",然后是书籍title="t2",最后是书籍title="t3".
据我所知,XML解析器不需要保留顺序.我想知道是否可以通过XML Schema强制执行此操作?对我来说,一个快速的解决方案是向元素添加index属性<lib:book .../>,并将订单保留委托给读取XML的应用程序.
评论?建议?
我在看Data.Set,我发现它没有任何powerset功能.为什么?
我可以像这样实现它:
import Data.Set (Set, empty, fromList, toList, insert)
powerset :: (Ord a) => Set a -> Set (Set a)
powerset s = fromList $ map (fromList) (powerList $ toList s)
powerList :: [a] -> [[a]]
powerList [] = [[]]
powerList (x:xs) = powerList xs ++ map (x:) (powerList xs)
Run Code Online (Sandbox Code Playgroud)
但这似乎不是最有效的方法.好的,我也可以写
powerList :: [a] -> [[a]]
powerList = filterM (const [True, False])
Run Code Online (Sandbox Code Playgroud)
但是,我仍然想知道为什么Data.Set没有powerset功能.
另外,最好的写作方式是powerset :: (Ord a) => Set a -> …
我有一个字符串的python列表,让我们说:
elems = ["A", "B", "C", "D"]
Run Code Online (Sandbox Code Playgroud)
我想创建一个新的列表,其元素是每个elems重复固定次数的元素(比如两次),以随机顺序,但同时确保两个连续元素永远不会具有相同的值.
例如,["D", "B", "A", "B", "D", "C", "A", "C"]是一个好结果.["D", "B", "A", "B", "D", "C", "C", "A"]不是(C在第6和第7位重复).
最简单的想法是probbaly:
ans = 2*elems
random.shuffle(ans)
Run Code Online (Sandbox Code Playgroud)
然后是一些代码来处理重复,但我能想到的所有解决方案都涉及潜在的无限循环.有一种简单可靠的方法吗?
谢谢.
如果你在perl中有一个简单的正则表达式替换,如下所示:
($line =~ s/JAM/AAA/g){
Run Code Online (Sandbox Code Playgroud)
我将如何修改它以便它查看匹配并使替换与匹配的情况相同,例如:
'JAM'将成为'AAA','jam'将成为'aaa'
我坐在这里为Java主程序编写一些算法(到目前为止第一个算法).我编写levenshtein算法就好了,这要归功于wiki对于newbeginners的假代码非常好以及一个很好的教程:D
然后我决定升级到Damerau并添加额外的线,但后来我读到它不是DL算法而是OptimalStringAlignmentDistance而不是.我尝试阅读actionscript代码,以了解我需要添加什么以使其成为DL但却感到困惑.我去过不同的地方,代码看起来与Java相似,但他们都使用了错误的伪代码.
花了半天后,我放弃了,决定在这里问.是否有人可以帮助我将此代码升级到Java中的Damerau-Levenshtein?
public class LevensteinDistance {
private static int Minimum(int a, int b, int c) {
return Math.min(Math.min(a, b), c);
}
private static int Minimum (int a, int b) {
return Math.min(a, b);
}
public static int computeLevensteinDistance(String s, String t){
int d[][];
int n; // length of s
int m; // length of t
int i; // iterates through s
int j; // iterates through t
char s_i; // ith character of s
char t_j; // jth character …Run Code Online (Sandbox Code Playgroud)