[PYTHON] [Fortsetzung] Inspiriert von "Wie man reines funktionales JavaScript erstellt"

Dann habe ich verschiedene Dinge ausprobiert.

C#


using System;
class Pure{

 public static
 Func<object,Func<object>>
 pure=a=>()=>a;

 public static
 Func<Func<object>,
 Func<Func<object,Func<object>>,
 Func<object>>>
 bind=m=>f=>()=>f(m())();

 public static
 Func<Func<object>,object>
 exec=m=>m();

 public static
 Func<Func<object,object>,
 Func<object,Func<object>>>
 wrap=f=>a=>()=>f(a);
}

class MainClass{
 static void Main(){

   string str="";

   Func<object,Func<object>>
   put=Pure.wrap(a=>{Console.WriteLine(a);
   return a;});

   Func<object,Func<object>>
   get=Pure.wrap(x=>Console.ReadLine());

   Func<int,Func<object,Func<object,
   Func<object,object>>>>
   _hanoi=n=>from=>work=>dest=>null;
   _hanoi=n=>from=>work=>dest=>
   { if(n>=2)_hanoi(n-1)(from)(dest)(work);
     str=str+n.ToString()+"Zu"
     +from+"Von"+dest+"Was\n"; 
     if(n>=2)_hanoi(n-1)(work)(from)(dest);
     return str;
   };

   Func<object,Func<object>>
   hanoi=Pure.wrap(a=>
   _hanoi(int.Parse((string)a))
   ("A")("B")("C"));

   Func<object>
   step1=Pure.bind(get(null))(hanoi);

   Func<object>
   main=Pure.bind(step1)(put);

   Pure.exec(main);

 }
}

Java


import java.io.*;
import java.util.function.*;

class Pure{

 public static
 Function<Object,Supplier<Object>>
 pure=a->()->a;

 public static
 Function<Supplier<Object>,
 Function<Function<Object,
 Supplier<Object>>,
 Supplier<Object>>>
 bind=m->f->()->f.apply(m.get()).get();

 public static
 Function<Supplier<Object>,Object>
 exec=m->m.get();

 public static
 Function<Function<Object,Object>,
 Function<Object,Supplier<Object>>>
 wrap=f->a->()->f.apply(a);
}

class Main{

 static BufferedReader in=new
 BufferedReader(new
 InputStreamReader(System.in));

 static Object _get(){
   Object s=null;
   try{
     s=in.readLine();
   }catch(Exception e){
     e.printStackTrace();
   }
   return s;
 }

 static String str="";

 static Function<Integer,Function<Object,
 Function<Object,Function<Object,Object>>>>
 _hanoi=n->from->work->dest->null;

 public static void main (String[] args){

   Function<Object,Supplier<Object>>
   put=Pure.wrap.apply(a->
   {System.out.println(a);return a;});

   Function<Object,Supplier<Object>>
   get=Pure.wrap.apply(x->_get());
   
   _hanoi=n->from->work->dest->
   { if(n>=2)_hanoi.apply(n-1).
     apply(from).apply(dest).apply(work);
     str=str+Integer.toString(n)+
     "Zu"+from+"Von"+dest+"Was\n";
     if(n>=2)_hanoi.apply(n-1).
     apply(work).apply(from).apply(dest);
     return str;
   };

   Function<Object,Supplier<Object>>
   hanoi=Pure.wrap.apply(a->
   _hanoi.apply(
   Integer.parseInt((String)a))
   .apply("A")
   .apply("B")
   .apply("C"));

   Supplier<Object>
   step1=Pure.bind.apply
   (get.apply(null)).apply(hanoi);

   Supplier<Object>
   main=Pure.bind
   .apply(step1).apply(put);

   Pure.exec.apply(main);

 }
}

Python3


pure=lambda a:lambda:a
bind=lambda m:lambda f:lambda:f(m())()
exec=lambda m:m()
wrap=lambda f:lambda a:lambda:f(a)

put=wrap(lambda a:print(a))
get=wrap(lambda a:input())

s=""

_hanoi=(lambda n:
lambda f:lambda w:lambda d: 
(_hanoi(n-1)(f)(d)(w)if n>=2else s)
+(str(n)+"Zu"+f+"Von"+d+"Was\n")
+(_hanoi(n-1)(w)(f)(d)if n>=2else s))

hanoi=wrap(lambda a:
_hanoi(int(a))("A")("B")("C"))

step1=bind(get(""))(hanoi)
main=bind(step1)(put)

exec(main)

Recommended Posts

[Fortsetzung] Inspiriert von "Wie man reines funktionales JavaScript erstellt"
Inspiriert von "Wie man reines funktionales JavaScript macht"
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
Wie erstelle ich eine japanisch-englische Übersetzung?
django + nginx So lassen Sie nur angemeldete Benutzer Bilder anzeigen
Wie man einen lockeren Bot macht
Wie erstelle ich einen Crawler?
So erstellen Sie eine rekursive Funktion
[Blender] So erstellen Sie ein Blender-Plug-In
[Blender] So erstellen Sie Blender-Skripte mehrsprachig
Wie erstelle ich einen Crawler?
So machen Sie Word Cloud-Zeichen monochromatisch
[Python] Wie man eine Klasse iterierbar macht
[Cocos2d-x] So erstellen Sie eine Skriptbindung (Teil 2)
So machen Sie Multi-Boot-USB (Windows 10-kompatibel)
So erstellen Sie einen benutzerdefinierten Backtrader-Indikator
Wie erstelle ich eine Pelican Site Map?
[Cocos2d-x] So erstellen Sie eine Skriptbindung (Teil 1)
Wie man ein Dialogsystem für Anfänger erstellt
[Python] So zeigen Sie die Elemente der Liste nebeneinander an
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (11)
So stellen Sie sicher, dass WTForms TextArea dem Löschen von Dateien entspricht
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (8)
So erstellen Sie ein Spigot-Plug-In (für Java-Anfänger)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (1)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (4)
So machen Sie mehrere Kernel auf Jupyter auswählbar
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (7)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (2)
[Django] So erhalten Sie Daten durch Angabe von SQL.
Wie man eine kratzige JSON-Ausgabe japanisch macht
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (3)
So erstellen Sie ein QGIS-Plug-In (Paketerzeugung)
So löschen Sie die von Python ausgegebenen Zeichen
Ich las "Wie man ein Hacking Lab macht"
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (6)
So erstellen Sie das Substance Painter Python-Plugin (Einführung)
[Python] So sortieren Sie Instanzen nach Instanzvariablen
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (5)
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (10)
Wie man Python für Anfänger schneller macht [numpy]
So nehmen Sie Python Interpreter-Änderungen in Pycharm vor
So erstellen Sie einen eingebetteten Linux-Gerätetreiber (9)