두 인수의 하스켈 함수를 다시 작성해야합니까이 하스켈에 다음 함수 나는 것 '관용적'하스켈을 작성하는 방법을 배우려고 노력하고있어 agreeLen :: (Eq a) => [a] -> [a] -> Int
agreeLen x y = length $ takeWhile (\(a,b) -> a == b) (zip x y)
괄호 대신 . 및 $을 사용하는 것이
는 GHCi 세션에서이 예제를 고려하십시오 Prelude> :set -XRankNTypes
Prelude> let bar :: (forall a.[a]->[a]) -> [Int]; bar f = f [1,2,3]
이 계급-2 형으로 funcion bar을 정의합니다. 우리가 포인트 무료 스타일 같은 작성하는 경우 작동, 놀랍게도, <interactiv
let list_to_string = (String.concat "") (List.map (String.make 1));;
이것은 잘못된 것이지만, 인수가 여전히 제공된다는 것을 어떻게 이해할 수 있습니까? 인수는 타입 char list 일 것으로 예상된다. 그것에 적용될 필요가있는 첫번째 기능은 (List.map (String.make 1))이고, 그
나는 숙제를 쓰고있다 (CIS194 하스켈 과정). 명백한 재귀없이 파이프 라인 함수에 다음 재귀 함수를 다시 작성해야합니다. fun2 :: Integer -> Integer
fun2 1 = 0
fun2 n
| even n = n + fun2 (n ‘div‘ 2)
| otherwise = fun2 (3 * n + 1)
내 첫 번째
다음 코드를 단순화하는 방법이 있습니까? 파일 이름은 파일 이름 (문자열) 목록입니다 (예 : [ "에 foo.txt", "bar.c", "baz.yaml"] filenames.map { |f| File.size(f) }
는 "File.size을"설정으로 발동하거나 차단하는 방법이 있는가? 기존 개체의 메서드에 대해서는 &:method을 사용할 수 있습
겉으로는 사소한 문제가 있습니다. 포인트가없는 방식으로 작성된 함수에서 예외를 처리 할 수 없습니다. 두 기능은 겉으로는 동일하지만 서로 다른 유형이, let divide1 x y =
try
x/y
with
| :? System.DivideByZeroException -> 42
let divide2 =
하스켈에서 수행중인 계산 중 일부는 Float에서 Float으로 매핑되는 함수 목록을 생성합니다. 그래서 같이, 이러한 모든 기능을 하나의 인자를 적용 할 : 던져 - 멀리 람다 함수를 사용하지 않고 할 수있는 방법이 -- x :: Float
-- functions :: [Float -> Float]
map (\f -> f x) functions
있
여기에서 부수적 인 질문으로 What's the easiest way to do something like delegate multicast in F# 나는 적절한 제목으로 충분한 질문을 제기하는 것이 더 나을 것이라고 생각합니다. 이 버전은 재귀가 발생하지 것입니다 :이 버전은 것 let mutable notify = fun x -> x
let wrap
가능한 중복 : 내가 대학에있을 때 What are advantages and disadvantages of “point free” style in functional programming? 나는 하스켈을 배워야했다. 내 수업 중 하나에서 포인트없는 기능을 사용하는 방법을 배웠습니다. 학문적 인 관점 이외에 점 자유로운 작풍에있는 프로그램의 어떤 이점 있는