嗨哈斯克尔研究员.我目前正在研究Project Euler的第23个问题.我在atm的地方是我的代码对我来说似乎是正确的 - 不是在"好的算法"意义上,而是在"应该工作"的含义中 - 但会产生堆栈内存溢出.
我知道我的算法并不完美(特别是我当然可以避免在我的worker函数中的每个递归步骤中计算这么大的中间结果).
虽然,在学习Haskell的过程中,我想了解为什么这段代码失败如此悲惨,以便下次避免这种错误.
任何有关此计划错误原因的见解将不胜感激.
import qualified Data.List as Set ((\\))
main = print $ sum $ worker abundants [1..28123]
-- Limited list of abundant numbers
abundants :: [Int]
abundants = filter (\x -> (sum (divisors x)) - x > x) [1..28123]
-- Given a positive number, returns its divisors unordered.
divisors :: Int -> [Int]
divisors x | x > 0 = [1..squareRoot x] >>=
(\y -> …Run Code Online (Sandbox Code Playgroud) 我想CommonJS在我的一些脚本中使用一些兼容的模块.这些脚本只是为了在我的笔记本电脑上做一些事情:它不在浏览器中,也不在服务器中.我只是操纵mongodb我在本地使用的.
所以我想知道,最好的方法是什么?我只发现了过时的包装器,它们可以提供CommonJS功能和 mongo shell.
我应该手动编码require系统吗?我应该手动编码一个变通方法吗?是否已存在最小的装载机?
关于此事的所有想法都将受到赞赏.
指向实施CommonJS其他部分的指针也将受到赞赏.
我正在使用谷歌日历java API进行项目.
日历部分很好,maven似乎下载并使用它没有任何麻烦.
我的问题来自这个lib的主要依赖:com.google.api.client api.
特别是,当我按照本页详述的说明操作时,maven无法正确编译我的项目:
package com.google.api.client.extensions.java6.auth.oauth2 does not exist
package com.google.api.client.extensions.jetty.auth.oauth2 does not exist
package com.google.api.client.json.jackson2 does not exist
Run Code Online (Sandbox Code Playgroud)
它缺少几个类,因此无法编译文件,而当我下载zip并手动添加.jar而不使用maven它工作正常.
这是我用maven管理的第一个项目,不知道如何去那里.指针将不胜感激.
编辑发帖请求---这是我的POM
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.univnantes.atal.atcal</groupId>
<artifactId>AtCal</artifactId>
<version>0.1</version>
<packaging>jar</packaging>
<name>AtCal</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>google-api-services</id>
<url>http://google-api-client-libraries.appspot.com/mavenrepo</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.12.0-beta</version>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-calendar</artifactId>
<version>v3-rev20-1.12.0-beta</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<!-- best lock down version of the plugin too …Run Code Online (Sandbox Code Playgroud) 我打算在明天我将给Haskell的一个小介绍中展示类型类的强大功能的一个例子.
我以为我会仔细检查我要呈现的内容,因为我不是100%自信.
所以,假设我有两个功能:
firstSort :: Int -> Int -> Ordering
firstSort a b = compare (even a) (even b)
secondSort :: Int -> Int -> Ordering
secondSort = compare
Run Code Online (Sandbox Code Playgroud)
现在,由于他们的Monoid实例,我可以将这两种结合起来:
sort :: Int -> Int -> Ordering
sort = firstSort <> secondSort
Run Code Online (Sandbox Code Playgroud)
现在我要确认的是mappend两种类型中使用的过程.
根据我的理解,它的工作方式如下:
首先是实例:
instance Monoid b => Monoid (a -> b) where
mempty _ = mempty
mappend f g x = f x `mappend` g x
Run Code Online (Sandbox Code Playgroud)
用来.这是通过实例化a该实例来完成的(Int -> Int).此外,声明mappend让我困惑了一段时间,因为它需要3个参数而不是2但后来我记得那(a …
我的作业任务是如果第一个元组的第二个元素与第二个元组的第一个元素相同,则将两个元组组合在一个列表中.然后,如果第一个元组是(a, b)第二个(b, c)元组,则(a, c)必须将元组添加到结果列表中.
我写了第一个函数,它带有一个元组的元素和带有许多元组的第二个列表,并将每个元组进行比较.
这个适当地工作:
c1 = ("a","x")
d1 = [ ("x","b"), ("z","c"), ("x","b"), ("z","c")
, ("x","b"), ("z","c"), ("x","b"), ("z","c") ]
getByOne c1 a1 = filter (/=[])
[ if (fst (last(take n a1))) == (snd c1)
then [((fst c1), (snd (last(take n a1))))]
else [] | n <- [1..(length a1) ] ]
Run Code Online (Sandbox Code Playgroud)
输出:
[ [("a","b")], [("a","b")], [("a","b")], [("a","b")] ]
Run Code Online (Sandbox Code Playgroud)
但问题是,如果那时我不能抛出而其他声明只是简单的元组,所以我创建了一个新的列表.在这个"解决方法"的最后,我将获得列表中的列表,依此类推.此外,如果输出列表更大,列表中会有更多列表.
有没有办法只传递元组或空元组,或者我应该以某种方式分组这些列表?
对于我正在编写的程序,我需要列出一个列表,一对数字代表一个产品,两个给定数字的总和.
现在我有一个函数,我可以指定我想在列表中添加一个列表的次数,稍后将使用完整功能进行扩展.
这就是我所拥有的:
s1(0, X).
s1(Q, X) :-
N is Q - 1,
multiply(2, 3, Y),
A = Y ,
add(2, 3, Z),
B = Z,
addToEnd([A], [B], X),
s1(N,X).
multiply(A, B, C):-
C is A * B.
add(A, B, C) :-
C is A + B.
addToEnd([], L, L).
addToEnd([H|T], L2, [H|L3]) :-
addToEnd(T, L2, L3).
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时s1(2,X),我得到了[6,5]返回,然后没有别的,它只是挂起.当我跑s1(0,X),我得到true,然后false当我击中;
谁能帮我这个?我看不出我做错了什么,我觉得它应该有效!
为了澄清我觉得这应该如何工作:我打电话s1(2,X).
N = 1,[6,5]添加到列表中X([[6,5]])
s1(1,X). …
目标是将Nim在Haskell中的游戏编码为学校作业.我是Haskell的新手,在尝试读取输入时会出现奇怪的行为.
目标是读取两个整数.而不是打印第一个消息,然后提示然后继续第二个消息,它只打印两个消息,我无法给出正确的输入.这有什么不对?
type Board = [Int] -- The board
type Heap = Int -- id of heap
type Turn = (Int, Int) -- heap and number of stars to remove
readInt :: String -> IO Int
readInt msg = do putStr (msg ++ "> ")
inp <- getChar
let x = ord inp
return x
readTurn :: Board -> IO(Turn)
readTurn b = do heap <- readInt "Select heap:"
amt <- readInt "Select stars:"
print heap
print amt
return(heap, amt)
Run Code Online (Sandbox Code Playgroud) 我必须使用远程端点和SPARQL检索大量数据.问题是:这非常慢.我想将我的请求分组,以减少网络延迟对全球性能方案的影响.
我的查询非常简单:
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT * WHERE
{
<my_id> skos:prefLabel ?prefLabel
}
Run Code Online (Sandbox Code Playgroud)
但我不确定如何正确分组.例如,我想:
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT * WHERE
{
?id skos:prefLabel ?prefLabel .
FILTER(?id IN ('my_id1', 'my_id2', 'my_id3'))
}
Run Code Online (Sandbox Code Playgroud)
是一个糟糕的主意,因为它会使端点在过滤之前浏览所有实例.
任何关于如何实现该请求分组的提示都将不胜感激.
我在SWI-PL文档中遇到过几次键值对,但无法得到关于它们的好信息.这是prolog中的标准内容还是仅仅是swi pl扩展?主要在这里找到:http ://www.swi-prolog.org/pldoc/doc_for?object= keysort/2和这里:http://www.swi-prolog.org/pldoc/doc_for? object= section%282, %27A.3%27,SWI%28%27/DOC /手动/ assoc.html%27%29%29
对的形式例如是a-5,或者在列表[a-5,b-7]中.
如果它是标准的,那么使用它们还有附加价值吗?他们的兴趣是什么?提前致谢 :)