【プログラミング部】俺も「関数型言語」をやってみたい。JavaScriptをやれば良いのか? [479598771]
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語「Scala 3.2.0」が公開、コンパイル時にテストカバレッジのデータを出力するように
https://codezine.jp/article/detail/16490
副作用を出さなければ良いんだろ?
Pythonとかいうのがいいらしいぞ import akka.actor.{Actor, ActorSystem, Props}
case class GeneratePrimes(n: Int)
case class PrimeResult(primes: Seq[Int])
class PrimeGenerator extends Actor {
def isPrime(n: Int): Boolean = !(2 until n).exists(n % _ == 0)
def receive = {
case GeneratePrimes(n) =>
val primes = (2 to n).filter(isPrime)
sender ! PrimeResult(primes)
}
}
object ComplexScalaProgram extends App {
val system = ActorSystem("PrimeGeneratorSystem")
val primeGenerator = system.actorOf(Props[PrimeGenerator], "primeGenerator")
import system.dispatcher
import akka.pattern.ask
import akka.util.Timeout
import scala.concurrent.duration._
implicit val timeout = Timeout(5.seconds)
val future = primeGenerator ? GeneratePrimes(100)
future.map(println)
} import { useState, useEffect } from 'react';
function useLocalStorageState(key, defaultValue) {
const [state, setState] = useState(() => {
const value = localStorage.getItem(key);
return value ? JSON.parse(value) : defaultValue;
});
useEffect(() => {
localStorage.setItem(key, JSON.stringify(state));
}, [key, state]);
return [state, setState];
}
function App() {
const [value, setValue] = useLocalStorageState('myValue', '');
return (
<input
type="text"
value={value}
onChange={e => setValue(e.target.value)}
/>
);
}
export default App; from bisect import bisect_left
def longest_increasing_subsequence(arr):
if not arr:
return 0
tails = [arr[0]]
for x in arr[1:]:
if x > tails[-1]:
tails.append(x)
else:
tails[bisect_left(tails, x)] = x
return len(tails)
if __name__ == "__main__":
input_list = [10, 22, 9, 33, 21, 50, 41, 60, 80]
result = longest_increasing_subsequence(input_list)
print("Length of the Longest Increasing Subsequence:", result) >>11
Require Import List.
Import ListNotations.
Require Import Omega.
Require Import Recdef.
Require Import Permutation.
Section merge_sort.
Variable A : Type.
Variable leA : A -> A -> bool.
Fixpoint split (l : list A) : (list A * list A) :=
match l with
| [] => ([], [])
| [x] => ([x], [])
| x :: y :: tl => let (l1, l2) := split tl in (x :: l1, y :: l2)
end.
Function merge (l1 l2 : list A) {measure (fun l => length l) (l1 ++ l2)} : list A :=
match l1, l2 with
| [], _ => l2
| _, [] => l1
| x :: tl1, y :: tl2 => if leA x y then x :: merge tl1 l2 else y :: merge l1 tl2
end.
Proof.
all: intros; simpl; omega.
Defined.
Function merge_sort (l : list A) {measure length l} : list A :=
match l with
| [] => []
| [x] => [x]
| _ => let (l1, l2) := split l in merge (merge_sort l1) (merge_sort l2)
end.
Proof.
all: intros; try (apply split_length in teq0; omega).
Defined.
Theorem merge_permutation: forall l1 l2,
Permutation (l1 ++ l2) (merge l1 l2).
Theorem merge_sort_permutation: forall l,
Permutation l (merge_sort l). >>12
ケンモメンにマウントを取れてケンモメンがビビるようなコードをAIに作ってもらった >>4
{-# LANGUAGE RankNTypes #-}
import Data.Array
import Data.MemoTrie
newtype Fib a = Fib (forall r. Num r => (a -> r) -> (a -> r) -> a -> r)
fib :: Fib a -> a -> Integer
fib (Fib f) = f (const 0) (const 1)
instance HasTrie a => HasTrie (Fib a) where
newtype Fib a :->: b = FMT (MemoTrie ((->) a) ((->) a) :->: b)
trie f = FMT (trie (f . Fib))
untrie (FMT t) = untrie t . (\(Fib f) -> f)
enumerate (FMT t) = [(Fib f, b) | (f, b) <- enumerate t]
memoFib :: HasTrie a => Fib a -> Fib a
memoFib = memo
genericFib :: (HasTrie a, Num a) => a -> Integer
genericFib = fib (memoFib (Fib f))
where
f _ _ 0 = 0
f _ _ 1 = 1
f g h n = g (n - 1) + h (n - 2)
main :: IO ()
main = print $ genericFib (1000000 :: Integer) >>4
参照透過の透けるを入れ込んだ名前になってるんだよな >>5
type ('a, 'r) cont = ('a -> 'r) -> 'r
type 'a free = { run_free : 'r. ('a, 'r) cont -> 'r }
let return_free x = { run_free = (fun k -> k x) }
let bind_free m f = { run_free = (fun k -> m.run_free (fun x -> (f x).run_free k)) }
let lift_free x = { run_free = (fun k -> x k) }
let rec map_free f m = bind_free m (fun x -> return_free (f x))
let rec join_free mm = bind_free mm (fun x -> x)
let ( >>= ) = bind_free
let example_free =
let f x = return_free (x * 2) in
return_free 21 >>= f >>= f
let rec iter_free m =
m.run_free (function Some x -> Printf.printf "%d\n" x; iter_free (return_free x) | None -> ())
let () = iter_free example_free
この手のスレって
本業を28年間やっても成果の出なかった出涸らし大学職員が同じスレを何百回も立ててはコピペしてるだけだが、
まともな話は一個も出ないぞ
還暦間際にもなって30年前レベルの学部講義の後追いをする知恵遅れスレ >>6
import time
from functools import wraps, lru_cache
def timer_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.perf_counter()
result = func(*args, **kwargs)
elapsed_time = time.perf_counter() - start_time
print(f"{func.__name__} took {elapsed_time:.4f} seconds to execute.")
return result
return wrapper
def memoize_decorator(maxsize=None):
def decorator(func):
cache = lru_cache(maxsize=maxsize)(func)
@wraps(func)
def wrapper(*args, **kwargs):
return cache(*args, **kwargs)
return wrapper
return decorator
@timer_decorator
@memoize_decorator(maxsize=100)
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
if __name__ == "__main__":
n = 100
print(f"fibonacci({n}) = {fibonacci(n)}") ちなみにこいつ>>1に英語で書かれたマニュアルや論文を説明させたり、簡単な数式の計算をさせると即座に発狂して狂った事を強弁し始めるから
知能がとてつもなく低い事はすぐバレる
還暦間際にもなって匿名掲示板で学部レベルの話をするやつってのは、医学部入学や医師資格試験に何回も落ちる例の名物人間のようなタイプの成れの果て 偏差四十九の職場ですら学術成果を出せなかった
落ちこぼれ職員専用コピペ埋め立てスレ プログラミングなんかやったことないけど、λ計算の定理なら一通り追ったな
関数型言語やったら、身につくのはやいのかな 見栄張ってないでBasicで身の丈にあったプログラム書いてろ Haskellやね
いい入門書に当たる事が出来さえすれば、関数パラダイム信奉者連中のマウントへの耐性が最速で身に付けられる
第一級オブジェクト
再帰
遅延評価
ラムダ式etc.
…つまる所、プログラム分割の記述の一流儀に過ぎない訳で HaskellとC++の良いとこ取りをしたRustというプログラミング言語が最近急上昇でキテる ■ このスレッドは過去ログ倉庫に格納されています