Skip to content

Instantly share code, notes, and snippets.

@kat0h
Last active August 3, 2022 13:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kat0h/146f2f564926b7ba02eda7df9362eeeb to your computer and use it in GitHub Desktop.
Save kat0h/146f2f564926b7ba02eda7df9362eeeb to your computer and use it in GitHub Desktop.
ズンドコキヨシ
const Z = (f=> (x=>f(y=>x(x)(y))) (x=>f(y=>x(x)(y))) )

console.log(
  Z(
    (x) => (
      (n) => (
        (n==0) ? 1 : n * x(n-1)
      )
    )
  )(5)
)

Zコンビネーターでラムダ関数だけで再帰

import random;
(lambda f:(lambda x:f(lambda y:x(x)(y)))(lambda x:f(lambda y:x(x)(y))))(lambda x:lambda i:print("キヨシ!")if i==30 else [i:=i*2+random.randint(0,1)&31,print(["ドコ", "ズン"][1&i]),x(i)])(0)
(f=>(x=>f(y=>x(x)(y)))(x=>f(y=>x(x)(y))))(x=>(i=>{(i==30)?console.log("キヨシ!"):[console.log(["ズン","ドコ"][1&~(i=i*2+(Math.random()>.5)&31)]),x(i)]}))(0)
Z = (lambda f:(lambda x:f(lambda y:x(x)(y)))(lambda x:f(lambda y:x(x)(y))))

PythonのZコンビネーター

Z = (lambda f:(lambda x:f(lambda y:x(x)(y)))(lambda x:f(lambda y:x(x)(y))))

# Z(lambda x:lambda i:print("キヨシ!")if i==30 else [i:=i*2+random.randint(0,1)&31,print(["ドコ", "ズン"][1&i]),x(i)])(0)
import random;
(lambda f:(lambda x:f(lambda y:x(x)(y)))(lambda x:f(lambda y:x(x)(y))))(lambda x:lambda i:print("キヨシ!")if i==30 else [i:=i*2+random.randint(0,1)&31,print(["ドコ", "ズン"][1&i]),x(i)])(0)

# zundoko(0)

# print((lambda f:(lambda x:f(lambda y:x(x)(y)))(lambda x:f(lambda y:x(x)(y))))(lambda x:(lambda n: 1 if n==0 else n * x(n-1)))(5))

# const Z = (f=> (x=>f(y=>x(x)(y))) (x=>f(y=>x(x)(y))) )
#
# console.log(
#   Z(
#     (x) => (
#       (n) => (
#         (n==0) ? 1 : n * x(n-1)
#       )
#     )
#   )(5)
# )

(f=>(x=>f(y=>x(x)(y)))(x=>f(y=>x(x)(y))))(x=>(i=>{(i==30)?console.log("キヨシ!"):[console.log(["ズン","ドコ"][1&~(i=i*2+(Math.random()>.5)&31)]),x(i)]}))(0)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment