﻿ Functional Programming_It technology blog_ Programming technology Q & A「QuestionBank」
QuestionBank

### Functional programming Which functional language(s) does Clojure share the most in common with?

I don't know much about functional programming but am interested in learning Clojure. Are there any functional languages that would be a good point of reference to understand how functional programming works in Clojure? Or is Clojure different enough in its functional programming approach that I would be better off to just focus on Clojure's functional features by themselves?

### Functional programming SML/NJ - Pattern Matching an Dynamic Typing

Is it possible to write functions with dynamically typed input parameters? I tried pattern matching, but apparently it does not work like this. I wish to do something like this: fun firstStr (0,n:string) = n | firstStr (b:string,n:string) = if b>n then n else b; Thank you.

### Functional programming What is the correct term for the following functional programming pattern?

I've heard it referred to as a stream, as an infinite list, and sometimes even as a lazy sequence. What is the correct term for the following pattern? (Clojure code shown) (def first\$ first) (defn second\$ [str] (cond (empty? str) () true ((first (rest str))))) (defn stream-builder [next_ n] (cons n (cons (fn [] (stream-builder next_ (next_ n))) ()))) (defn stream [str n] (cond (= 0 n) () true (cons (first\$ str) (stream (second\$ str) (- n 1))))) (def odd (stream-bui

### Functional programming Practical application of SKI calculus and BCKW

I can understand how to create and think about the SKI and BCKW calculus, but I am never able to find practical uses. Maybe I am not looking deeply enough? That is, I wonder if (an example only please, I am not implying this is true) Java Servlets use S extensively and Python generators are an example of BCW and I am just unable to see through the forest of trees?

### Functional programming Racket: contracts on higher-order functions

I am using Racket contract system, and I want to export a function of no arguments, which returns a lambda expression with no arguments, e. g.: #lang racket (define (foo) (do-somthing) (lambda () (do-other things))) Does anyone know how to write contract for this kind of function?

### Functional programming Try to further understanding the interface/module of OCaml

I understand in OCaml there are concepts of interfaces and module. And I understand how to use them now. However, what I don't understand is how to fully utilise them. For example, in Java, let's say we have a interface Map and we also have Hashtable and HashMap that implement Map. In code, I can do like: Map m = new Hashtable(); m.put("key", value); Someday, if I change my mind, I can change to Hashmap very quickly by changing Map m = new Hashtable(); to Map m = new HashMap();, right

### Functional programming Do I need to call Random.self_init in OCaml?

First of all, I don't care about seed in this question. My question is that whether I should call Random.self_init every time I want a fresh start in my function? let shuffle l = Random.self_init (); let tagl = List.map (fun x -> (Random.bits (), x)) l in List.map (fun x -> snd x) (List.sort compare tagl);; for example, in the above code, is Random.self_init () necessary or not?

### Functional programming How to perform side-effects in pure functional programming?

I am dealing with the concept of functional programming for a while now and find it quite interesting, fascinating and exciting. Especially the idea of pure functions is awesome, in various terms. But there is one thing I do not get: How to deal with side-effects when restricting yourself to pure functions. E.g., if I want to calculate the sum of two numbers, I can write a pure function (in JavaScript): var add = function (first, second) { return first + second; }; No problem at all. But

### Functional programming How to print y in the case as given below instead of #?

