Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function haskell记录位置函数_Function_Haskell_Position - Fatal编程技术网

Function haskell记录位置函数

Function haskell记录位置函数,function,haskell,position,Function,Haskell,Position,我正在尝试写一个函数,它将返回一个列表,其中包含从起点开始的所有位置。例如,如果我写 “位置[L,R,L,L,U](0,0)”结果必须是“[(0,0),(-1,0),(-1,0),(-2,0),(-2,1)]” 使用下面的函数,我只得到结束位置。有人能帮我吗 type Position = (Int,Int) data Step = L | R | U | D type Route = [Step] positions :: Route -> Position-> [Positi

我正在尝试写一个函数,它将返回一个列表,其中包含从起点开始的所有位置。例如,如果我写 “位置[L,R,L,L,U](0,0)”结果必须是“[(0,0),(-1,0),(-1,0),(-2,0),(-2,1)]”

使用下面的函数,我只得到结束位置。有人能帮我吗

type Position = (Int,Int)
data Step = L | R | U | D

type Route = [Step]

positions :: Route -> Position-> [Position]
positions [] p = p:[]
positions (m:ms) p = positions ms (move m p)

您的代码表明您已经定义了一个函数
move::Step->Position->Position
,然后我们可以使用:

scanl::(b->a->b)->b->[a]->[b]
因此将给定初始累加器(此处a
位置
)和列表元素(移动列表)的函数(此处
翻转移动
)作为输入,并计算更新后的累加器。然后我们给它初始累加器和位置列表


由于我们的
move::Step->Position->Position
positions::[Step]->Position->[Position]
函数已经翻转了参数(w.r.t.
scanl
),我们都翻转了
move
函数,以及我们用
scanl构建的函数(翻转移动)

您的代码表明您已经定义了一个函数
move::Step->Position->Position
,然后我们可以使用:

scanl::(b->a->b)->b->[a]->[b]
因此将给定初始累加器(此处a
位置
)和列表元素(移动列表)的函数(此处
翻转移动
)作为输入,并计算更新后的累加器。然后我们给它初始累加器和位置列表


由于我们的
move::Step->Position->Position
positions::[Step]->Position->[Position]
函数已经翻转了参数(w.r.t.
scanl
),我们都翻转了
move
函数,以及我们用
scanl构建的函数(翻转移动)

您可以定义一个指定一个时刻的函数,然后使用
scanl
。您可以定义一个指定一个时刻的函数,然后使用
scanl
。是的,我有一个移动函数,但当我试图定义scanl时,我出现了一个错误“scanl”的类型签名缺少附带的绑定(必须在声明“scanl”的位置提供类型签名)@你不需要定义
scanl
scanl
是一个前奏函数。你为什么要定义
scanl
?这是一个库函数。哦,好吧,现在我明白发生了什么!非常感谢!:我有一个移动函数,但当我试图定义scanl时,我有一个错误。”“scanl”的类型签名缺少附带的绑定(必须在声明“scanl”的位置提供类型签名)@你不需要定义
scanl
scanl
是一个前奏函数。你为什么要定义
scanl
?这是一个库函数。哦,好吧,现在我明白了发生了什么!非常感谢!:D
positions :: [Step] -> Position -> [Position]
positions = flip (scanl (flip move))