Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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
Haskell 部分函数在级联编程语言中的应用_Haskell_Concatenative Language - Fatal编程技术网

Haskell 部分函数在级联编程语言中的应用

Haskell 部分函数在级联编程语言中的应用,haskell,concatenative-language,Haskell,Concatenative Language,假设我有一个haskell函数fnl=filter(n]dip]filter,但似乎必须有更好/更干净的方法来编写它 此外,我正在尝试编写自己的连接语言,并想知道惰性计算是否可以与连接语言兼容。swap[[>]dip]filter不起作用,因为它假定对要筛选的引用的每次调用都可以访问n;这意味着filter在运行时不能在堆栈上留下任何中间值,并且不会消耗n。您需要在t中捕获n的值帽子报价单 第一个“eta”-减少列表参数: l n f = l [ n > ] filter n f = [

假设我有一个haskell函数
fnl=filter(n]dip]filter
,但似乎必须有更好/更干净的方法来编写它


此外,我正在尝试编写自己的连接语言,并想知道惰性计算是否可以与连接语言兼容。

swap[[>]dip]filter
不起作用,因为它假定对要筛选的引用的每次调用都可以访问
n
;这意味着
filter
在运行时不能在堆栈上留下任何中间值,并且
不会消耗
n
。您需要在t中捕获
n
的值帽子报价单

第一个“eta”-减少列表参数:

l n f = l [ n > ] filter
n f = [ n > ] filter
然后通过显式引用并用
组合来捕获
n

n f = n quote [ > ] compose filter
(假设
quote:a->(>a)
a.k.a
unit
,获取一个值并将其包装在一个引号中,然后
组合:(a->B)(B->C)->(a->C)
a.k.a
cat
,将两个引号连接起来。)

然后只需“eta”-减少
n

f = quote [ > ] compose filter
我把“eta”放在短引号中,因为它比lambda演算更一般,可以处理堆栈上任意数量的值,而不仅仅是一个

当然,您可以将部分应用程序分解到它自己的定义中,例如Cat中的
papply
组合器,它在Joy中已经定义为
swons
swap cons
),但也可以这样定义:

DEFINE

  papply (* x [F] -- [x F] *)
    == [unit] dip concat ;

  f (* xs n -- xs[>=n] *)
    == [>] papply filter .
在Kitten中,这可以根据偏好以几种不同的方式书写:

// Point-free
function \> compose filter

// Local variable and postfix
-> n; { n (>) } filter

// Local variable and operator section
-> n; \(n <) filter
//无点
函数\>组合过滤器
//局部变量与后缀
->n;{n(>)}过滤器
//局部变量与算子部分

->n\(n)你的上一句话对我来说似乎是一个完全不同的问题。考虑删除它,并把它作为一个单独的问题来问。@ AMGLUE我在这篇文章中包含了懒惰评价的问题,因为这两个概念有点关联。通常函数的参数在函数需要返回一个值之前没有被评估,所以我是W。我想知道这是否会影响我在实验语言中表示部分应用函数的方式。-非常感谢。这是我对级联编程感兴趣的主要原因之一!