/*
* code.c
*
* TASK
* Reverse a string by reversing pointers. Function should use return
* type char* and use a char* parameter as input.
*/
#include <stdio.h>
#include <string.h>
#define STRMAX 51
char* reverse(char* sPhrase[]);
int main() {
char sPhrase[STRMAX];
char sReverse[STRMAX];
printf("Enter string (max. 50 chars): ");
gets(sPhrase);
sReverse = reverse(sPhrase);
return 0;
}
char* reverse(char* sPhrase[]) {
char* sOutput[STRMAX];
int iCnt = 0, iCntRev;
for (iCntRev = strlen(*sPhrase)-2; iCntRev >= 0; iCntRev--) {
sOutput[iCnt] = …Run Code Online (Sandbox Code Playgroud) 为什么以下这些功能不一样?第一个是正确的字符串拆分,但第二个似乎永远添加"",创建一个无限的列表
正确代码:
my_split :: [Char]->Char->[[Char]]
my_split [] _ = [[]]
my_split lista y
| notElem y lista=[lista]
| otherwise=isMatch:(my_split rest y)
where
isMatch=takeWhile (/=y) lista
rest=tail $ dropWhile (/=y) lista
Run Code Online (Sandbox Code Playgroud)
坏代码:
my_split :: [Char]->Char->[[Char]]
my_split [] _ = [[]]
my_split lista y
| notElem y lista=[lista]
| otherwise=isMatch:(my_split rest y)
where
(isMatch,rest)=break (==y) lista
Run Code Online (Sandbox Code Playgroud)
唯一不同的部分是休息条件,在我看来它应该做同样的事情......加上第一个函数表单应该确保我不会永远地为我的结果添加空列表...抱歉任何问题,并提前感谢
从Learn-you-a-haskell学习一个例子,"对于所有边和所有边都等于或小于10的直角三角形的周长为24?"
rightTrianglesOriginal = [(a,b,c)| c < - [1..10],b < - [1..10],a < - [1..10],a ^ 2 + b ^ 2 == c ^ 2,a + b + c == 24]
我更改了原始示例的部分,并希望了解下面的过程(在极端条件下).
谓词的顺序会影响性能吗?
添加谓词(其他谓词暗示)是否会影响性能?(例如a> b,c> a,c> b?)?
根据谓词(1)a> b和(2)c> a制作元组列表,然后进一步应用^ 2 + b ^ 2 = c ^ 2将提高整体性能?
如果我们改变参数位置,例如(a,b,c)或(c,b,a),会对性能产生影响吗?
如果需要这样大量的排列和组合,现实生活中应用的策略是什么?我们是否应该为下次使用存储预先计算的答案(尽可能)以提高性能或其他任何性能?
rightTriangles = [(a,b,c)| c < - [1..10],b < - [1..10],a < - [1..10],a ^ 2 + b ^ 2 == c ^ 2]
几乎在很短的时间内给出结果.
rightTriangles10 = [(a,b,c)| c < - …
即使安装了时间包,我的 ghci 也找不到日历模块。
$ ghc-pkg list | grep time
old-time-1.0.0.6
time-1.2.0.3
time-1.4.0.1
Run Code Online (Sandbox Code Playgroud)
我试图删除旧的包,但这破坏了很多其他包。我该如何解决这个问题?
我试图围绕功能编程概念.考虑从列表中删除空(零长度)字符串的问题
以下是Haskell中的一个纯函数实现,即使您对该语言一无所知也是如此
removeEmpty :: [String] -> [String]
removeEmpty [] = []
removeEmpty ([] :strs) = removeEmpty strs
removeEmpty (str:strs) = str : removeEmpty strs
Run Code Online (Sandbox Code Playgroud)
现在考虑我在Scala中的实现
def removeEmpty(dirty: List[String]): List[String] = {
if (Nil == dirty)
dirty
else {
if (dirty(0).length() == 0)
removeEmpty(dirty.tail)
else
dirty.head::removeEmpty(dirty.tail)
}
}
Run Code Online (Sandbox Code Playgroud)
它做了同样的事情,但对它有一个非常程序化的感觉.是否有更多功能的方法在Scala中编写相同的方法?
我试图编写一个递归函数来做某事,但在每一步我都想知道树中当前的深度/索引.那么如何在不使用函数签名中的索引参数的情况下实现这一目的呢?
就像是:
rec_fn n = do print index
do_something n
if n > 0
then rec_fn (n-1)
else print "end"
Run Code Online (Sandbox Code Playgroud)
所以我如何获得index,而不做以下事情:
rec_fn n i = do print i
do_something n
if n > 0
then rec_fn (n-1) (i+1)
else print "end"
Run Code Online (Sandbox Code Playgroud) sendrecv函数具有以下类型签名:
sendrecv :: Socket ->
PSQ.PSQ (String, Integer) POSIXTime ->
Map.Map (String, Integer) [String] ->
String ->
IO (PSQ.PSQ (String, Integer) POSIXTime, Map.Map (String, Integer) [String])
Run Code Online (Sandbox Code Playgroud)
它需要一个套接字,一个PSQ,一个Map和一个String,并返回一个PSQ和一个Map.
我想把它调用n次,其中套接字和字符串保持不变,但PSQ和Map得到修改,意味着修改后的PSQ,Map应该成为下一次运行的输入.
最初我认为这可能是foldM的完美案例,并尝试过例如
(q', m') <- foldM sendrecv (s, q1, m1, "ping") (enumFromTo 1 1000)
Run Code Online (Sandbox Code Playgroud)
但显然这不起作用,我担心我还没有理解整个foldM的事情,或者是否有可能传递静态参数(如s和"ping")以及如何.
我已经定义了一个代表树的新数据类型.我还实现了一个函数walk来遍历树的所有元素,函数的功能版本是正确的但不是他的monadic版本walkM.
module Hdot where
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
data RDoll a = Null | RDoll a [RDoll a] deriving (Show)
test :: RDoll Int
test = RDoll 1 [RDoll 2 [Null], RDoll 3 [RDoll 4 [Null]]]
walk :: (a -> b) -> RDoll a -> [b]
walk f Null = []
walk f (RDoll x rds) = ((f x): (concatMap (\x -> walk f x) rds))
walkM :: (Monad m) …Run Code Online (Sandbox Code Playgroud) 我遇到了Haskell的问题.我有一个简单的代码:
petla szerokosc wysokosc pozycje = do
let plansza_x = oznacz_pola_dookola_jako_miejsca_na_skarby_wiele
pozycje
(utworz_plansze pozycje szerokosc wysokosc)
szerokosc
let x = make_list $ zlicz_x plansza_x
guard ((sprawdz_kombinacje2 plansza_x pozycje (head x) szerokosc wysokosc) == True)
x
Run Code Online (Sandbox Code Playgroud)
参数很好,但GHCI让我觉得奇怪.function make_list返回字符串列表,例如:[['_','_'],['*','_'],['_','*'],['*','*']].
我想loop获取此列表的第一个元素,将其作为参数粘贴到sprawdz_kombinacje2.如果该函数返回False,它将从列表中获取net元素.否则该函数petla应该返回String,例如:['_','*'].
问题:当我在GHCI中运行此函数时,它返回空列表,但它不应该:
*Main> petla 2 2 [(1,1,1)]
[]
Run Code Online (Sandbox Code Playgroud)
但是,当我添加return到最后一行时:
petla szerokosc wysokosc pozycje = do
let plansza_x = oznacz_pola_dookola_jako_miejsca_na_skarby_wiele
pozycje
(utworz_plansze pozycje szerokosc wysokosc)
szerokosc
let x = …Run Code Online (Sandbox Code Playgroud) 我有一个浮点异常,我不知道为什么.
代码是这样的:
void calcola_fitness(){
vector<double> fitness;
int n=nodes.size();
int e=edges.size();
int dim=feasibility.size();
int feas=(feasibility[dim-1])*100;
int narchi=numarchicoll[dim-1]/e;
int numero_nodi=freePathNode.size()/n;
double dist_start_goal=node_dist(0,1);
int i,f,t;
double pathlenght=0;
int siize=freePathNode.size();
for(i=0;i!=siize-1; i++){
f=freePathNode[i].getIndex();
i++;
t=freePathNode[i].getIndex();
i--;
pathlenght=pathlenght+node_dist(f,t);
}
double pathlenghtnorm=pathlenght/10*dist_start_goal;
double fit=((double)numero_nodi+pathlenghtnorm+(double)narchi)*((double)feas);
fitness.push_back(fit);
}
Run Code Online (Sandbox Code Playgroud)
有人能帮助我吗?有什么问题?我可以解决这个问题吗?非常感谢你
我正在尝试编写一个检索列表中第n个元素的函数.
这是我到目前为止所拥有的:
main :: IO ()
main = do print (nth 3 [1,2,10])
nth _ [] = []
nth a (x:xs)
| (a == 1) = x
| otherwise = nth (a-1) xs
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
Error occurred
ERROR line 2 - Cannot justify constraints in explicitly typed binding
*** Expression : main
*** Type : IO ()
*** Given context : ()
*** Constraints : (Show a, Num [a])
Run Code Online (Sandbox Code Playgroud) 我一直收到错误:无法将预期类型'Bool'与实际类型'[t0]'匹配.我正在尝试获取字符串的用户输入,然后以反向ORDER输出许多字符串.
输入示例:
HI1
HI2
Run Code Online (Sandbox Code Playgroud)
示例输出:
HI2
HI1
Run Code Online (Sandbox Code Playgroud)
我的代码:
Back :: Int -> IO()
Back x = do line <- sequence_[getLine|[1..x]]
mapM_ print (reverse line)
Run Code Online (Sandbox Code Playgroud)