标签: tacit-programming

什么(f.).在Haskell中意味着什么?

我已经看到很多函数是根据模式定义的(f .) . g.例如:

countWhere = (length .) . filter
duplicate  = (concat .) . replicate
concatMap  = (concat .) . map
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

haskell functional-programming pointfree function-composition tacit-programming

49
推荐指数
2
解决办法
3709
查看次数

是否通过主流函数式语言库来模拟J风格的副词,forks等?

通过动词,副词,叉子等编写J风格的超级浓缩默契编程,是否曾经通过图书馆尝试主流功能语言?

如果是这样,结果有多成功?

如果没有,是否有技术问题使这不可能,或者它是否值得做?

我特别感兴趣的是像forks这样的结构似乎与函数式编程中的基本概念没有直接对应.

f# haskell functional-programming j tacit-programming

24
推荐指数
2
解决办法
1321
查看次数

如何过滤J中的列表?

我目前正在学习迷人的J编程语言,但有一点我无法弄清楚如何过滤列表.

假设我有任意列表3 2 2 7 7 2 9,我想删除2s,但保持其他一切不变,即我的结果将是3 7 7 9.我怎么做到这一点?

j tacit-programming

19
推荐指数
3
解决办法
1557
查看次数

Lisp中的默认编程

是否可以在Lisp中使用/实现默认编程(也称为无点编程)?如果答案是肯定的,它已经完成了吗?

lisp common-lisp tacit-programming

16
推荐指数
2
解决办法
1460
查看次数

Haskell中的隐性函数组合

假设我有一个mean如此定义的函数:

mean xs = sum xs / (fromIntegral $ length xs)
Run Code Online (Sandbox Code Playgroud)

但我想以某种默契形式,像这样:

mean = sum / (fromIntegral . length)
Run Code Online (Sandbox Code Playgroud)

是否有内置的Haskell方法可以在这些行中执行某些操作而无需构建自己的tacit函数(类似这样):

tacit :: (a -> b -> c) -> (d -> a) -> (d -> b) -> d -> c
tacit a b c i = a (b i) (c i)
Run Code Online (Sandbox Code Playgroud)

在这种形式中,函数如下所示:

mean = tacit (/) sum (fromIntegral . length)
Run Code Online (Sandbox Code Playgroud)

但感觉可能有一种方法可以避免使用像这样的显式函数.我是在想; 是否有一些方法可以做到内置于Haskell?

haskell function composition pointfree tacit-programming

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

组合器在连接/隐性编程语言中的作用

高阶组合器(或函数生成器)在连接默认编程中有什么确切的作用?

是否有另一种方法来实现连接编程语言而不是直接操作堆栈?

提到的组合子和Schonfinkel组合逻辑之间的关系有多紧密?

lambda combinators concatenative-language tacit-programming

12
推荐指数
2
解决办法
2425
查看次数

阅读J代码的最佳策略

我已经使用J几个月了,我发现阅读不熟悉的代码(例如我自己没有写的代码)是该语言最具挑战性的方面之一,特别是当它处于默认状态时.过了一会儿,我提出了这个策略:

1)将代码段复制到word文档中

2)从(1)中取出每个操作员并将其放在单独的一行上,使其垂直读取

3)用词汇表页面中的口头描述替换每个操作符

4)从J语法到英语语法的粗略翻译

5)使用翻译来识别与概念相关的组件,并使用换行符分隔它们

6)用普通的英文散文写出(5)中每个组成部分应该做的描述

7)基于(6)写出整个程序应该做什么的描述

8)写出为什么可以说(1)中的代码代表(7)中的设计概念的解释.

虽然我从这个过程中学到了很多东西,但我发现它相当艰巨和耗时 - 特别是如果有人使用我以前从未遇到的概念设计他们的程序.所以我想知道:J社区中的其他人是否有最喜欢的方法来找出晦涩难懂的代码?如果是这样,这些方法的优点和缺点是什么?

编辑:

我需要分解的代码类型的示例如下:

binconv =: +/@ ((|.@(2^i.@#@])) * ]) @ ((3&#.)^:_1)
Run Code Online (Sandbox Code Playgroud)

我自己写了这个,所以我碰巧知道它需要一个数字输入,将它重新解释为一个三元数组,并将结果解释为base-2中一个数字的表示,最多只有一个重复.(例如,binconv 5 =(3 ^ 1)+ 2*(3 ^ 0) - > 1 2 - >(2 ^ 1)+ 2*(2 ^ 0)= 4.)但如果我偶然发现它没有任何先前的历史或文件,弄清楚这是它的作用将是一个非常重要的练习.

j tacit-programming

11
推荐指数
2
解决办法
968
查看次数

学习J/K/APL

我知道所有3个都是相关的,我已经看到了用J编写的Project Euler中的问题的几个答案,以及一些写的K.我想知道的是,你建议学习哪个,你会建议去哪里关于获取材料学习它?

j apl k tacit-programming

7
推荐指数
2
解决办法
1752
查看次数

摆弄无点代码?

我一直在学习Factor和J语言来试验无点编程.这些语言的基本机制似乎很清楚,但是如何理解如何进行算法设计是一项挑战.

对我来说,一个特殊的混淆源是如何构造代码以便很容易地尝试不同的参数.通过这个,我的意思是Mathematica和Matlab如此擅长的事情; 你设置了一个算法然后操纵变量并观察发生了什么.

没有显式变量,你怎么做?也许我在想这一切都错了.我应该如何在无点编程中实现这一点?

functional-programming j pointfree tacit-programming factor-lang

7
推荐指数
1
解决办法
538
查看次数

J:默顿方法的默契副词

我发现'addons/math/misc/brent.ijs'将布伦特的方法作为副词实现.我想建立一个牛顿方法作为副词,但它比构建默认动词要困难得多.

这是牛顿迭代的显式版本:

   newton_i =: 1 : '] - u % u d.1'
Run Code Online (Sandbox Code Playgroud)

有了这样的用法:

   2&o. newton_i^:_ (1) NB. (-: 1p1) must be found
1.5708
   2 o. 1.5708 NB. after substitution we get almost 0
_3.67321e_6
Run Code Online (Sandbox Code Playgroud)

当然,为方便起见:

    newton =: 1 : 'u newton_i^:_'
Run Code Online (Sandbox Code Playgroud)

什么是默认的等价物?

operators j newtons-method tacit-programming

7
推荐指数
1
解决办法
206
查看次数