Rumah hujung hadapan web tutorial js javascript之典型高阶函数应用介绍二_javascript技巧

javascript之典型高阶函数应用介绍二_javascript技巧

May 16, 2016 pm 05:44 PM
fungsi pesanan yang lebih tinggi

前言
在前一篇文章javascript之典型高阶函数中主要实现了几个典型的functional函数。文章最后也提出了疑问,为啥那样的实现与F#之类的函数式语言“不太一样”呢?今天来试试更“函数式”的实现。

另一种实现
同样地,尝试对之前实现的函数做一些改动,把for循环去掉。如何去掉呢?这里先要引入一个集合的归纳法定义:

一个集合要么是空集,要么是一个数与一个集合组成的数对从定义可以看到,每一个集合都可以看作为一个数和一个集合的对。例如:{1,2,4,5} 可以认为是数 1 与 集合{2,4,5} 组成的一对,写成(1 , {2,4,5})。递归地,{2,4,5} 可以看成是(2 , {4,5})。最后即为 (5 , Ø)。按照这样的理解,我们就可以用递归的方法消除循环,因为我们在分解的时候已经访问了每一个数据项,并且终结条件为空集。下面就看一下filter函数的另一个实现,原函数名加前缀f以区别之前函数:
复制代码 代码如下:

function ffilter(arr,callback){
var i=arguments[2] || 0,
  out = arguments[3] || [];
if(!arr[i]) return arguments[3];
if(callback(arr[i]))
out.push(arr[i]);
return arguments.callee(arr,callback,++i,out);
}

测试:
复制代码 代码如下:

var arr = [1,2,3,4,5,6,7,8,9,10];
var even = function(item){
if(typeof item !== "number") return false;
return !(item & 1);
};
console.log(ffilter(arr,even));

结果:
[2, 4, 6, 8, 10] 这样消除循环之后,更贴近于数学的归纳定义,显得更自然。同样地,再看一下ffold函数:
复制代码 代码如下:

var arr = [1,2,3,4,5,6,7,8,9,10];
var plus = function(a,b){
return a+b;
};
console.log(ffold(arr,plus,3));

结果:
58
其他函数以同样的方法即可。这样就感觉更functional 了,但能不能再与数学定义更加接近呢?下一次再尝试。
==========2013.1.8 更新==================
上面说到了那些写法能否与数学定义更加接近,下面就尝试一下使用链表。先给出一个定义:
复制代码 代码如下:

var node = function(){
this.data = 0;
this.tail = null;
};

再初始化一个链表
复制代码 代码如下:

var n1 = new node(),n2 = new node(),n3 = new node(),n4 = new node(),n5 = new node();
n1.data=1,n1.tail=n2;
n2.data=2,n2.tail=n3;
n3.data=3,n3.tail=n4;
n4.data=4,n4.tail=n5;
n5.data=5,n5.tail=null;

fold链表版本:
复制代码 代码如下:

function lfold(head,callback,b){
if(!head) return b;
else return callback(head.data,arguments.callee(head.tail,callback,b));
}

输出结果:
18
按照之前的定义,一个集合要么是空集,要么是一个“头”与一个“尾”(集合)组成的数对。每一次调用函数时,分解为head和tail,直到集合为空(写完上面的lfold函数真心感觉太完美了,简直就是定义,要是程序都长这样,注释都不需要了,真是一种享受)。这样子算是最接近数学定义的表示了。因为javascript不支持很多函数式语言的match,所以不能“自动”分解,也就不能直接表示归纳定义。

javascript除了以上的一些东西,还可以实现函数式里面的partial,dojo框架里面的hitch就做到了这一功能,这也是函数式贴近数学的另外一个明显的例子。我将在下一篇博客中讨论。
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melakukan pengaturcaraan berfungsi dengan PHP Bagaimana untuk melakukan pengaturcaraan berfungsi dengan PHP Jun 06, 2023 am 08:21 AM

PHP ialah bahasa sebelah pelayan yang digunakan secara meluas Salah satu sebab mengapa ramai pembangun web suka menggunakan PHP ialah perpustakaan fungsinya yang kaya dan sintaks fungsi yang ringkas dan mudah digunakan. Pengaturcaraan fungsional ialah paradigma pengaturcaraan yang merangkum data dan tingkah laku dengan baik, menjadikan kod lebih modular dan lebih mudah untuk diselenggara dan diuji. Dalam artikel ini, kami akan memperkenalkan cara menggunakan PHP untuk pengaturcaraan berfungsi. Asas Pengaturcaraan Fungsional Idea teras pengaturcaraan berfungsi adalah untuk menganggap fungsi sebagai warga kelas pertama Fungsi itu sendiri boleh diluluskan, dikembalikan, dan terdiri seperti pembolehubah.

Bagaimana untuk mencipta fungsi peringkat tinggi dalam Python? Bagaimana untuk mencipta fungsi peringkat tinggi dalam Python? Sep 05, 2023 pm 07:29 PM

Dalam Python, fungsi yang mengambil fungsi lain sebagai hujah atau mengembalikan fungsi sebagai output dipanggil fungsi tertib lebih tinggi. Mari lihat ciri-cirinya - fungsi boleh disimpan dalam pembolehubah. Fungsi ini boleh dihantar sebagai parameter kepada fungsi lain. Fungsi tertib tinggi boleh disimpan dalam bentuk senarai, jadual cincang, dsb. Fungsi boleh dikembalikan daripada fungsi. Mari kita lihat beberapa contoh − Berfungsi sebagai objek Terjemahan Bahasa Cina Contoh ialah: Contoh Dalam contoh ini, fungsi ini dianggap sebagai objek. Di sini, fungsi demo() diberikan kepada pembolehubah - #Creatingafunctiondefdemo(mystr):returnmystr.swapcase()#swappingthecase

