小编Mar*_*coS的帖子

了解Either如何是Functor的一个实例

在我的空闲时间,我正在学习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)

现在:

  1. 我知道 fmap :: (c -> d) -> f c -> f d

  2. 如果我们替换f,Either a我们得到fmap :: (c -> d) -> Either …

haskell functor typeclass either

36
推荐指数
3
解决办法
7099
查看次数

有效地检查(大)列表的所有元素是否相同

问题

让我们假设我们有一个列表xs(可能是一个非常大的列表),我们想要检查它的所有元素是否相同.

我想出了各种各样的想法:

解决方案0

检查所有元素tail xs是否等于head xs:

allTheSame :: (Eq a) => [a] -> Bool
allTheSame xs = and $ map (== head xs) (tail xs)
Run Code Online (Sandbox Code Playgroud)

解决方案1

检查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)

解决方案2

递归溶液:allTheSame返回True如果前两个元素xs是相等的,并allTheSame返回True上的其余部分xs

allTheSame'' :: (Eq a) => …
Run Code Online (Sandbox Code Playgroud)

haskell list

28
推荐指数
5
解决办法
2万
查看次数

查找两个数组是否包含相同的整数集,没有额外的空间且比NlogN更快

我遇到了这篇文章,报道了以下的面试问题:

给定两个数字数组,找出两个数组中的每个数组是否具有相同的整数集?建议一个比NlogN跑得更快但没有额外空间的算法?

我能想到的最好的是以下几点:

  1. (a)对每个数组进行排序,然后(b)沿两个数组移动两个指针并检查是否找到不同的值......但步骤(a)已经有NlogN复杂度:(

  2. (a)扫描最短的数组并将值放入地图中,然后(b)扫描第二个数组并检查是否找到了一个不在地图中的值...这里我们有线性复杂度,但我们使用额外的空间

......所以,我想不出这个问题的解决方案.

想法?


谢谢你的所有答案.我觉得很多都是对的,但我决定选择ruslik的那个,因为它提供了一个我没有想到的有趣选项.

arrays algorithm

26
推荐指数
2
解决办法
8216
查看次数

使文本适合SVG元素(使用D3/JS)

我想在我创建的矩形内写文本,如下所示:

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矩形内部的段落的任何好方法?谢谢,

javascript svg text d3.js

13
推荐指数
2
解决办法
4万
查看次数

id和data-dojo-id之间的区别

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很新,所以你可以指点我的解释或教程将不胜感激!

dojo

10
推荐指数
1
解决办法
5793
查看次数

有没有办法在XML Schema中强制/保留XML元素的顺序?

让我们考虑以下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的应用程序.

评论?建议?

xml xsd

9
推荐指数
2
解决办法
1万
查看次数

为什么Data.Set没有powerset功能?

我在看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 -> …

haskell powerset

8
推荐指数
1
解决办法
2386
查看次数

如何在确保没有连续值相等的情况下随机化列表元素的顺序?

我有一个字符串的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)

然后是一些代码来处理重复,但我能想到的所有解决方案都涉及潜在的无限循环.有一种简单可靠的方法吗?

谢谢.

python sorting random algorithm list

8
推荐指数
1
解决办法
947
查看次数

Perl正则表达式替换相同的情况

如果你在perl中有一个简单的正则表达式替换,如下所示:

($line =~ s/JAM/AAA/g){
Run Code Online (Sandbox Code Playgroud)

我将如何修改它以便它查看匹配并使替换与匹配的情况相同,例如:

'JAM'将成为'AAA','jam'将成为'aaa'

regex perl replace case

7
推荐指数
1
解决办法
1548
查看次数

Levenshtein到Damerau-Levenshtein

我坐在这里为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)

java algorithm levenshtein-distance

6
推荐指数
1
解决办法
7049
查看次数