我blabla
在Haskell中有一个函数,它接受一个Int并返回一个字符串:
blabla :: Int -> [Char]
Run Code Online (Sandbox Code Playgroud)
我想在for循环中重复运行该方法,如下所示:
for i := 1 to 25 do begin
write(i);
write(": ");
writeln(blabla(i));
end;
Run Code Online (Sandbox Code Playgroud)
haskell有for循环功能吗?
我还在研究用于测试我的symfony2控制器的PHP单元测试.我的测试类是WebTestCase的派生,测试正在进行GET或POST请求,检查一切是否正常.我想测试所有底层,但我不想用测试弄乱我的数据库.我不想使用模拟ups,而是使用内存中的SQLite数据库,我可以在其中设置测试场景以检查所有修改.我发现了很多关于如何使用doctrine 1.x做到这一点的提示,但它们不再起作用了.所以我想要这样的东西:
class BlahblahTest extends WebTestCase {
public function testXXXYYY() {
// 1. Setup a new database with SQLite:memory:
// 2. create the database and all tables according the entities in my project
$this->createTestScenario(); // 3.
$crawler = $this->client->request('GET', '/testpage'); // 4.
// 5. Lots of checks against the database and / or the $crawler data
}
}
Run Code Online (Sandbox Code Playgroud)
有机会获得这项工作吗?
在此先感谢Hennes
我有一些我想在Haskell中解决的暴力问题.我的机器有16个内核,所以我想加快我当前的算法.
我有一个方法"tryCombination",它返回一个Just(String)或Nothing.我的循环看起来像这样:
findSolution = find (isJust) [tryCombination a1 a2 a3 n z p |
a1 <- [600..700],
a2 <- [600..700],
a3 <- [600..700],
n <- [1..100],
....
Run Code Online (Sandbox Code Playgroud)
我知道有一个特殊的parMap可以并行化地图功能.如果一个线程确实发现了第一次出现,那么mapFind可能很棘手,因为它是不可预测的.但是有没有类似mapAny的东西来加速搜索?
编辑:
我使用"withStrategy(parList rseq)"片段重写了代码.状态报告如下所示:
38,929,334,968 bytes allocated in the heap
2,215,280,048 bytes copied during GC
3,505,624 bytes maximum residency (795 sample(s))
202,696 bytes maximum slop
15 MB total memory in use (0 MB lost due to fragmentation)
Tot time (elapsed) Avg pause Max pause
Gen 0 44922 colls, 44922 par 37.33s 8.34s 0.0002s …
Run Code Online (Sandbox Code Playgroud) 我还是一个哈斯克新手,所以请原谅我糟糕的代码风格.
我需要在写入文件的框中使用所有类型的字母组合.事实上,我需要所有这些线路来对旧的谜题进行蛮力攻击.一行包含26个字母和10个数字的组合.在拼图中给出,前6个字符是字母.
现在这是我的代码:
import Data.List (delete)
letters = ['A'..'Z']
allChars = letters ++ ['0'..'9']
boxContents :: [Char] -> [Char] -> [[Char]]
boxContents l lp = [a:b:c:d:e:f:delete f(delete e(delete d(delete c (delete b (delete a lp))))) |
a <- l,
b <- delete a l,
c <- delete b (delete a l),
d <- delete c (delete b (delete a l)),
e <- delete d (delete c (delete b (delete a l))),
f <- delete e (delete d (delete c (delete …
Run Code Online (Sandbox Code Playgroud) 我想在这样的情况下打破一个循环:
import Data.Maybe (fromJust, isJust, Maybe(Just))
tryCombination :: Int -> Int -> Maybe String
tryCombination x y
| x * y == 20 = Just "Okay"
| otherwise = Nothing
result :: [String]
result = map (fromJust) $
filter (isJust) [tryCombination x y | x <- [1..5], y <- [1..5]]
main = putStrLn $ unlines $result
Run Code Online (Sandbox Code Playgroud)
想象一下,"tryCombination"比这个例子更复杂.它耗费了大量的CPU功耗.这不是25种可能性的评估,而是26 ^ 3.
因此,当"tryCombination"找到给定组合的解决方案时,它返回Just,否则返回Nothing.如何在第一个找到的解决方案上立即打破循环?
我想在SBCL中实现一个简单的双链表,其关键结构如下
(defstruct element
(value 0 :type fixnum)
(next nil :type element)
(prev nil :type element))
Run Code Online (Sandbox Code Playgroud)
问题是,不可能实例化第一个元素,因为 next 和 prev 都可能为零。它们的类型是元素,所以它们必须是一个实例。
如果我删除 type 属性,这个问题基本上很容易解决。但事实是,这部分程序需要非常快,所以我想给优化器一个充分利用它的机会。
有没有其他方法可以指定成员的类型并使它们为零?或者更好:有没有办法创建一个带有 next 和 prev 引用实例本身的启动实例?
我只是为了好玩而尝试设计一个带有大量外围设备的更复杂的 Z80 CP/M 系统。在阅读文档时,我偶然发现了 Z80 CPU 在 IM0 中接受中断时的(未记录?)行为。
当中断发生时,Z80 激活 M1 和 IORQ 向外部设备发出信号:“嘿,给我一个操作码”。如果操作码是 rst 00 或类似的东西,那么一切都很好。现在文档告诉我们,任何命令的任何操作码都可以提供给CPU,例如CALL。
但现在出现了未记录的部分:“多字节指令的第一个字节在中断应答周期期间读取。后续字节通过正常的内存读取序列读入。”
“正常内存读取序列”。如何确定 CPU 想要从内存获取一个字节还是从设备获取下一个字节?
编辑:我想,我找到了一个(好?)解决方案:我可以通过分析 IORQ 和 M1 来检测中断确认周期的开始。我还可以通过分析 MREQ 和 M1 来检测下一个“正常”操作码获取。这样我就可以安装一个由这两个AND信号触发的触发器,即只要CPU从io设备读取数据,触发器就为1。我可以用这个 1 来禁止总线驱动器进出内存。
我的意图?我正在设计一个中断控制器,在 CPLD 中具有 8 个优先输入。它的寄存器为每个中断引脚保存一个 16 位地址。只是为了好玩:-)
我试图通过使用优化和 fixnums 从一个小的二次求解器中获得更高的速度。这是我的代码:
1: (defun solve-x (d)
2: (declare (optimize (speed 3))
3: (type fixnum d))
4: (let ((x 1) (y 1))
5: (declare (type fixnum x y))
6: (loop while (/= (- (* x x) (* d y y)) 1) do
7: (if (> (- (* x x) (* d y y)) 1)
8: (incf y)
9: (incf x)))
10: (list x y)))
Run Code Online (Sandbox Code Playgroud)
SBCL 编译器似乎无法正确优化第 6 行和第 7 行。我收到很多这样的警告:
forced to do GENERIC-- (cost 10)
unable to do inline …
Run Code Online (Sandbox Code Playgroud) 在这里,我又回来了(对我而言)我最新杰作的奇怪行为......
此代码应该读取文件,但它不会:
readCsvContents :: String -> IO ( String )
readCsvContents fileName = do
withFile fileName ReadMode (\handle -> do
contents <- hGetContents handle
return contents
)
main = do
contents <- readCsvContents "src\\EURUSD60.csv"
putStrLn ("Read " ++ show (length contents) ++ " Bytes input data.")
Run Code Online (Sandbox Code Playgroud)
结果是
Read 0 Bytes input data.
Run Code Online (Sandbox Code Playgroud)
现在我改变了第一个函数并添加了一个putStrLn
:
readCsvContents :: String -> IO ( String )
readCsvContents fileName = do
withFile fileName ReadMode (\handle -> do
contents <- hGetContents handle
putStrLn ("hGetContents gave …
Run Code Online (Sandbox Code Playgroud) 在时域中进行一些音频过滤时,我遇到了一个问题,我会用索引在迭代语言中解决.在Haskell中,编写算法似乎有点困难.好的,所以这里有一点:
[x1 x2 x3 | x4 x5 x6 | x7 x8 x9 x10 ...]
|y1 y2 y3 | y4 y5 y6 | ]
Run Code Online (Sandbox Code Playgroud)
想象一下两个列表,上面一个是源,下面一个是目标.我在两个阵列上从左到右移动一个2x3字段的窗口,在这个例子中它是x4-x6和y4-y6.y6即将获得一个函数的结果,该函数得到x4,x5,x6,y4和y5进行处理.通常我会在haskell中使用递归函数执行此操作,但重点是,此函数计算y6是一个参数.它是具有单独算法的10种不同滤波器功能之一.在一开始我只有x1来计算y1.在下一步中,我有x1,y2和y1来处理y2.第三步取x1,x2,x3,y1和y2产生y3.等等,直到y_n.目前我仍然坚持如何做到这一点.
编辑:更详细一点
现在,这里的函数就像在旧的C中读取一样:
void processArray(int[] in, int[] out, int count, int (*filterFunction)(int, int, int, int, int)) {
int index;
for (int index = 0; index < count; index++) {
out[index] =
filterFunction(
index - 2 >= 0 ? in[index-2] : 0,
index - 1 >= 0 ? in[index-1] : 0,
in[index],
index - 2 >= 0 …
Run Code Online (Sandbox Code Playgroud) 恳请您的帮助,加快以下程序的速度:
main = do
jobsToProcess <- fmap read getLine
forM_ [1..jobsToProcess] $ \_ -> do
[r, k] <- fmap (map read . words) getLine :: IO [Int]
putStrLn $ doSomeReallyLongWorkingJob r k
Run Code Online (Sandbox Code Playgroud)
可能有很多相同的工作要做,但是这不是我修改输入的决定,因此我尝试Data.HashMap
用于备份已处理的工作。我已经在doSomeReallyLongWorkingJob
函数中优化了算法,但是现在看来,它和C一样快。
但不幸的是,我似乎无法实现简单的缓存而不会产生很多错误。我需要一个简单的Type缓存HashMap (Int, Int) Int
,但是每次括号太多或太少时。而且,如果我设法定义缓存,那么我就会陷入将数据放入缓存或从缓存中检索数据的问题,这会导致很多错误。
我已经在Google上搜索了几个小时,但似乎被卡住了。BTW:的结果longrunner
是Int
也。
我有一个关于动态构建的函数(或类似的东西)的问题.在Java中,我可以以编程方式将一些Source写入一个String,编译该字符串并像函数一样多次执行它.
想象一下,我有一些遗传算法来创建最佳代码来获取n个输入参数,根据基因组计算它们并返回m个输出参数.所以我想知道是否可能(并且我很确定它是),创建一个列表列表....包含该函数,然后使用不同的输入参数调用此函数几千次以计算错误率.
我现在需要的是一个例子,如何以编程方式创建这样的列表以及如何使用它.目前我完全陷入困境.
任何参考或例子都受到热烈欢迎.