小编Nom*_*ics的帖子

编写"警卫"的首选方法是哪种?

我已经创建了一个函数,我可以使用(据我所知)案例表达或守卫.

foo a b c = case a of 1 -> [...]
                      2 -> [...]
                      3 -> [...] 
                      [...]
                      otherwise -> error "..."
Run Code Online (Sandbox Code Playgroud)

要么

foo a b c | a == 1 = [...]
          | a == 2 = [...]
          | a == 3 = [...] 
          | [...]
          | otherwise = error "..."
Run Code Online (Sandbox Code Playgroud)

所以,问题是:那两个(案件或警卫)中的哪一个是"更好"的编码?两者基本相同吗?

haskell

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

创建一个新列表,用于添加和汇总旧列表中的元素

我有一个列表xxs,我需要创建一个新的,添加和总结旧列表中的元素.

让我画它来证明:

列表转换的可视化

所以,我有这个清单:

xxs = [("a","b", [(1,"a","b"),(2,"a","b")]), ("c","d",[(3,"a","b"),(4,"a","b")])]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我最好的方法是:

infoBasicas = [ (x,y,aux) | (x,y,_) <- xxs]
    where aux = sum [ z | (_,_,ys) <- xxs, (z,_,_) <- ys] 
Run Code Online (Sandbox Code Playgroud)

输出:

[("a","b",10),("c","d",10)]
Run Code Online (Sandbox Code Playgroud)

虽然我并不遥远......我还没到那里,我真的很感激一些建议.

haskell list

11
推荐指数
1
解决办法
243
查看次数

"替换"一个3元组

我有以下列表(这是一个长度为2的列表,但在我的作业中我有一个长度+ n列表)

xxs = [(11,22,[(33,33,33),(44,44,44)]),(55,66,[(77,77,77),(88,88,88)])]
Run Code Online (Sandbox Code Playgroud)

我试图通过列表索引(n)和子列表索引(p)来"替换"一个3元组(p1或p2或p3或p4,从下面的图像).

列表细分的视觉效果

该函数最后应该是这样的:

fooo newtuple n p = (…)
Run Code Online (Sandbox Code Playgroud)

例如:(将p3替换为(98,98,98):

fooo (98,98,98) 2 1 
[(11, 22, [(33,33,33) , (44,44,44)]) , (55, 66, [(98,98,98),(88,88,88)])]  
Run Code Online (Sandbox Code Playgroud)

我按照以下步骤计划了代码:

  1. 访问我想要更改的pn.我设法通过以下方式实现:

    fob n p = ((aux2 xxs)!!n)!!p
       where aux2 [] = []
             aux2 ((_,_,c):xs) = c:aux2 xs
    
    Run Code Online (Sandbox Code Playgroud)
  2. "替换"3元组.我真的需要一些帮助.我被卡住了.我做过的最好的代码(在我脑海里有点意义):(记住:我的代码请不要太糟糕,我只研究Haskell 5周)

    foo n p newtuple = fooAux newtuple fob 
         where fooAux _ [] = [] 
               fooAux m ((_):ds) = m:ds
               fob n p = ((aux2 xxs)!!n)!!p
                  where aux2 [] = …
    Run Code Online (Sandbox Code Playgroud)

haskell

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

C homework - 编译代码时发现的木马

我正在编写一些功课(101级).当我尝试编译代码时,我得到了一些来自防御者的病毒警报:

#include <stdio.h>

int main ( void ) {
int numbers [10];
int i, temp;

for (i = 1; i <= 10; ++i)
    numbers[i] = 0;

printf("Enter up to 10 integers. input '-1' to finish \n");

for (i = 0; i < 10; i++) {
    scanf("%d", &temp);
    if (temp == -1) {
        break;
    } else {
        numbers [i] = temp - 1;
    }
}

for (i = 1; i <= 10; ++i)
    printf("the numbers are: %d\n", numbers[i]);

return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c trojan

6
推荐指数
2
解决办法
502
查看次数

3元组列表的第一个元素的总和

我是新编程的东西:/

我需要创建一个函数来检索3元组列表中第一个元素的总和.

我有类似的东西:

tuples = [(11,"11","11"),(22,"22","22"),(33,"33","33"),(44,"44","44"),(55,"55","55"),(66,"66","66")]
Run Code Online (Sandbox Code Playgroud)

我需要列表中每个3元组的第一个元素的总和.= 11 + 22 + 33 + 44 + 55

模式匹配可能吗?地图?

haskell tuples

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

标签 统计

haskell ×4

c ×1

list ×1

trojan ×1

tuples ×1