Gives me output product (variable "x",pow (variable #,2)); I want y instead of # there ?

### Functional programming Scheme language case conditional with multiple tests?

What I'm trying to do is shown below in pseudo code: case (test0, test1) begin (false,false): statement 0; (false,true): statement 1; (true,false): statement 2; (true,true): statement 3; end How to do it in scheme using the case conditional? The problem is that case uses the eqv? predicate which it seems will always return false (because (eqv? '(#f . #f) '(#f . #f)) evaluates to #f). Would appreciate any reasonably concise way of expressing above pattern in scheme (other t

### Functional programming why (car ''(a b)) evaluated to 'quote?

I'm a beginner Scheme programmer and I want to enrich my knowledge in functional programming. I programm in DrRacket IDE. Recently I found some interesting piece of code: (car ''(a b)) Output: 'quote Can anyone explain me why is it evaluated in this way?

### Functional programming OCaml This is not a function; it cannot be applied

I have a function num_order rank -> int defined. the following function call will cause a error let dom_rank r1 r = (num_order r1) > (num_order r) dom_rank Seven Eight Line 1: Error: This expression has type int This is not a function; it cannot be applied. it seems to be the first line to be causing the problem... however when I remove the second line, the error is gone.

### Functional programming How do you evaluate boolean and then execute statements in java 8 with Optional?

How can I refactor this snippet in Java 8 Optional? Can I use map with OrElseThrow for this? What is a cleaner way of writing this code? public void updateMyDao(MyObj objToUpdate) { if(myOptional.isPresent()) { MyDao oq = myOptional.get(); if(!oq.getReferenceId().equals(objToUpdate.getId())) throw new RuntimeException("Bad Move!"); oq.setAttribute(objToUpdate.getAttribute()); ..... ..... } else { throw new RuntimeException("Entity was not foun

### Functional programming Should supervisor and worker process be registered as global? -Erlang

I just started learning Erlang for a month and was curious to know whether both supervisor module and worker module should be registered as global in a singleton process?

### Functional programming Functional Programming: Are maps sequential? Implications for closures

I will illustrate with Julia: Suppose I have a function counter() that is a closure. function mycl() state=0

### Functional programming Can a pure function use a private constant variable inside the same class?

Can a pure function use a private constant variable inside the same class? for example: class TimesThousand { const CONSTANT = 1000; function calculate(number) { return number * CONSTANT; } } can calculate() be considered as a pure function?

### Functional programming Scheme using map on arguments with different size

How do I accomplish something like this in scheme? an example input would be (scalar-mult '(1 2) 2) with the output '(2 4) here's what I've tried so far: (define (scalar-mult vec s) (map (λ (vec s) (* s vec)) vec s)) I've seen a different similar thread recommend concat and repeat but that doesn't seem to work on scheme

### Functional programming Storing user input information in functional programming (Erlang) using only immutable variables

As a beginner in Erlang, I am working my way through the Programming Erlang book (2nd ed). I have a very hard time grasping how to store and periodically update external information (such as intermittent user input) using the principles of functional programming exclusively. To take my present example, I am now in the beginning of the concurrent programming section (Chapter 12) where the book talks about the area server. Below is my variant of it. As an exercise, I am trying to add to this m

### Functional programming functional update single value in q/kdb+

I want same result by functional update as update col2:`aaaa from t where col1=`aa; I tried ![t;enlist (=;field1;enlist v1);0b;(enlist field2)!(enlist v2)]; but it give me an error 'aaaa appreciate if some one can help.

### Functional programming Scheme Function: (show-up-to-n '(4 6 3 -8 3 4) 5) ==> (4 3 -8 3 4)

i am trying to write a function in Scheme that takes in a list and an integer and outputs the same list minus all the members less than the integer... please help. I seem to be unable to add the numbers into a new list that can be outputed. (define result '()) (display result) (define nums-less-than-x (lambda (lst x) (define impl (lambda (l1 b result) (if (null? l1) result (begin (if (> b (car l1)) (begin (cons (car l1) result)

### Functional programming Can't open Llvm in ocaml

I'm trying to use llvm binding in ocaml, in my file test.ml, I have one line of code: open Llvm When I run the command ocamlbuild -use-ocamlfind test.byte -package llvm I get this result: + ocamlfind ocamldep -package llvm -modules test.ml > test.ml.depends ocamlfind: Package `llvm' not found Command exited with code 2. Compilation unsuccessful after building 1 target (0 cached) in 00:00:00. What did I do wrong in this? Thanks. BTW, the _tag file contains: "src": traverse <src

### Functional programming How to combine equal sequence elements (functional programming)?

I want to write a function that takes in a sequence <1,1,2,2,3> and returns the sequence with equal elements grouped like <<1,1>, <2,2>, <3>>. I'm using sequences, not lists, but some of the functions are similar. Some of the functions I am thinking of using are map, reduce, tabulate, filter, append etc.. Reduce takes in an associative function and returns the sequence that is "reduced" by that operator. So, reduce op+ 0 <1,2,3> = 6. My first thought was to use map to rai

### Functional programming What is mappedList and x from the list l?

What is mappedList and x if you have the list l as input? let mapFold (f: 'a -> 'b) (l : List<'a>) : List<'b> = l |> List.fold (fun mappedList x -> f x :: mappedList) [] |> List.rev

### Functional programming "Syntax error" while writing OCaml function?

I am writing a function in OCaml to raise x to the power of y. My code is: #let rec pow x y = if y == 0 then 1 else if (y mod 2 = 0) then pow x y/2 * pow x y/2 else x * pow x y/2 * pow x y/2;; When I try to execute it, I get an error for syntax in line one, but it doesn't tell me what it is.

### Functional programming SICP 3.6 - Rand procedure and local state variables

I'm having difficulties with exercise 3.6 in SICP. They give the following code for a pseudo-random number generator: (define rand (let ((x random-init)) (lambda () (set! x (rand-update x)) x))) To which I added, for testing purposes: (define (rand-update x) (+ x 1)) (define random-init 4) Repeated applications produces > (rand) 5 > (rand) 6 > (rand) 7 as hoped, although I can't see why this works. Anyway, exercise 3.6 asks us to modify rand so that it takes

### Functional programming Immutable js - best way to extract values from a deeply nested object in a declarative way?

Let say I get a json back from an API call with this shape once parsed: const foos = { foo1: { bar1: [{a:1},{a:2},{a:3}], bar2: [{a:4},{a:5},{a:6}], bar3: [{a:7},{a:8},{a:9}] }, foo2: { bar4: [{a:10},{a:11},{a:12}], bar5: [{a:13},{a:14},{a:15}] } } Then, I wrap it in fromJs() to make it immutable. Next, I need to iterate over that object to extract values this way and do whatever I want with it: var obj = {aValue: 0} Object.keys(foos).forEach( key => { O

### Functional programming Construct list terminated with a different type

Do I need a bespoke sum type to be able to define a data type that is a list of type A, where the last element is of type B (and thus have to reimplement all the nice functions defined on it). type ListTerminatedWith<'a,'b> = | Cons of 'a * ListTerminatedWith<'a,'b> | Nil of 'b ok, so the obvious thing is: type ListTerminatedWith<'a,'b> = List<'a> * 'b but, actually I only want to append the terminating value to the list when I get there (really the question i

### Functional programming scheme: element not removed after for-each / delete

Using the mit-scheme interpreter (v10.1.5-1), I was expecting this loop to remove each element of 'ls' except '2': 3 error> (define ls '(1 2 0 5)) ;Value: ls 3 error> (for-each (lambda (n) (delq! n ls)) '(0 1 5)) ;Unspecified return value 3 error> ls ;Value: (1 2) Why has '1' not been removed? The result is the same using delete! or changing the order of '(0 1 5).

### Functional programming How can I get started with functional programming?

With all the hype around functional programming, which are the best resources to getting started in functional programming [for a C# programmer]? I am not looking for C# 3.0 language improvements.

### Functional programming Why does array_map throw a warning when the closure raises an exception?

I've recently started programming with PHP again, after a long stint with other languages during which i've developed a more functional style - which i'm hoping to try and maintain. I've noticed some weird behaviour, which I managed to distill into a testcase that I'm hoping someone can explain. \$func = function(\$item) { if (\$item == 0) throw new Exception("Can't do 0"); return \$item; }; try { array_map(\$func, array(1, 2, 3, 0, 5)); } catch (Exception \$ex) { echo "Coul

### Functional programming Explanation of "Lose your head" in lazy sequences

In Clojure programming language, why this code passes with flying colors? (let [r (range 1e9)] [(first r) (last r)]) While this one fails: (let [r (range 1e9)] [(last r) (first r)]) I know it is about "Losing your head" advice but would you please explain it to me? I'm not able to digest it yet. UPDATE: It is really hard to pick the correct answer, two answers are amazingly informative. Note: Code snippets are from "The Joy of Clojure".

### Functional programming Common Lisp: compilation vs evaluation

On Emacs + Slime with sbcl, once I define a function (or more) in a file I have two choices: Evaluation: e.g. with C-M-x eval-defun Compilation: e.g. with C-c M-k compile-file The second one produces a .fasl file, too. What are the differences between the two? What's going on under the hood when I compile a definition / a file? What are the Pros and Cons of each one?

### Functional programming Find repeated elements in a list in scheme

I need to create a program written in scheme to receive a list like this: (function '(2 3 4 3 2 3 1 1 1 1 2 1 2)) Which must give me as output: -> '((4 2) (3 3) (1 4) (5 1)) This output is because there are 4 digits 2, 3 digits 3, 1 digit 4 and 5 digits 1.

### Functional programming SML/NJ - the "fun act(f,x) = f(x) ;" signature

Declare on the follow function - fun act(f,x) = f(x); Makes the signature - val act = fn : ('a -> 'b) * 'a -> 'b What does ('a -> 'b) * 'a -> 'b means ?

### Functional programming Can I use Gambit-C, Mlton, or Chicken Scheme with Google's Native Client

Those functional language compilers can each compile a functional language to C code. Google's NaCl SDK can compile C. Is it reasonable to create Native Client applications by compiling first with one of those other compilers and running the result through google's Native Client SDK? Anyone done this or have concrete info about possibilities, pitfalls, limitations? Thanks much!

### Functional programming OCaml count the negatives

I'm really stuck on how to go about this I am asked to count the number of negatives within the list, I would have submitted the assignment with: let nneg = [4; 9; -5; 0; -5; 1];; List.filter nneg (fun-> (-)) List.filter nneg (fun x -> x < 0) but it's not an "int list -> int" but instead an "int list" so i started this but i can't figure it out for the life of me how to pattern match it: let rec rev nneg = match nneg with | [] -> 0 | head::tail ->(filter tail<

### Functional programming Haskell-like libraries for Standard ML

Can anyone recommend a library extension for Standard ML with similar strength as, and preferrably looking like, Prelude for Haskell? Preferrably one that works for many ML implementations, i.e. built with only the existing standard library and itself. One library I have found is MyLib, which does not resemble Prelude particularly.

### Functional programming what's the motivation for J to introduce fork

For the evolution from APL to J, What's the motivation to introduce fork? I guess it is nice to have (+/ % #) for calculating the average, but it also makes it harder to read longer verb train. Facing this tradeoff, is there any compelling reason for the APL inventor to choose this style in J?

### Functional programming why the interpreter tell me "This kind of expression is not allowed as right-hand side of `let rec'"

I write a ocaml program that parse an arithmetic expression by parser combinator. type 'a parser = char list -> ('a * (char list)) list let return (x: 'a): 'a parser = fun input -> [x, input] let fail: 'a parser = fun _ -> [] let ( >>= ) (p: 'a parser) (f : 'a -> 'b parser): 'b parser = fun input -> List.map (fun (x, i) -> f x i) (p input) |> List.flatten let ( ||| ) (p: 'a parser) (q: 'a parser) = fun input -> (p input) @ (q input) let token: (char pars

### Functional programming Standard ML: Modify depth function for binary tree

I'm given a depth function for a binary tree as follows: fun depth Empty = 0 | depth(Node(t_1, _ t_2)) = max(depth t_1, depth t_2) + 1; Suppose I want to modify this depth function such that a single node will have depth 0 (as it is, a single node will have depth 1). How would I go about doing this? I was thinking: fun depth Empty = 0 | depth(Node(Empty, _, Empty)) = 0 | depth(Node(t_1, _, t_2)) = max(depth t_1, depth t_2) + 1; Does this look right? Thanks, bclayman

### Functional programming What are the usual higher-order primitives on lists in functional programming? (map, fold, and?)

What do you usually do with a list in purely functional programming? Obviously we have map f [x0; x1; x2] which produces [f x0; f x1; f x2] and fold f acc [x0; x1; x2] which produces f (f (f acc x0) x1) x2). For map, no information is transmitted between calls to f; for fold, all the information produced by f is re-injected in the next call through the accumulator acc. I've also seen things like flatmap that concatenates the lists produced by map f when f returns a list and for_all that appli

### Functional programming Elm : extract a record values from a list of string

I try to make a function which take a record and a list of property names and return the values as a list of string: Model -> (List String) -> (List String) The goal is later to be able to render dynamically a record into an HTML table : Model -> (List String) -> (Html Cmd) I succeed to implement this: import Html exposing (text) type Field = FieldInt Int | FieldString String type alias Model = { name: Field , age: Field } user1 = Model (FieldString "foo") (Field

### Functional programming Cannot find function `jsx:is_json/1` although jsx is included and compiled

I am writing a webapp using Erlang toolchain (OTP, rebar3, cowboy, jsx...). The following code does not work because jsx:is_json/1 cannot be found during runtime. handle_login(Req, State) -> {ok, Data, _} = cowboy_req:body(Req), case jsx:is_json(Data) of false -> cowboy_req:reply(400, [ {<<"content-type">>, <<"application/json">>} ], <<"Invalid JSON">>, Req); Stacktrace: {[{reason,undef}, {mfa,{erbid_api_ha

### Functional programming BDD/ Test driven design in functional programming?

I am reading the "Test-Driven Development By Example" book by Kent Beck (pdf available here) in which he discusses the multi-currency money problem and designs a solution step by step, by introducing tests and consequently specifying the public methods for its classes and repeatedly refactoring to accommodate new tests/behaviours. He starts by having Franc and Dollar classes. Having then contemplated on the interface of these classes and having looked at the code and spotted duplication, he ref

### Functional programming Print IntInf.int

I'm trying to get SML/NJ to print out a large integer of type IntInf.int. However the function print(Int.toString(some_large_int)) does not work because Int.toString works only for the int type and not the IntInf.int. Is there any way to print IntInf in the stdout?

### Functional programming How to join arrays like JavaScript's destructuring?

I want to make a function that receives a Vec and a position to change a number. In JavaScript, this is really simple: function replaceNumber(line, position, number) { return [ ...line.slice(0, position), number, ...line.slice(position+1, line.length) ] } How can I make a similar function in Rust? I tried this: fn replace_number(line: Vec<i32>, point: i32, number: i32) -> Vec<i32> { return [ &line[0..point as usize], &[number],

### Functional programming Point-free programming puzzle

I have a function that, written with anonymous functions, would hydrate an array of IDs using a list of objects, matching on the id property. const objectsList = [{ id: 1, ... }, { id: 2, ... }] ids.map(id => R.find(R.propEq('id', id), objectsList)) (I know it's silly to look up objects this way -- inefficient, etc. -- let's ignore that for the moment.) So, I want to do this point-free, and I'm getting stuck. This was by best attempt: ids.map(R.find(R.propEq('id', R.__), objects)) But

### Functional programming Algorithm for generating n-tuples of an m-set

I am trying to implement an algorithm in Racket (without using loop), generate-tuples, that consumes a list of length m and a natural number n, and produces all possible n-tuples of the m-set of the elements in that list. For example: (check-expect (generate-tuples '(+ -) 3) '((+ + +) (+ + -) (+ - +) (+ - -) (- + +) (- + -) (- - +) (- - -))) I am having a hard time coming up with a functional solution. I already implemented an algorithm that generates all possible permutations o

### Functional programming Trouble with equation for tick in Wadler, »Monads for functional programming«, section 3

In Wadler's Monads for functional programming I'm looking at the equation tick ✭ λ().m = m ✭ λ().tick in section 3 (in the context of State Monad). It is claimed that it holds so long as tick is the only action on state within m. I fail to understand how this can be the case. Doesn't the left term have the type of m while the right term has the type of tick : M ()? Moreover, if the type of m isn't M (), the types of the operands of ✭ are mismatched on the right-hand side. I looked

### Functional programming In functional programming, is "saving the state" of an algorithm at the recursive function argument cheating?

for instance, lets suppose we had to write an algorithm to get the max value of an array of integers, could we still call the code functional if we make the recursive function return various information that simulates an assignment to a global object? an exemple: function getMax(array, props={}) { const {index = 0, actualMax = array}= props ///initial props const arrayNotEnded = array[index + 1] !== undefined if (arrayNotEnded) { const maxOf= (a, b) => a > b ? a : b

1    2   3   4   5   6  ... 下一页 最后一页 共 11 页