Advertisement
Miquel_Fuster

Protoprogramación funcional

May 23rd, 2022
609
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Protoprogramación funcional. En main()
  2.  * está la estructura: quiero_que(OPERES).los_datos(A, B)
  3.  * o: quiero_que(OPERES).al_dato(A)
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <stdlib.h>
  9.  
  10. typedef struct operacion {
  11.     int (*los_datos) (int a, int b);
  12.     int (*al_dato) (int a);
  13. } operacion;
  14.  
  15. operacion quiero_que(char *);
  16.  
  17. /* observa las operaciones quiero_que */
  18.  
  19. int main() {
  20.     printf("suma : %d\n" "resta: %d\n" "cambio de signo: %d\n",
  21.         quiero_que("sumes").los_datos(10, 5),
  22.         quiero_que("restes").los_datos(10, 5),
  23.         quiero_que("cambies de signo").al_dato(10)
  24.     );
  25. }
  26.  
  27. /* La magia ocurre aqui abajo */
  28.  
  29. int sumar(int a, int b) {
  30.     return a + b;
  31. }
  32.  
  33. int restar(int a, int b) {
  34.     return a - b;
  35. }
  36.  
  37. int cambio_signo(int a) {
  38.     return -a;
  39. }
  40.  
  41. operacion quiero_que(char *que_hacer) {
  42.     operacion op;
  43.     if(!strcmp(que_hacer, "sumes"))
  44.         op.los_datos = sumar;
  45.     else if(!strcmp(que_hacer, "restes"))
  46.         op.los_datos = restar;
  47.     else if(!strcmp(que_hacer, "cambies de signo"))
  48.         op.al_dato = cambio_signo;
  49.     else
  50.         exit(EXIT_FAILURE); // Como es un juego, que muera el programa
  51.    
  52.     return op;
  53. }
Advertisement
RAW Paste Data Copied
Advertisement