คำถามติดแท็ก functional-programming

ฟังก์ชั่นการเขียนโปรแกรมเป็นกระบวนทัศน์การเขียนโปรแกรมตามการสร้าง abstractions โดยใช้ฟังก์ชั่นหลีกเลี่ยงผลข้างเคียงและการเปลี่ยนแปลงของรัฐ การเขียนโปรแกรมใช้งานได้จริงนั้นปลอดภัยต่อเธรด

9
Java SE 8 มีคู่หรือ Tuples หรือไม่
ฉันกำลังเล่นกับการทำงานที่ขี้เกียจใน Java SE 8 และฉันต้องการmapดัชนีiไปเป็นคู่ / tuple (i, value[i])จากนั้นfilterขึ้นอยู่กับvalue[i]องค์ประกอบที่สองและสุดท้ายก็ส่งออกดัชนี ฉันต้องยังคงประสบกับสิ่งนี้: อะไรคือสิ่งที่เทียบเท่าของ C ++ Pair <L, R> ใน Java? ในยุคใหม่ที่กล้าหาญของ lambdas และลำธาร? อัปเดต:ฉันนำเสนอตัวอย่างที่ค่อนข้างง่ายซึ่งมีโซลูชันที่นำเสนออย่างประณีตโดย @dkatzel ในหนึ่งในคำตอบด้านล่าง อย่างไรก็ตามมันไม่ได้พูดคุยกัน ดังนั้นให้ฉันเพิ่มตัวอย่างทั่วไปมากขึ้น: package com.example.test; import java.util.ArrayList; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { boolean [][] directed_acyclic_graph = new boolean[][]{ {false, true, …

7
ฟังก์ชั่นบางส่วนทำหน้าที่อย่างไร
ฉันไม่สามารถเข้าใจวิธีการทำงานของฟังก์ชั่นบางส่วนได้ ฉันมีรหัสต่อไปนี้จากที่นี่ : >>> sum = lambda x, y : x + y >>> sum(1, 2) 3 >>> incr = lambda y : sum(1, y) >>> incr(2) 3 >>> def sum2(x, y): return x + y >>> incr2 = functools.partial(sum2, 1) >>> incr2(4) 5 ตอนนี้อยู่ในสาย incr = lambda y : …

8
เหตุใดผลข้างเคียงที่จำลองเป็นพระใน Haskell
ใครบ้างให้คำแนะนำว่าทำไมการคำนวณที่ไม่บริสุทธิ์ใน Haskell ถูกจำลองเป็นพระ? ฉันหมายถึง monad เป็นเพียงส่วนต่อประสานที่มี 4 การดำเนินการดังนั้นอะไรคือเหตุผลที่ทำให้เกิดผลข้างเคียงในการสร้างแบบจำลอง?

6
จัดกลุ่มตามจำนวนใน Java 8 stream API
ฉันพยายามหาวิธีง่ายๆใน Java 8 stream API เพื่อทำการจัดกลุ่มฉันออกมาด้วยวิธีที่ซับซ้อนนี้! List<String> list = new ArrayList<>(); list.add("Hello"); list.add("Hello"); list.add("World"); Map<String, List<String>> collect = list.stream().collect( Collectors.groupingBy(o -> o)); System.out.println(collect); List<String[]> collect2 = collect .entrySet() .stream() .map(e -> new String[] { e.getKey(), String.valueOf(e.getValue().size()) }) .collect(Collectors.toList()); collect2.forEach(o -> System.out.println(o[0] + " >> " + o[1])); ฉันขอขอบคุณที่คุณป้อนข้อมูล


1
สถานะของการเขียนโปรแกรมแบบมัลติคอร์ใน Haskell คืออะไร?
สถานะของการเขียนโปรแกรมแบบมัลติคอร์ใน Haskell คืออะไร? โครงการเครื่องมือและห้องสมุดใดบ้างที่มีให้ในตอนนี้ มีรายงานประสบการณ์อะไรบ้าง?

9
ความแตกต่างระหว่างภาษาการทำงานและการเขียนโปรแกรมที่จำเป็นคืออะไร?
ภาษากระแสหลักส่วนใหญ่รวมถึงภาษาการเขียนโปรแกรมเชิงวัตถุ (OOP) เช่น C #, Visual Basic, C ++ และ Java ได้รับการออกแบบมาเพื่อสนับสนุนการเขียนโปรแกรมที่จำเป็น (ขั้นตอน) ส่วนใหญ่ในขณะที่ Haskell / gofer เหมือนภาษาล้วนๆ ใครสามารถอธิบายเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างสองวิธีในการเขียนโปรแกรมได้อย่างไร ฉันรู้ว่ามันขึ้นอยู่กับความต้องการของผู้ใช้ในการเลือกวิธีการเขียนโปรแกรม แต่ทำไมถึงแนะนำให้เรียนรู้ภาษาที่ใช้งานได้

23
วิธีหลีกเลี่ยงการซ้อนฟังก์ชันที่ไม่ตรงกันใน Node.js
ฉันต้องการสร้างหน้าเว็บที่แสดงข้อมูลบางส่วนจากฐานข้อมูลดังนั้นฉันได้สร้างฟังก์ชั่นบางอย่างที่ได้รับข้อมูลนั้นจากฐานข้อมูลของฉัน ฉันเป็นแค่มือใหม่ใน Node.js ดังนั้นเท่าที่ฉันเข้าใจถ้าฉันต้องการใช้พวกเขาทั้งหมดในหน้าเดียว (การตอบสนอง HTTP) ฉันต้องรังพวกเขาทั้งหมด: http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); var html = "<h1>Demo page</h1>"; getSomeDate(client, function(someData) { html += "<p>"+ someData +"</p>"; getSomeOtherDate(client, function(someOtherData) { html += "<p>"+ someOtherData +"</p>"; getMoreData(client, function(moreData) { html += "<p>"+ moreData +"</p>"; res.write(html); res.end(); }); }); }); หากมีฟังก์ชั่นมากมายเช่นนั้นแล้วการทำรังกลายเป็นปัญหา มีวิธีหลีกเลี่ยงสิ่งนี้หรือไม่? …

2
แอปพลิเคชันในโลกแห่งความจริงของ zygohistomorphic prepromorphisms
ใช่สิ่งเหล่านี้ : {-#LANGUAGE TypeOperators, RankNTypes #-} import Control.Morphism.Zygo import Control.Morphism.Prepro import Control.Morphism.Histo import Control.Functor.Algebra import Control.Functor.Extras import Control.Functor.Fix import Control.Comonad.Cofree zygohistomorphic_prepromorphism :: Functor f => Algebra f b -> GAlgebra f (ZygoT (Cofree f) b) a -> (f :~> f) -> FixF f -> a zygohistomorphic_prepromorphism f = g_prepro (distZygoT …

7
ผลกระทบของ foldr กับ foldl (หรือ foldl ')
ประการแรกโลกแห่งความจริง Haskellซึ่งฉันอ่านกล่าวว่าจะไม่เคยใช้และแทนที่จะใช้foldl foldl'ดังนั้นฉันจึงเชื่อมั่น แต่ฉันมีหมอกในเมื่อจะใช้กับfoldr foldl'แม้ว่าฉันจะสามารถเห็นโครงสร้างของวิธีการทำงานของพวกเขาที่แตกต่างออกไปตรงหน้าฉันก็โง่เกินกว่าที่จะเข้าใจว่า "ซึ่งดีกว่า" ฉันคิดว่ามันดูเหมือนว่าฉันไม่ควรทำเรื่องสำคัญซึ่งใช้เพราะพวกเขาทั้งคู่ให้คำตอบเดียวกัน (ไม่ใช่พวกเขา?) ในความเป็นจริงประสบการณ์ก่อนหน้าของฉันกับโครงสร้างนี้มาจาก Ruby injectand Clojure's reduceซึ่งดูเหมือนจะไม่มีเวอร์ชั่น "ซ้าย" และ "ถูกต้อง" (คำถามด้านข้าง: พวกเขาใช้เวอร์ชันใด) ข้อมูลเชิงลึกใด ๆ ที่สามารถช่วยคัดสรรที่ท้าทายเช่นฉันจะได้รับการชื่นชมมาก!

13
มีเครื่องมืออะไรบ้างสำหรับการเขียนโปรแกรมการทำงานใน C
ฉันได้คิดมากเกี่ยวกับวิธีการทำโปรแกรมฟังก์ชั่นใน C ( ไม่ใช่ C ++) เห็นได้ชัดว่า C เป็นภาษาขั้นตอนและไม่สนับสนุนการเขียนโปรแกรมเชิงฟังก์ชันจริงๆ มีส่วนขยายคอมไพเลอร์ / ภาษาที่เพิ่มโครงสร้างการเขียนโปรแกรมการทำงานบางอย่างให้กับภาษาหรือไม่ GCC มีฟังก์ชั่นที่ซ้อนกันเป็นส่วนขยายภาษา ฟังก์ชั่นที่ซ้อนกันสามารถเข้าถึงตัวแปรจากเฟรมหลักของสแต็กหลักได้ ตัวอย่างเช่นสิ่งหนึ่งที่ฉันคิดว่าอาจมีประโยชน์จริง ๆ ใน C คือที่ใดก็ตามที่คาดว่าจะมีตัวชี้ฟังก์ชั่นคุณสามารถส่งผ่านการแสดงออกแลมบ์ดา C ++ 0x กำลังจะรวมแลมบ์ดานิพจน์ (ซึ่งฉันคิดว่ามันยอดเยี่ยม); อย่างไรก็ตามฉันกำลังมองหาเครื่องมือที่ใช้กับ C ตรง [แก้ไข] เพื่อชี้แจงฉันไม่พยายามแก้ปัญหาเฉพาะใน C ที่เหมาะกับการเขียนโปรแกรมการทำงานมากกว่า ฉันแค่อยากรู้เกี่ยวกับเครื่องมือที่ออกมีถ้าฉันต้องการที่จะทำ

14
การบีบอัดสตรีมโดยใช้ JDK8 พร้อม lambda (java.util.stream.Streams.zip)
ใน JDK 8 ที่มีแลมบ์ดา b93 มีคลาสjava.util.stream.Streams.zip ใน b93ซึ่งสามารถใช้ในการสตรีม zip (นี่คือตัวอย่างในบทเรียนExploring Java8 Lambdas ตอนที่ 1 โดย Dhananjay Nene ) ฟังก์ชั่นนี้: สร้างสตรีมรวมที่ขี้เกียจและต่อเนื่องกันซึ่งองค์ประกอบเป็นผลลัพธ์ของการรวมองค์ประกอบของสองสตรีม อย่างไรก็ตามใน b98 นี้ได้หายไป Infact Streamsชั้นไม่ได้สามารถเข้าถึงได้ในjava.util.stream ใน B98 ฟังก์ชั่นนี้ได้ถูกย้ายไปแล้วหรือไม่และถ้าอย่างนั้นฉันจะซิปสตรีมอย่างกระชับโดยใช้ b98 ได้อย่างไร? แอปพลิเคชันที่ฉันมีอยู่ในการใช้งานจาวาของ Shenซึ่งฉันได้แทนที่ฟังก์ชั่น zip ใน static <T> boolean every(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) static <T> T find(Collection<T> c1, Collection<T> …

2
ฉันจะใช้วิธีการรวมใน lodash เพื่อตรวจสอบว่าวัตถุอยู่ในคอลเลกชันได้อย่างไร
lodash ให้ฉันตรวจสอบการเป็นสมาชิกของชนิดข้อมูลพื้นฐานด้วยincludes: _.includes([1, 2, 3], 2) > true แต่สิ่งต่อไปนี้ใช้ไม่ได้: _.includes([{"a": 1}, {"b": 2}], {"b": 2}) > false สิ่งนี้ทำให้ฉันสับสนเพราะวิธีการต่อไปนี้ที่ค้นหาคอลเลกชันดูเหมือนจะทำได้ดี: _.where([{"a": 1}, {"b": 2}], {"b": 2}) > {"b": 2} _.find([{"a": 1}, {"b": 2}], {"b": 2}) > {"b": 2} ผมทำอะไรผิดหรือเปล่า? ฉันจะตรวจสอบการเป็นสมาชิกของวัตถุในคอลเล็กชันด้วยได้includesอย่างไร แก้ไข: คำถามเดิมสำหรับ Lodash รุ่น 2.4.1, อัปเดตสำหรับ lodash 4.0.0

4
Swift Compiler Error:“ การแสดงออกที่ซับซ้อนเกินไป” ในการต่อสตริง
ฉันพบว่าสิ่งนี้น่าสนุกยิ่งกว่าสิ่งใด ฉันแก้ไขแล้ว แต่ฉันสงสัยเกี่ยวกับสาเหตุ นี่คือข้อผิดพลาด: DataManager.swift:51:90: Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions. ทำไมถึงบ่น? ดูเหมือนว่าเป็นหนึ่งในการแสดงออกที่ง่ายที่สุดที่เป็นไปได้ คอมไพเลอร์ชี้ไปที่columns + ");";ส่วน func tableName() -> String { return("users"); } func createTableStatement(schema: [String]) -> String { var schema = schema; schema.append("id string"); schema.append("created integer"); schema.append("updated …

7
ความแตกต่างระหว่าง lapply และ do.call คืออะไร
ฉันเรียนรู้ R เร็ว ๆ นี้และสับสนโดยทั้งสองฟังก์ชั่นและlapply do.callดูเหมือนว่าพวกเขาจะคล้ายกับmapฟังก์ชั่นใน Lisp แต่ทำไมมีสองฟังก์ชั่นที่มีชื่อต่างกัน? ทำไม R ไม่ใช้ฟังก์ชั่นที่เรียกว่าmap?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.