我已经读了维基百科上的文章。我也读过关于这个问题的小文章。这些描述相当抽象
功能反应式编程(FRP)在实践中意味着什么
反应式编程(相对于非反应式编程?)由什么组成
我的背景是命令式/OO语言,因此,如果能解释一下这个范例,我将不胜感激。好的,从背景知识和您所指的维基百科页面来看,反应式编程似乎有点像数据流计算,但有特定的外部“刺激”触发一组节点激发并执行其计算
这非常适合UI设计,例如,触摸用户界面控件(例如,音乐播放应用程序上的音量控件)可能需要更新各种显示项目和音频输出的实际音量。当修改体
设计良好的功能性(相对于面向对象的)web应用程序有哪些示例可以提供其源代码?我目前正在研究,但我希望看到其他一些非平凡的例子,最好是在
对于MVC,有很多Rails和PHP应用程序、框架和教程需要学习-函数式编程有哪些内容?有:
(clojure)
(公共小巴计划)
(爱尔兰)
(闲聊)
该列表足以让您忙着给出具有不同特征的函数式语言示例:
Clojure:多范式?,灵活?它不是一种纯粹的函数式语言,尽管您更喜欢以函数式风格编程,但它并不是严格必需的。您可以通过java互操作编写java
如果将函数应用于所有元素会得到相同的结果,那么您将如何命名一个接受列表和函数并返回True的函数
def identical_results(l, func):
if len(l) <= 1: return True
result = func(l[0])
for el in l[1:]:
if func(el) != result:
return False
return True
def相同的结果(l,func)
我试图理解示例代码(以下示例)。我不理解参数化构造。它的文档是,但它们没有帮助。它做什么?参数化在块的持续时间内将特定参数设置为指定值,而不影响块外的值。参数化是一种可以在现有函数内动态重新绑定值的方法,无需使用lambda。在实践中,有时使用parameterize在函数中重新绑定值要容易得多,而不需要传递参数并使用lambda绑定它们
例如,假设您使用的库向标准输出HTML,但为了方便起见,您希望将该值捕获为字符串并对其执行进一步的操作。库设计器至少有两个选项可以让您轻松实现这一点:1)接受
Monad被描述为处理IO的haskell解决方案。我想知道是否有其他方法可以用纯函数式语言处理IO。如果“纯”的意思是“引用透明”,那么在中使用唯一性类型,也就是说,应用的函数可以与其计算结果自由互换(因此,每次调用具有相同参数的函数都会得到相同的结果),任何有状态IO的概念都被定义排除在外
我知道有两种粗略的策略:
让一个函数执行IO,但要确保永远不能用完全相同的参数调用它两次;这一方面通过让函数变得简单的“引用透明”来解决问题
将整个程序视为一个单一的纯函数,将“接收的所有输入”作为参数
好吧,这是一个有点迂腐的问题,但我想确保我正确理解了定义。闭包名字对象是用来描述匿名函数可以提升局部范围内的变量(无论它们是否实际提升)还是仅当它们提升局部范围内的变量时
换句话说,如果一个匿名函数具有在其局部范围内提升变量的能力(因为该语言提供了这种能力),但没有,它仍然被视为一个闭包吗
我的理解是,只有当局部变量被解除时,它才是一个闭包。但是一个匿名函数如果不能(即使它可以)就不是一个闭包。因此,并非所有匿名函数都是闭包,但所有闭包都是匿名函数
再说一次,很抱歉我的学究作风,但这些东西让我很
最近,我的公司从RFT 8.1.1.1升级到RFT 8.2,现在我们所有的rational_ft_log.txt文件都是从测试中生成的,它们的长度至少是升级前的十几倍
这些文件现在长了很多,因为每发生一个小的“getProperty on frame”都会返回一个+++过程,如下所示:
++通过2011年3月30日上午11:15:43.113获取帧上的属性
线号=50
script_name=DebugCommands.IR2_18_DebugCommands
有人知道如何摆脱这些讨厌的东西吗
问题是,我不知道我是否可以只修改来自对象语言版本的代码,因为Ocaml中的记录和变体比类更强大
所以,我需要一个事件驱动的有限状态机(类似于UML中的层次结构),易于配置
有经验的人能举个简单的例子吗?只是为了避免最常见的陷阱
谢谢:)
编辑16/03:是否可以在没有可变状态的情况下进行编辑?
我想把它恰当地封装在“FSM”的名称下,我应该选择一个模块还是一个类?这里有一个极好的答案,它展示了OCaml在表示有限状态机时的表现力和优雅性:
对于更重要的用途,您可以尝试查看一些有限状态机库,如f
我需要在ocaml中传递两个列表作为命令行参数。
我使用以下代码在程序中访问它
let list1=Sys.argv.(1);;
let list2=Sys.argv.(2);;
我需要将list1和list2作为整数列表。
我发现了错误
此表达式的类型为string,但表达式的类型应为
整数列表
在处理过程中。
如何将参数转换为整数列表。
参数以这种格式传递[1;2;3;4][1;5;6;7]Sys.argv.(n)将始终是一个字符串。您需要将字符串解析为整数列表。您可以尝试以下方法:
$
根据本演示文稿(,PDF第4页),以下两种数据结构使用的内存量不同
type t1 = { f1: float; f2:float};;
type t2 = (float * float);;
t1使用的内存比t2少,有人能解释一下为什么会出现这种情况吗?19.3.3 of说:
浮点数数组(类型float array)有一种特殊的、不固定的、更有效的表示形式。这些数组由指向带有标记Double\u array\u tag的块的指针表示
这是为了有效地处理大浮点数组而引入的,但这也适用于仅具有浮
我正在尝试将(附加到列表的一个元素后接)
应该怎样?我正在尝试以下方法:
(append(list'lambda)(list'x)):编译并给出结果”(lambda x)
我希望结果是:
(lambda(x))
有什么提示吗?最简单的编写方法是:
(list 'lambda (list 'x))
如果您确实必须使用问题中提到的append方法,那么一种可能的解决方案是:
(append (list 'lambda) (list (list 'x)))
谢谢,太快了!如果您将此作为宏的一部分,
任何语言,只是伪代码
我正在四处搜索一种算法,它可以检测数字的方向和变化的停止。例如:
function detectChange(int number) {
if number is rising return "rising"
if number is dropping return "dropping"
if number is unchanged return "unchanged"
}
main() {
int number
while(true) {
我需要一个主函数来运行其他函数
我试过这个:
let main () =
let deck = make_mazo in
let jugadores = players [] 0 in
dothemagic deck jugadores 0 [] [] [];;
但我有一个错误:
文件“game.ml”,第329行,37-39个字符:
错误:语法错误
我认为是问题所在,我需要一种不同的方式来结束代码。也可以仅使用进行尝试和问题是一样的
[编辑]
这里有更新
错误持续存在:
文件
以下功能是用Elixir编写的:
def count(:comments, id), do 0
当我想在iex中使用“h”获取其文档时,会打印出来:
iex> h Module.count
def count(atom, id)
但是我想在文档中使用“h”显示“:comments”
iex> h Module.count
def count(:comments, id)
我该怎么做
提前谢谢 您想用无正文子句声明函数。请参阅上的长生不老药文档或作为一个整体
编辑:
进一步看
我有一个类似于so的scheme函数,它为给定的输入生成一个散列值
(define hash
(lambda (c)
(cond
((null? c) 600)
(else
(reduce + (map (lambda (x) (cv x)) c) (* 12 (hash (cdr c))))))))
cv(x)是每个字母映射到数字a=1、b=2、c=3的位置。。。z=26
600是基准值。
12是唯一的数字
我的问题是我做错了什么,我的价值观
我是Racket的初学者,最近我在Racket的树上工作,我不知道如何平衡BST,,,我写了一个插入和构建BST的代码,但不能平衡BST(我的插入和构建BST的代码)
(定义(插入元素树)
(cond((null?tree)(列表元素“()”())
((=元素(汽车树))tre)
((
在函数式编程中,下列函数运算符的名称(或概念名称)是什么
给定两个函数f和g,以及谓词函数p,p(p,f,g)就是函数
x → if (p(x)) f(x) else g(x)
我想知道这个操作符是否有一个已建立的名称,以便我可以在代码中使用该名称。(也就是说,我想给P一个常规名称。)如果操作符提升到函数monad中,我会说它是
例如,在Haskell中,您确实可以这样做
import-Control.Monad
让if'ctf=如果c那么t else f--另一个常用名称是'ite'`
假设
我是长生不老药编程语言的初学者
我有一个类似这样的物体:
{
id: uuid,
created_at: DateTime.t,
updated_at: DateTime.t,
type: my_type
}
比如说,myu类型是~w[abcd]
我想编写一个函数,它获取这些对象的列表并返回以下映射:
%{
A: 120,
B: 220,
C: 560,
D: 0,
any: 560
}
这里的值必须是每个我的类型+的在列(Timex.diff(更新时,
关于命令式语言和函数式(声明式语言的一个子集)编程语言之间的区别,有什么明确的答案,可以用实际的例子来解释吗?哪些是主要的或最重要的命令式语言?函数语言呢
我确实在这里读过这个答案,但它实际上让我更加困惑…:-(没有什么大区别
我的意思是,现在计算机是你的奴隶(*)(而你是一个非常不幸的国王)。它要么是一个非常愚蠢的计算机,你自己给他下达每分钟一个细节的命令。比如,“洗我马厩里的第一匹马”。(甚至“拿一桶水到马厩的第一个马厩。在那里洗马。清理马厩的第一个马厩”。)然后,“洗我的第二匹马”。(甚至
更具体地说,您如何使用图表(而不是文本表示)对函数式程序或使用函数式(无类)开发的程序进行建模?是否有可能?是否有人能告诉我最近的应用程序可以这样做(开源,免费,如啤酒,如果您愿意的话)UML是不同类型建模的概要。如果您谈论的是对象图(类图),那么您不会找到任何适合您所需用途的东西。但是如果你谈论的是交互图(活动图)或需求图(用例图),它们当然会帮助你,并且是UML基础的一部分。UML不仅仅是类图
大多数其他图类型(用例图、活动图、序列图……)完全适用于纯功能编程风格。如果你不使用属性和关联,不
我正在用OCaml编写一个语言对讲机
使用ApplyOver,我必须在类型字典的每个值上映射一个函数,该字典由(ide*exp)->(“key”,value)组成
如果字典上的函数是“funx->x+1”(“key1”,Eint 2),(“key2”,Eint 3),则ApplyOver将+1添加到2和+1添加到3
我在最后一行有这个错误,这个函数的类型是exp->evT env->evT
它适用于太多的论点;也许你忘了一个“;”
代码(无标准评估):
函数应用程序的优先级仅次于方法调用(和类似
我试图编写一个简单的OCaml程序来推进向量,即[1,2,3]到[3,1,2],依此类推:
open Printf
let advance_list list =
match list with
|[] -> []
|h::t -> t::h
let () = List.iter (printf "%d ") (advance_list [1;2;3])
但我明白了
File "rotate_vector.ml", line 13, charact
有人告诉我这是真的,但我始终不明白为什么,也不相信。对它进行检查似乎是这样。这是真的吗?如果是,原因是什么?不。函数式编程语言只是一种鼓励将函数本身作为值处理的语言。这与它是否与其他语言很好地集成是正交的。事实上,Clojure、Scala和F#被设计为分别与Java、Java(再次)和C#进行互操作
使API适应目标语言的习惯用法可能需要一些工作。但是这个问题并不是函数式语言所独有的,大多数C接口也不会像Python中那样好看!这项工作是可选的:Haskellnetwork包只是围绕伯克利套接
我在编写返回满足条件的成对子列表的函数时遇到问题
当前代码:
(define lst1 '((a . 8)(b . 3)(c . 1)(d . 9)(e . 4)))
(define (letter t)
(caar t))
(define (numb p)
(cdar p))
(define (satisfy? c? lst)
(cond
[(or (c? (letter lst)) (c? (numb lst))) #t]
[else #f]))
(def
我试图解决Scheme中的一个问题,这个问题要求我使用嵌套循环或嵌套递归
e、 我有两个列表,我必须检查它们笛卡尔乘积的条件
解决这类问题的最佳方法是什么?关于如何简化这些类型的函数,有什么建议吗
我会详细说明一下,因为我的意图可能还不够清楚
常规递归函数可能如下所示:
(define (factorial n)
(factorial-impl n 1))
(define (factorial-impl n t)
(if (eq? n 0)
t
(factor
我是新来Clojure的,还没找到我的海腿。我想知道,从函数编程的角度来看,将函数放在Clojure映射中,然后像在JavaScript中经常做的那样像准对象一样传递这些映射,这被认为是好的还是坏的做法。解释也将不胜感激。由于以下几个原因,这将是不好的:
这不是必须的——在JavaScript中,我们使用简单映射作为类似Java的对象。在Clojure中,如果您真的想这样做,可以通过Java互操作使用实际的Java对象
无论您是将函数放在映射中,还是使用真正的Java对象,您都是在为函数编程设计
我正在考虑在某个时候创建一个功能性的反应式框架。我已经读了很多关于它的书,看到了一些例子,但我想弄清楚这个框架需要做什么才能被视为FRP扩展/dsl。我不是真的关心实现问题或细节等,而是更关心在一个完美的世界环境中需要什么
理想的函数式反应式编程语言的关键操作和特性是什么?我想您可能已经看过函数式I/O和read。我认为他的方法非常务实和漂亮。希望你也偶然发现了一些作者的优秀作品
我个人的要求是这个系统是完全纯净的。也就是说,所有行为都由纯world->world函数定义,所有实现或可视化都由w
我想知道学习像Erlang这样的语言是否值得。我正在考虑学习一门新语言,我想到了以下问题:
作为一名程序员,学习函数式编程能帮助我提高吗
Erlang的行业使用情况/使用Erlang的项目
从职业角度来看,学习erlang有什么真正的未来吗
erlang相对于python/PHP/etc的可能优势/劣势
谢谢,
Vicky来自这里的Scheme,所以我不能为Erlang说太多。但由于该方案也是有效的,让我试着说服你们
学习函数式编程对程序员有帮助吗?
当然。我听过很多这样的原因,有些我可以证
作为一名狂热的函数式程序员,我总是对让更多的人了解函数式编程的精神感兴趣。因此,我通常试图解释FP会给其他人带来什么好处,但遗憾的是,到目前为止还没有好运气。讨论中经常出现的一个论点是,FP听起来很不错,但实际上似乎只适用于有限的学术目的。这通常得到这样一个论点的支持,即几乎没有任何公司使用函数式语言
我无法给出任何实质性的论据来反对公司中缺乏FP的使用,除了该论据中固有的鸡蛋问题(我只知道两家公司使用OCaml,我不认为其他语言的情况更好)
然而,解决这一争论的一个办法是向他们展示FP技术(尽
我试图制作一个函数,用标准ML来解一个单变量多项式方程,但它总是给我错误
代码如下
(* Eval Function *)
- fun eval (x::xs, a:real):real =
let
val v = x (* The first element, since its not multiplied by anything *)
val count = 1 (* We start counting from the second elemen
我正在使用NLTK for Python进行自然语言处理
我发现自己的编程更多地采用函数式风格,并且正在考虑切换到函数式语言。然而,我需要一个好的NLP库,至少与NLTK相当
你知道有好的NLP库的函数式编程语言吗?我发现Haskell社区有一些NLP活动,但与NLTK相比,它似乎还处于婴儿期。Haskell:Scala和Clojure
两者都在JVM上运行,因此您可以利用所有java nlp和机器学习库,如Stanford Parser、Lingpipe、Mallet等。就除Python之外的
我正在尝试执行一个函数,该函数将字符列表作为输入,并返回一个包含条件中给定的特定字符之前的所有字符的列表,以便计算后缀表达式
示例:用户输入字符串“5=b 10*=c”
我要做的第一步是使用string->list将这个字符串转换成一个列表,这样我就得到了这样一个列表
(#\5 #\space #\=#\b #\space #\10 #\space #\* #\space #\=#\c #\space)
然后我开始阅读列表,一旦我阅读了字符\=,我就停止了阅读,我把所有字符放在列表1中,然后把
为什么我还允许这样做
@spec url_hash(String.t) :: String.t
def url_hash(url) do
url = String.replace(url, ~r/\s/, "")
Base.encode16(:crypto.hash(:md5, url), case: :lower)
end
取而代之的是,我认为合适的函数式编程范式是什么
@spec url_hash2(String.t) :: String.t
def u
我正在尝试使用foldr或foldl在SML中构建一个函数,该函数将返回列表中所有元素的逻辑or和逻辑and
我试过这样做,使用和和或:
fun band x = foldr (op and) true x;
fun bor x = foldr (op or) false x;
还可以使用和以及或。但我一直收到错误消息,例如:
Error: unbound variable or constructor: or
我发现了问题:andalso和orelse都不是运算符,也不是函数,因为它们实现
我看过罗伯特·C·马丁的演讲“函数式编程;什么?为什么?什么时候?”
这篇演讲的主要信息是,状态在函数式编程中是不可接受的。
马丁甚至更进一步,声称审判是“邪恶的”
所以。。。记住这个演讲,我的问题是,在函数式编程中,闭包在哪里
当函数代码中没有状态或变量时,创建和使用此类闭包(不包含任何状态或变量的闭包)的主要原因是什么?关闭机制有用吗
如果没有状态或变量(可能只有不可变的ID),就不需要引用当前的词法范围(没有可以更改的内容)
在这种方法中,使用类似Java的lambda机制就足够了,其中
我听过很多人在函数式编程中谈论代数数据类型(不要与“抽象数据类型”混淆)。我只知道ADT指的是某种复合(通常是递归)数据类型,如树或数学表达式
实际上,只是说:
代数数据类型是一种复合类型,即
由其他类型组合而成。两类常见的代数类型
是乘积类型(即元组和记录)和和和类型(即。
标记的或不相交的联合,或变体类型)
但没有给出正式的定义
所以我想知道ADT的确切定义是什么?根据维基百科,产品类型和总和类型是ADT的两个示例,但是产品和总和是定义ADT的唯一有效操作吗?还有其他允许的操作吗?代数数据类
根据Apache Flink的文档:
所有Reduce、Fold和Aggregations都表示从KeyedStream到DataStream的转换,而不是从DataStream到DataStream的转换
我想知道为什么
据我所知,您仍然可以在非键数据流上进行reduce、fold或min/max聚合,如map或filter。通常,我们希望基于某些键进行聚合。例如,假设流的输入是Tuple2groupId:String,userId:String。通过使用groupId作为键的KeyedStr
此表达式具有类型
let main() =
let base = read_int () in
let num = read_int () in
if num = reverse num && (is_base base num) = true then Printf.printf "YES"
else if is_base base num = false then Printf.printf "ERROR"
else Printf.printf"NO"
我已经阅读了文
我有一个具有公共签名的不同排序函数集合,因此它们可以互换地传递给其他函数。我希望能够内联声明每个签名都应该匹配同一个签名,因此如果其中一个签名与该签名冲突,我将在上下文中收到警告
Rust具有用于声明函数类型的语法:
type Foo = Fn(i32) -> i32;
类型Foo=Fn(i32)->i32;
fn栏(函数:&Foo){
func(12);
}
我搞不懂的是如何声明一个遵循函数类型的常规(非闭包)函数:
//这是有效的,可以作为Foo传递,但是
//复制代码,并且不根据
在论文中提到了一个实验的编程任务
任务:“大致上,降雨要求非负数的平均值
在某些前哨值(如-999)之前的输入中出现”
我决定尝试使用高级学生语言(ASL)以HtDP方式解决这个问题
谈到有效的解决方案,我想知道是否有办法使它更优雅。
此外,还不清楚如何根据HtDP手册中介绍的设计方法对这样的函数进行模板化
以下是我的解决方案:
;; ListOfNumber Integer -> Integer
;; produce the average of numbers in the list
我试图检查union类型的变量的值的类型
/*@flow*/
A型={
a:号码,
b:号码
}
B类={
c:字符串
}
常数fun1:(A | B)=>void=(x)=>{
如果(x.a){
x、 a
x、 b/不起作用
}
如果(x.b){
x、 b
x、 a/不起作用
}
如果(x.c){
x、 c
}
}
唯一的方法是检查单个属性吗?在上面的例子中,我们知道如果x.a,那么也x.b。是否没有办法检查a类型或B类型以便我可以编写
const fun1:(A | B)=>void=(x
我们应该在设计级别应用函数编程实践,即当我们识别和设计类层次结构时,还是只在编写函数体时才适用
我的感觉是,我们应用普通的OOPs技术进行设计过程,并使用函数方法编写实现
请说出你的想法 设计过程应该与面向对象无关。也许我们需要对象和类,也许我们不需要。也许有很大一部分将使用功能性技术。也许它只需要一个5分钟的perl脚本。这取决于我们试图实现的目标
也就是说,OOP可能会妨碍纯粹的功能设计。其他的论点可能是它没有。另一个论点是,你只需要运用你的最佳判断,平衡这两种范式。其他人会插嘴说,这两种方
我正在使用erlang、mnesia和webmachine构建一个网站。我读过的大多数文档都称赞具有引用透明函数的优点
问题是,所有数据库访问都是外部状态。这意味着任何命中数据库的方法不再是引用透明的
假设我在数据库中有一个用户对象和一些处理身份验证的函数
引用不透明函数可能如下所示:
handle_web_request(http_info) ->
is_authorized_user(http_info.userid),
...
%referentially opaque
is
这似乎是我刚完成的“如何设计程序”(简化球拍)课程中,直接从课程讲稿中可以学到的两件最重要的事情:
1) 尾部调用优化,以及在非函数语言中的不足:
遗憾的是,大多数其他语言不支持尾部调用
优化。换言之,它们确实会堆积起来
即使是尾部呼叫
尾部呼叫优化发明于70年代中期,时间很长
在大多数语言的主要元素发展之后。
因为它们没有尾部调用优化,所以
语言提供了一组固定的循环结构
使遍历任意大小的数据成为可能
a) 在过程语言中,这种优化的等价物是什么?
b) 使用这些等价物是否意味着我们可以避免在类似
您的函数组合实现是正确的,因为:
(g)∘ f) (x)=g(f(x))表示x中的所有x
据
我得到:
let (++) f g x = f (g x) in
let f x = x + 1 in
let g x = x * 2 in
(f++g) 1;;
在ocamlktop
- : int = 3
如何使用ocaml从满足特定条件的树结构中获取节点列表?因为一切都是重新创建的,所以没有保存的数据结构。任何试图返回列表的函数类型在命中节点时只能返回一个元素,而不是列表 这是一种树类型:
type tree = Leaf of int | Node of int * tree * tree
下面是一个函数,它返回树节点的所有偶数值:
let evens t =
let rec go sofar = function
| Leaf k -> if k mod 2 = 0
任务是编写一个函数,该函数获取一个列表,例如(7 8 2 9 5 6),然后从中心“展开”它,将其重新排列为2 9,然后2 9 8 5,最后输出为2 9 8 7 6
我大致算出了伪代码:
取数组A中的最后一个元素,将其附加到前面的数组B中
从数组A中删除最后一个元素
取数组A中的第一个元素,将其附加到前面的数组B中
从数组A中删除第一个元素
所以
782956->
7 8 2 9 5->6
8295->76
829->576
29->8576
2->98576
->2985776纠正最终输出
在架构内的功能如下:
architecture rtl of entity1 is
...
function func(data_in:data_5bit) return d_5bit is
begin
...
...
return ...;
end;
...
end rtl;
我想验证此函数是否按预期运行。因此,我在我的SVA文件中编写了一个类似(不精确)的函数
module verif(...);
...
...
function verif_func(
好的,让我试着重新表述我的问题
实际上,我想知道函数应用程序是如何在FP中实现的
它是否像命令式语言中的函数调用一样完成,即为每个调用添加堆栈帧,并在每次返回时删除堆栈帧
或者,与内联函数类似,函数调用语句被函数定义替换
此外,就函数应用程序的实现而言,FP中语句函数的意义在于域和相应范围之间的映射。显然,不可能为每个域范围条目对维护映射,因此该语句到底意味着什么…这个问题很广泛,我无法完全回答,因为我不知道每一种函数式编程语言。但我可以用一种语言告诉你这是怎么做到的,F#。您询问了函数应用程序
我有一个映射,我正在修改它上面的每个元素,我不知道使用Enum.map然后使用Enum.into(%{})或用于理解的方法更好(更快)
for {key, value} <- my_map, into: %{} do
{key, new_value}
end
对于{key,value}可以使用来运行这种比较
一个简单的Benchee测试将表明,对于这种情况,Enum更快
iex(1)> m = %{a: 1, b: 2, c: 3, d: 4}
%{a: 1, b: 2, c:
1 2 3 4 5 6 ...
下一页 最后一页 共 58 页