Apakah fungsi peringkat tinggi dalam Python? Apakah fungsi peringkat tinggi dalam Python? Nov 10, 2023 pm 04:42 PM

Fungsi tertib tinggi termasuk map(), filter(), reduce(), fungsi lambda, partial(), dsb. Pengenalan terperinci: 1. map(): Fungsi terbina dalam ini menerima fungsi dan satu atau lebih objek boleh lelar sebagai input, dan kemudian mengembalikan lelaran yang menggunakan fungsi input pada setiap elemen objek boleh lelar; Fungsi terbina dalam ini mengambil fungsi dan objek boleh lelar sebagai input, dan mengembalikan lelaran yang menghasilkan elemen tersebut yang menyebabkan fungsi input mengembalikan True, dsb.

Fungsi Anak Panah PHP: Cara mengendalikan panggilan bersarang ke fungsi tertib lebih tinggi Fungsi Anak Panah PHP: Cara mengendalikan panggilan bersarang ke fungsi tertib lebih tinggi Sep 13, 2023 am 08:27 AM

Fungsi anak panah PHP: Cara mengendalikan panggilan bersarang bagi fungsi tertib tinggi, contoh kod khusus diperlukan Pengenalan: Dalam versi 7.4 PHP, konsep fungsi anak panah (fungsi anak panah) telah diperkenalkan dengan cara yang ringkas dan boleh diproses dengan elegan. Artikel ini akan memperkenalkan penggunaan asas fungsi anak panah dan menunjukkan cara mengendalikan panggilan bersarang bagi fungsi peringkat tinggi melalui contoh kod tertentu. 1. Apakah fungsi anak panah? Fungsi anak panah ialah ciri baharu yang diperkenalkan dalam versi PHP7.4 Ia adalah a

Fungsi tertib tinggi dalam Python Fungsi tertib tinggi dalam Python Sep 13, 2023 pm 06:53 PM

Pengenalan kepada Python's World of Higher-Order Functions Jika anda ingin meningkatkan kemahiran pengaturcaraan Python anda dan menjana kod yang lebih ekspresif dan cekap, anda telah datang ke tempat yang betul. Fungsi dalam Python adalah lebih daripada sekadar blok kod khusus. Ia juga merupakan perkara yang berkuasa yang boleh dialihkan, dipindahkan, dan juga dijana secara dinamik. Fungsi tertib tinggi meningkatkan kepelbagaian ini dengan memproses fungsi lain. Artikel ini akan membincangkan secara meluas prinsip fungsi peringkat tinggi. Kami akan meneroka asas proses sebagai objek kelas pertama, menyelami contoh dunia sebenar bagi fungsi tertib tinggi dan menggalakkan kuasa fungsi lambda untuk kod yang jelas dan cantik. Model pengaturcaraan berfungsi dan kelebihannya apabila digunakan dalam Python juga akan dibincangkan. Selepas membaca artikel ini, anda akan mempunyai pemahaman yang kukuh tentang fungsi tertib tinggi dan mengetahui

Analisis senario aplikasi fungsi peringkat tinggi di Golang Analisis senario aplikasi fungsi peringkat tinggi di Golang May 17, 2023 pm 05:40 PM

Dengan populariti dan perkembangan bahasa Golang, semakin ramai pembangun mula cuba menggunakan idea pengaturcaraan berfungsi. Fungsi tertib tinggi di Golang membawa kemudahan besar kepada pengaturcaraan berfungsi dan digunakan secara meluas dalam pembangunan sebenar. Jadi, apakah senario aplikasi fungsi tertib tinggi di Golang? Seterusnya, kami akan menganalisis ini. Pemprosesan parameter fungsi dan nilai pulangan Di Golang, fungsi boleh digunakan sebagai parameter fungsi lain atau mengembalikan fungsi. Ini bermakna kita boleh menghantar fungsi sebagai parameter kepada yang lain

Bagaimana untuk melakukan pengaturcaraan berfungsi dengan PHP Bagaimana untuk melakukan pengaturcaraan berfungsi dengan PHP Jun 06, 2023 am 08:21 AM

PHP ialah bahasa sebelah pelayan yang digunakan secara meluas Salah satu sebab mengapa ramai pembangun web suka menggunakan PHP ialah perpustakaan fungsinya yang kaya dan sintaks fungsi yang ringkas dan mudah digunakan. Pengaturcaraan fungsional ialah paradigma pengaturcaraan yang merangkum data dan tingkah laku dengan baik, menjadikan kod lebih modular dan lebih mudah untuk diselenggara dan diuji. Dalam artikel ini, kami akan memperkenalkan cara menggunakan PHP untuk pengaturcaraan berfungsi. Asas Pengaturcaraan Fungsional Idea teras pengaturcaraan berfungsi adalah untuk menganggap fungsi sebagai warga kelas pertama Fungsi itu sendiri boleh diluluskan, dikembalikan, dan terdiri seperti pembolehubah.

Bagaimana untuk memahami fungsi peringkat tinggi jenis fungsi dalam Golang? Bagaimana untuk memahami fungsi peringkat tinggi jenis fungsi dalam Golang? Apr 20, 2024 am 11:54 AM

Fungsi peringkat tinggi Golang menerima dan mengembalikan fungsi. Mereka terbahagi kepada dua kategori: menerima fungsi sebagai parameter: memproses fungsi lain atau melaksanakan program dinamik. Kembalikan fungsi sebagai nilai pulangan: Buat dan kembalikan fungsi yang boleh disimpan dan dilaksanakan kemudian.

See all articles